Java JDT ASTParser:无法解析为类型/变量

Java JDT ASTParser:无法解析为类型/变量,java,eclipse-jdt,Java,Eclipse Jdt,我是新来的,目前正在使用EclipseJDT开发一个独立的源代码解析器。我目前有一个问题,我无法进一步解决。源代码解析器应(在本例中)在日志文件中写入编译器消息: 以下代码来自访问者: for (IProblem problem : problems) { if (problem.isError()) { final String msg = "Problem count: " + problems.length + " in "

我是新来的,目前正在使用EclipseJDT开发一个独立的源代码解析器。我目前有一个问题,我无法进一步解决。源代码解析器应(在本例中)在日志文件中写入编译器消息:

以下代码来自访问者:

for (IProblem problem : problems) {
    if (problem.isError()) {
        final String msg = "Problem count: " + problems.length + " in " + resource.getAbsolutePath()
                + "\n\tERROR: " + problem.getSourceLineNumber() + " > " + problem.getMessage();
        logger.log(Level.INFO, msg);
        continue; // do not count errors
    }
    // ... 
    logCompilerMessage(getFullQualifiedName(), mainAuthor, problem);
}
例如,在解析readData方法时:

package testproj.pckg.billing;
//...
public class Bill {
    private boolean readData(MODETYPE modeType) { 
        // MODETYPE is an enum in other class but in the same package
    }
}
该程序将枚举模式类型“分类”为类Bill2.java中的错误:

package testproj.pckg.billing;
// ...
public class Bill2 {
    // ...
}

enum MODETYPE { 
    // ...
}
输出将如下所示:

问题计数:E:\ws\preview\project\src\testproj\pckg\billing\Bill.java中的8个
错误:1925>无法将MODETYPE解析为类型

这是我的解析方法:

private void parse(ProjectInfo project, File resource) {
    final ASTParser parser = ASTParser.newParser(AST.JLS11);
    parser.setResolveBindings(true);
    parser.setBindingsRecovery(true);
    parser.setStatementsRecovery(true);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setCompilerOptions(project.getCompilerOptions());

    final Path sourcePath = Paths.get(resource.toURI());
    final char[] source = sourceToChar(sourcePath);
    if (source == null) {
        return;
    }
    parser.setSource(source);
    parser.setUnitName(resource.getName());

    final String[] sources = project.getProjectRelatedSources();
    final String[] classpaths = project.getProjectRelatedClasspaths();
    final String[] encoders = listOfEncoders(sources);

    parser.setEnvironment(classpaths, sources, encoders, true);
    // accept visitor(s)
}
编辑:我忘了显示我的getCompilerOptions方法:

private Map<String, String> getCompilerOptions(ProjectInfo project) {
    final Map<String, String> list = JavaCore.getOptions();
    list.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_11);
    list.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_11);
    list.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.ENABLED);
    list.put(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, JavaCore.ENABLED);

    final Config config = new Config(project.getProjectPath() + File.separator + ".settings",
            "org.eclipse.jdt.core.prefs");
    for (String key : config.keySet()) {
        list.put(key, config.value(key));
    }
    return list;
}
私有地图getCompilerOptions(ProjectInfo项目){
最终映射列表=JavaCore.getOptions();
put(JavaCore.COMPILER_源代码,JavaCore.VERSION_11);
list.put(JavaCore.COMPILER_COMPLIANCE,JavaCore.VERSION_11);
put(JavaCore.COMPILER\u CODEGEN\u TARGET\u PLATFORM,JavaCore.ENABLED);
put(JavaCore.COMPILER\u DOC\u COMMENT\u SUPPORT,JavaCore.ENABLED);
最终配置=新配置(project.getProjectPath()+File.separator+“.settings”,
“org.eclipse.jdt.core.prefs”);
for(字符串键:config.keySet()){
list.put(key,config.value(key));
}
退货清单;
}
Config只是我用来初始化程序的属性文件的处理程序。在本例中,我从eclipse项目中读取属性文件org.eclipse.jdt.core.prefs,并将其作为映射返回

在我们的IDE上,一切都正常工作并被正确检测到,但在独立的解析器上却没有。 有人能帮我吗?谢谢你的建议

致以最良好的祝愿, lftdbmr