Java JDT ASTParser:无法解析为类型/变量
我是新来的,目前正在使用EclipseJDT开发一个独立的源代码解析器。我目前有一个问题,我无法进一步解决。源代码解析器应(在本例中)在日志文件中写入编译器消息: 以下代码来自访问者: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 "
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