2010-05-20 17 views
6

मैं एक ग्रहण प्लगइन पर काम कर रहा हूं जो उपयोगकर्ता के प्रोजेक्ट में जावा कोड को संशोधित करता है।ग्रहण जेडीटी: 'सही इंडेंटेशन' प्रोग्राम प्रोग्रामिक रूप से कॉल करें?

मूल रूप से इस प्लगइन का परिणाम तो

void foo() { ... } 

सिवाय कि यह काफी है कि तरह नहीं दिखता है

@MyAnnotation 
void foo() { ... } 

हो जाता है, कि जावा एनोटेशन कुछ तरीकों से जुड़ जाते हैं है; नए डाले गए एनोटेशन पर इंडेंटेशन वैक है (विशेष रूप से, नई एनोटेशन लाइन के बाईं ओर सभी तरह से है)। मैं फ़ाइल में अपने सभी परिवर्तन करना चाहता हूं, और उसके बाद प्रोग्रामेटिक रूप से "सही इंडेंटेशन" कहता हूं।

क्या कोई यह जानता है कि यह कैसे करें? मुझे यहां या जेडीटी मंचों में उत्तर नहीं मिल रहा है, और प्रासंगिक सभी वर्गों (इंडेंटएक्शन, जावाइंडेंटर) आंतरिक पैकेज में हैं जो मुझे उपयोग नहीं करना चाहिए ...

धन्यवाद!

+0

ऐसा लगता है कि एक अच्छा प्रारंभिक बिंदु हो सकता है: org.eclipse.jdt.core.formatter.CodeFormatterAplication –

उत्तर

6

ठीक है मुझे लगता है कि मैंने जो समाधान चाहते हैं उसे समझ लिया होगा। मान लीजिए कि मुझे पूछने से पहले अधिक समय बिताना चाहिए था ... लेकिन भविष्य के संदर्भ के लिए, मैंने जो किया है! अच्छी सामग्री ToolFactory में थी ...

import org.eclipse.jdt.core.ToolFactory; 
import org.eclipse.jdt.core.formatter.CodeFormatter; 
import org.eclipse.jdt.core.ISourceRange; 
import org.eclipse.text.edits.TextEdit; 
import org.eclipse.jdt.core.ICompilationUnit; 

... 

ICompilationUnit cu = ... 

... 

CodeFormatter formatter = ToolFactory.createCodeFormatter(null); 
ISourceRange range = cu.getSourceRange(); 
TextEdit indent_edit = 
    formatter.format(CodeFormatter.K_COMPILATION_UNIT, 
    cu.getSource(), range.getOffset(), range.getLength(), 0, null); 
cu.applyTextEdit(indent_edit, null); 

cu.reconcile(); 

यह पूरी फ़ाइल को दोबारा सुधारता है। यदि आपको कम से कम सुधार करने की आवश्यकता है तो अन्य विकल्प भी हैं ...

+1

मुझे लगता है कि यह डिफ़ॉल्ट फॉर्मेटर का उपयोग करेगा। क्या आपने यह पता लगाया है कि एक और फॉर्मेटर निर्दिष्ट कैसे करें? –

-1

जब आप जावा कोड को संसाधित करते हैं तो इंडेंटेशन को जोड़ना शायद आसान होता है।

आपकी ग्रहण प्लगइन को जोड़ने के लिए void foo() { ... } लाइन पढ़ने के लिए सही था? बस जावा लाइन से इंडेंटेशन प्राप्त करें, और इंडेंटेशन में अपनी एनोटेशन संलग्न करें।

+0

धन्यवाद गिल्बर्ट, लेकिन वास्तव में मैंने लाइन नहीं पढ़ी ... मुझे विधिDeclaration.getStartPosition() से विधि स्थान मिलता है जहां methodDeclaration पैकेज org.eclipse.jdt.core.dom पैकेज में है। अब मैं वापस जा सकता हूं और लाइन की शुरुआत से विधि घोषणा से पहले क्या कॉपी कर सकता हूं, लेकिन अगर प्रोग्रामर कुछ वैकल्पिक स्वरूपण का उपयोग कर रहा है तो मैं जंक का एक गुच्छा कॉपी नहीं करना चाहता ... –

+0

ठीक है, मैंने इन्हें नहीं देखा है पहले org.eclipse.jdt संकुल। जावा स्रोत कोड में आप अपनी एनोटेशन कैसे जोड़ रहे हैं? –

संबंधित मुद्दे