在普通的Java应用程序中以编程方式调用快速修复

时间:2014-06-16 16:49:09

标签: java compiler-errors

我有一个包含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我可以根据检测到的编译器错误以编程方式调用快速修复,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以编写一个Eclipse IDE插件,用于定义可以从命令行调用的Eclipse application

然后在此应用程序中,您可以在工作区中导入项目 - 最有可能的命令行参数 - 运行project.build(...)命令以生成错误标记,迭代{{1提供的那些标记并调用每个标记project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE)。然后可以使用run method on IMarkerResolution调用标记分辨率。请注意,无法保证1.标记分辨率在没有人工交互的情况下工作2.结果优于显示错误。