3

Eclipse jdt機能を使用すると、次のようにJavaコードスニペットのASTをトラバースできます。

ASTParser ASTparser = ASTParser.newParser(AST.JLS3);
ASTparser.setSource("package x;class X{}".toCharArray());
ASTparser.createAST(null).accept(...);

しかし、コードの完了とコードの選択を実行しようとすると、次のようなコードを記述しなければならないため、プラグインアプリケーションで実行する必要があるようです。

IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(somePath));
ICodeAssist i  = JavaCore.createCompilationUnitFrom(f);
i.codeComplete/codeSelect(...)

とにかく、jdtコードの完全/選択機能を組み込んだスタンドアロンのJavaアプリケーションを最終的に入手できることはありますか?

ありがとう!シクイ


org.eclipse.jdt.internal.codeassist.complete.CompletionParserを使用して、コードスニペットも解析できることに気づきました。

CompletionParser parser =new CompletionParser(new ProblemReporter(
        DefaultErrorHandlingPolicies.proceedWithAllProblems(),
        new CompilerOptions(null),
        new DefaultProblemFactory(Locale.getDefault())),
        false);
org.eclipse.jdt.internal.compiler.batch.CompilationUnit sourceUnit =
new org.eclipse.jdt.internal.compiler.batch.CompilationUnit(
    "class T{f(){new T().=1;}  \nint j;}".toCharArray(), "testName", null);
CompilationResult compilationResult = new CompilationResult(sourceUnit, 0, 0, 0);
CompilationUnitDeclaration unit = parser.dietParse(sourceUnit, compilationResult, 25);

しかし、2つの質問があります。1。アシスト情報を取得する方法は?2.コンパイラがタイプ/メソッド/フィールド情報を検索するためのクラスパスまたはソースパスを指定するにはどうすればよいですか?

4

1 に答える 1

1

あなたがあなた自身の実装を提供しない限り、私はそうは思いませんICodeAssist

Javaコードの実行コードアシストが言及しているように、この操作を可能にする要素はICodeAssistを実装する必要があります。

操作には2種類あります。

  • コード補完-Javaトークンの補完を計算します。
  • コードの選択-指定されたオフセットと長さの選択されたテキストによって示されるJava要素に答えます。

Javaモデルには、このインターフェースを実装する2つの要素があります:IClassFileICompilationUnit
コードの補完とコードの選択は、ソースが添付されている場合にのみ、クラスファイルの結果に応答します。

このFAQのように)任意のワークスペースの外でファイルを開くことを試みることができますが、結果は実装されません。ICodeAssist

したがって、IFile ほとんどの場合、ワークスペースの場所から発生します。

于 2010-04-26T06:28:33.110 に答える