【发布时间】:2018-08-10 07:33:32
【问题描述】:
我祈祷你一切都好。
我正在尝试在 Eclipse 中为“未找到”导入编写一个 QuickFix 插件。作为其中的一部分,我正在尝试生成具有各种不同导入语句类型的 AST。我试图避免设置一个成熟的 Eclipse 工作区来执行测试。
启动解析器并生成 AST 的代码非常简单。但是,我发现解析器不支持导入的“静态”关键字。因此,如果我在生成的 AST 上找到 ImportDeclaration,即使源包含“import static ...”,它的 isStatic() 属性也会为 false,如果我转储 CompilationUnit 的内容,我可以看到“static”关键字已被删除。
ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setSource("import static java.util.Collections.*;".toCharArray());
CompilationUnit cu = (CompilationUnit)parser.createAST(null);
System.err.println(cu); // prints "import java.util.Collections.*;"*
我试图通过直接生成 AST 而不是通过解析器来解决这个问题。然后我可以在ImportDeclaration 上调用“setStatic(true)”来设置它的静态标志。这会生成正确的结构:
AST ast = AST.newAST(AST.JLS8);
CompilationUnit cu = ast.newCompilationUnit();
ImportDeclaration dec = ast.newImportDeclaration();
dec.setName(ast.newName("java.util.Collections"));
dec.setStatic(true);
dec.setOnDemand(true);
cu.imports().add(dec);
System.err.println(cu); // prints "import static java.util.Collections.*;"
但是,dec.getStartPosition() 设置为 -1,dec.getLength() 返回 0,可能是因为它们不对应于任何特定来源。这弄乱了我的 QuickFix 处理器,它需要知道它们在源代码中的工作位置。我可以尝试手动设置所有设置和结束位置,但我有点希望解析器应该这样做。
有什么建议吗?它是我缺少的简单解析器配置选项吗?
【问题讨论】:
标签: java eclipse eclipse-jdt