java - JDT ASTParser:无法解析为类型/变量
问题描述
我是新来的,我目前正在使用 eclipse-jdt 开发一个独立的源代码解析器。我目前有一个无法解决的问题。源代码解析器应该(在这种情况下)在日志文件中写入编译器消息:
以下代码来自访客:
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
}
}
该程序会将枚举 MODETYPE “分类”为 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;
}
Config 只是我用来初始化程序的属性文件的处理程序。在这种情况下,我从 eclipse 项目中读取属性文件 org.eclipse.jdt.core.prefs 并将其作为 Map 返回。
在我们的 IDE 上一切正常并正确检测到,但在独立解析器上却不知何故。有人可以帮我吗?谢谢指教!
最好的问候, lftdbmr
解决方案
推荐阅读
- android - MS Word 删除了对 Android 11 上文件内容的访问权限
- c# - CRM 动态插件访问网络文件夹
- django - Django重定向没有重定向
- docker - 在 azure devops 中构建 Docker 映像时如何传递 PAT 令牌?
- postgresql - 创建备份后,验证文件没有损坏或使用正确的数据创建 - Postgresql
- microsoft-graph-api - Microsoft 图形 SDK 文档
- excel - 是否有一个 Excel 自动计算可以找出丢失的 nr。基于最后的价值
- python - 带有约束和固定点的 scipy curve_fit
- javascript - javascript setAttribute() 无意中触发了 Google 跟踪代码管理器代码
- android - Android ContentResolver 使用随机文件名创建文件