我有一个包含java应用程序的文件夹。该应用程序包含java编译器错误,我使用下面的代码提取它们。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
fileManager.setLocation(StandardLocation.CLASS_OUTPUT, files);
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, null, Arrays.asList(javaFileObject));
boolean sucess = task.call();
然后,我可以使用下面的代码提取有关编译器错误的更多详细信息。
for (Diagnostic diagnostic : diagnostics.getDiagnostics())
if (diagnostic.getKind().name().equals("ERROR"))
System.out.format("Error on line %d in %s%n", diagnostic.getLineNumber(), ((FileObject) diagnostic.getSource()).toUri());
但是,我想以编程方式修复检测到的编译器错误。我需要以编程方式调用像 Eclipse Quick Fix 这样的API来修复编译器错误。请注意,我的程序是一个普通的java应用程序而不是插件,而源代码包含编译器错误是一个外部文件夹。
如果有任何API我可以根据检测到的编译器错误以编程方式调用快速修复,请告诉我。
答案 0 :(得分:0)
您可以编写一个Eclipse IDE插件,用于定义可以从命令行调用的Eclipse application
。
然后在此应用程序中,您可以在工作区中导入项目 - 最有可能的命令行参数 - 运行project.build(...)
命令以生成错误标记,迭代{{1提供的那些标记并调用每个标记project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE)
。然后可以使用run
method on IMarkerResolution调用标记分辨率。请注意,无法保证1.标记分辨率在没有人工交互的情况下工作2.结果优于显示错误。