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);

但我有两个问题:1.如何检索辅助信息?2. 如何指定类路径或源路径,让编译器查找类型/方法/字段信息?

4

1 回答 1

1

我不这么认为,除非您提供自己的ICodeAssist.

正如在 Java 代码上执行代码辅助所提到的,允许这种操作的元素应该实现 ICodeAssist。

有两种操纵:

  • 代码完成- 计算 Java 令牌的完成。
  • 代码选择- 回答由给定偏移量和长度的选定文本指示的 Java 元素。

在 Java 模型中,有两个元素实现了这个接口:IClassFileICompilationUnit.
代码完成和代码选择仅在附加源的情况下回答类文件的结果。

您可以尝试在任何工作区之外打开一个文件(例如这个 FAQ),但结果不会实现ICodeAssist.

所以IFile 大部分时间来自工作空间位置

于 2010-04-26T06:28:33.110 回答