- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正致力于使用 JDT 分析 Java 代码,并打算构建一个依赖于 org.eclipse.jdt.core 包而不是 eclipse 插件的独立分析工具。但是我发现我的工具无法在 Java 代码中出现的枚举声明节点上正常工作。在我由 jdt 创建的 AST 中,关键字 enum 被视为类型名而不是 enum 声明。所以我想知道我应该如何确保我的工具能够正确处理枚举声明。
我使用的jdt包是“org.eclipse.jdt.core_3.8.3.v20130121-145325.jar”。createAST 代码是:
char[] javaprogram=getJavaFile(javaFileName);
ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setSource(javaprogram);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
final CompilationUnit cu = (CompilationUnit) parser.createAST(null);
java 输入如下:
package test;
enum Color
{
RED(255, 0, 0), BLUE(0, 0, 255), BLACK(0, 0, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0);
private int redValue;
private int greenValue;
private int blueValue;
private Color(int rv, int gv, int bv)
{
this.redValue = rv;
this.greenValue = gv;
this.blueValue = bv;
}
public String toString()
{
return super.toString() + "(" + this.redValue + "," + this.greenValue + "," + this.blueValue + ")";
}
}
但是使用 astparser.createAST() 获取 CompilationUnit 节点只是得到了包含包代码的代码:
package test;
问题通过添加CompilerOptions解决,代码如下:
Map options = JavaCore.getOptions();
options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_5);
options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5);
options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5);
parser.setCompilerOptions(options);
最佳答案
正如您自己回答的那样,您必须将编译器版本设置为较新的版本,因为默认版本是 1.3
Map options = JavaCore.getOptions();
System.out.println(options.get(JavaCore.COMPILER_SOURCE)); //outputs 1.3
但是(我认为)枚举声明仅在 1.5 中添加,因此您必须将其设置为 1.5 或更高版本。另外我相信只设置 COMPILER_SOURCE
Map options = JavaCore.getOptions();
options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5); //or newer version
parser.setCompilerOptions(options);
关于java - Eclipse JDT ASTParser 错误地转换枚举声明节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21924881/
这是对 Programatically writing Java 的后续问题 我正在寻找 JDT 来构建一个独立的应用程序(不是 eclipse 插件)来以编程方式编写 JUnit 测试类。 我想知道
我正在尝试使用 JDT SearchEngine 查找对给定对象的引用。但是我在调用 org.eclipse.jdt.core.search.SearchEngine 的“搜索”方法时遇到“Nul
在Rational Software Archtect上安装AJDT 2.2.3之后,每个编辑器都会显示错误:插件org.eclipse.jdt.ui无法加载类org.eclipse.jdt.inte
以下明显不正确的代码(受 @dexter's answer to a question of mine 启发): Class[] exceptions; try { // some stuff
我在我的 adt eclipse 中遇到了这个错误。我正在使用更新版本的 java。请有人帮我解决这个问题。 最佳答案 我在 Eclipse 中发现了一次相同的错误。 这发生在我的 Windows 更
假设变量 i 的初始化如下: int i = 0; 我正在尝试检测简单的 java 变量更改,例如: i=i+1; 这可以使用带有 JDT 的访问者模式来完成,例如: public boolean v
我目前在使用 JDT Batch Compiler 时遇到问题.我的问题涉及在我上面发布的链接中概述的命令中指定源路径。我可以指定一个源路径,但不能指定多个。让我用一个简短的例子来解释: 假设我有两个
如何在没有 JDT 或其他插件的情况下获得 Eclipse,以便我可以安装 D Development Tools并为 D 制作一个 IDE? 最佳答案 Eclipse 项目下载站点 ( here f
我正在尝试编写一个插件,它将改变(更像是添加)当前 eclipse java 调试器的功能。有关我想要完成的详细信息,您可以查看此线程:Writing a custom eclipse debugge
我需要解析java方法,查看其内部的所有其他方法调用(以及它们内部和更深层次的等等),以便找到某个字符串的所有出现,比如说“System.out.println(“Blabla”) );" 我如何使用
我使用 JDT 来编译我的 java 类。 BatchCompiler 返回一个字符串,但我需要一系列问题/错误及其列和行信息。编译器.编译(单位);将错误打印到它的 printwriter,comp
如何在没有 Eclipse IDE 的情况下禁用(抑制)Eclipse jdt 编译器中不必要的转换警告?也许有任何编译选项? 最佳答案 转到:- Windows -> Preferences ->
我有一个访问者,它应该输出调用者类型、其名称、参数类型、方法声明中的相应类型,如果它是常量变量,则输出其值 public boolean visit(MethodInvocation e) {
例如,我有这样的代码 SomeObject1 obj1 = new SomeObject1(); SomeObject2 obj2 = new SomeObject2(); ... obj1.foo(
在eclipse中,有“调用层次结构”可以轻松找到调用图(或方法调用关系)。我想找一些API来提取这种关系。但是我找不到任何现有的教程来帮助我。有人能给我一些线索吗?主要是想知道应该使用JDT中的哪个
如何在 eclipse Juno (4.2) 中将方法入口断点设置为不可编辑(库)类的合成默认构造函数? 例如 public class Foo {} // can't change that co
我有一个 VariableDeclarationStatement,我通过访问 AST 保留了它。想在声明范围内找到对这个局部变量的所有引用。这包括当前范围内的嵌套 block 。 一种方法是访问下面
我正在使用 eclipse JDT,想知道是否有任何方法可以从命令行导入项目。对于 eclipse CDT, headless 构建应用程序可以达到目的,但我无法为 eclipse JDT 做到这一点
我想开发一个Java编辑器eclipse插件,它与普通的Java编辑器略有不同。是否可以扩展普通 Java 编辑器本身?提前致谢 最佳答案 在 Eclipse 中,您通常不会扩展(子类)编辑器(或其他
我正在创建一个实用程序来检测代码库中未使用的方法。通过使用下面的代码,我能够成功找到未使用的方法(没有引用)。但我还需要删除这些未使用的方法。如果可以通过 JDT,请告诉我。 // Get all t
我是一名优秀的程序员,十分优秀!