繁体   English   中英

Eclipse JDT ASTParser错误地转换枚举声明节点

[英]Eclipse JDT ASTParser convert enum declaration node incorrectly

我正在使用JDT分析Java代码,并依赖于org.eclipse.jdt.core包而不是eclipse插件来构建独立的分析工具。 但我发现我的工具在Java代码中出现的枚举声明节点上无法正常工作。 在由jdt创建的AST中,关键字enum被视为typename而不是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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM