java - 如何将 AST 转换为 JDT Java 模型

标签 java eclipse eclipse-jdt abstract-syntax-tree

我正在为我的插件编写单元测试,该插件使用 JDT 中的 IType 和 IMethod 接口(interface)。要编写单元测试,我需要实例化此类接口(interface)。回答 this question展示了如何创建 AST 模型,但我不知道如何将其转换为 Java 模型?

我的代码如下所示:

String source = 

  "package com.test\n" +
  "\n" +
  "import com.test.something;" + 
  "\n" +
  "public class Class{\n" +
  "int sum(int a, int b)\n" +
  "}\n";

ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setSource(source.toCharArray());
CompilationUnit unit = (CompilationUnit) parser.createAST(null);

所以我有一个 CompilationUnit 实例,但我需要一个 ICompilationUInit 实例,这样我就可以访问 IMethodIType 对象.

最佳答案

这实际上是不可能的。 ICompilationUnit 是 java 模型的一部分,这意味着它是某个 Java 项目的一部分,并且具有完整的类路径、包、包根等。您所做的就是创建一个解析一些未连接到任何 java 项目的文本树。

如果您可以更具体地说明您的目标是什么,那么您可能并不真正需要任何 IType 和 IMethod 实例。

或者,如果您确实需要这些类型的实例,那么您将需要生成 IProject,向其添加 java 性质,然后用​​文件填充它。最好的选择是了解 JDT 测试基础架构如何工作。

看看这个文件:https://github.com/eclipse/eclipse.jdt.core/blob/master/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/TestingEnvironment.java

以及如何在整个测试框架中使用它。

关于java - 如何将 AST 转换为 JDT Java 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15813202/

相关文章:

java - 如何使用 SVN/GIT 查找 Java 类接口(interface)何时以及为何发生更改

c# - C#/Visual Studio 的 JDT 等效项

java - Json 字符串转 Json 数组

java - XPath 解析特定节点

java - 在eclipse中启动tomcat服务器时遇到问题

java - Hibernate配置文件: Archive for required library persistence. xml无法读取

java - 如何解决eclipse中的JVM DEBUG

java - Checkstyle 用于检查某个类是否仅在某个包或子包内使用

java - 如何设置处理过程中显示的字符串中的最大单词数?

java - 调试Java代码时如何跳过循环?