ASTParser手动设置环境

时间:2016-05-04 12:50:28

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

我试图在eclipse插件之外使用JDT的ASTParser,这意味着我无法通过Java模型(IProject)轻松配置它, ICompilationUnit等)。相反,我需要使用ASTParser.setEnvironment(classpathEntries, sourcepathEntries, encoding, includeVMPath)。理论上应该没什么问题,但是我无法让源路径和类路径工作。

这些参数究竟取得了什么?我假设类路径的JAR的绝对路径,以及所有源(.java)文件的绝对路径。但是,以下操作无效(错误如下):

public static void main(String[] args) {
    String[] sourceFilePaths = new String[] {"C:\\Users\\Aljoscha\\Desktop\\workspaceba\\ExampleProject\\src\\examplepackage\\ExampleClass.java"};

    String[] classpathEntries = new String[] {"C:\\Program Files\\Java\\jdk1.8.0_31\\src.zip"};
    String[] sourcepathEntries = new String[] {"C:\\Users\\Aljoscha\\Desktop\\workspaceba\\ExampleProject\\src\\examplepackage\\ExampleClass.java"};

    ASTParser parser = ASTParser.newParser(AST.JLS8);
    parser.setResolveBindings(true);
    parser.setBindingsRecovery(true);
    parser.setEnvironment(classpathEntries, sourcepathEntries, null, false);

    MyFileASTRequestor requestor = new MyFileASTRequestor();

    parser.createASTs(sourceFilePaths, null, null, requestor, null);
}

这给了我以下错误:

Exception in thread "main" java.lang.IllegalStateException: invalid environment settings
at org.eclipse.jdt.core.dom.ASTParser.getClasspath(ASTParser.java:261)
at org.eclipse.jdt.core.dom.ASTParser.createASTs(ASTParser.java:993)
at asg.Foo.main(Foo.java:22)

有谁知道要传递给setEnvironment()函数的内容?

1 个答案:

答案 0 :(得分:1)

user = models.User.filter_by(username=response['username'])classpathEntries应该是文件夹,JAR或ZIP。

顺便说一句,sourcepathEntries 的参数bindingKeys不能是parser.createASTs(...)