2009-06-10 1 views
3

私はEclipseのインデントが最新バージョンのJavaをサポートしていることに気付きました。このクラスを使用して生成されたJavaソースコードをインデントすることができればいいと思います。それを統合する方法はありますか?コードからEclipseのインデントを使用するにはどうすればよいですか?

EDIT:私のコードにコードフォーマッタを含めることができる必要があります。外部呼び出しはありません。

EDIT2:私はそれを動作させることができました。あなたは物語hereを読むことができます。ありがとうVonC!

+0

すごいです!私は将来の読者のためにあなたの記事の主な原則で私の答えを更新しましたが、この問題についてのあなたのフィードバックのために再びありがとう。 – VonC

答えて

5

フォーマッタをstandalone application(またはdetailed here)として実行できます。

eclipse -vm <path to virtual machine> -application org.eclipse.jdt.core.JavaCodeFormatter [ OPTIONS ] <files> 

、その後、正しい結果を得るため、これらの設定をエクスポートし、eclipse.exeをパラメータにその設定ファイルを使用するために日食のIDEでの書式設定を定義するために最初に試してみてください。

  • は、この上のメソッドボイドformat(aString)を使用してCodeFormatter
  • のインスタンスを作成:
    あるいはまた、Javaプログラムで"Generating a Config File for the Formatter Application"

    eclipse [...] -config <myExportedSettings> 
    

    を参照してください、あなたは直接でフォーマットしようとすることができますaStringをフォーマットするインスタンス。書式設定された文字列を返します。 his blog entryGeo彼自身と彼のレポートへ


おかげで、私は今あなたがブログエントリで、再び完全な詳細をDefaultCodeFormatter

String code = "public class geo{public static void main(String[] args){System.out.println(\"geo\");}}"; 
    CodeFormatter cf = new DefaultCodeFormatter(); 

    TextEdit te = cf.format(CodeFormatter.K_UNKNOWN, code, 0,code.length(),0,null); 
    IDocument dc = new Document(code); 
    try { 
     te.apply(dc); 
     System.out.println(dc.get()); 
    } catch (MalformedTreeException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (BadLocationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

を使用する必要があります知っています。そのフィードバックのためにジオに感謝します!


Thorbjørn Ravn Andersenin the comments言及:

Maven2 Java Formatter Plugin v0.4はMavenのは、Eclipseフォーマッタを呼び出すことを可能にするMavenプラグインを記述しています。
は0.4として、それはサポートしていないのEclipse 3.5を呼び出すJava 8

+0

私のコードに含める必要があります。それは可能ですか? – Geo

+0

"スタンドアロンクラスとして"しかし、Javaプログラムで!はい、今理解しています;)それを今見て.. – VonC

+0

私の主要言語ではありません。私はいくつかのアイデアは私が表現するために複雑であることがわかります:)。ごめんなさい。 – Geo

1

実は、VonCの答えの一つの問題がある:DefaultCodeFormatterは「内部」パッケージであるため、クライアントが使用するべきではありません!

私は最近ここでstackoverflowで同じ質問をし、the answer a little while laterを思いついた。要するに

、あなたは

ToolFactory.createCodeFormatter(null); 
0

に私は、Eclipse-独立したプロジェクトでCodeFormatterを使用していたとして、ToolFactoryを使用する必要があります。 ToolFactory.createCodeFormatter(null);を呼び出すことによって使用されたデフォルトのオプションは、format()呼び出しの結果がnullであるソースコードを処理できませんでした。

最小限の作業オプションの設定は以下の通りです:

Hashtable<String, String> options = new Hashtable<>(); 
options.put("org.eclipse.jdt.core.compiler.codegen.targetPlatform", "1.8"); 
options.put("org.eclipse.jdt.core.compiler.compliance", "1.8"); 
options.put("org.eclipse.jdt.core.compiler.source", "1.8"); 
CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(options); 
関連する問題