如何检测eclipse编译错误(Java-JDT)

如何检测eclipse编译错误(Java-JDT),java,eclipse-plugin,eclipse-rcp,eclipse-jdt,compiler-errors,Java,Eclipse Plugin,Eclipse Rcp,Eclipse Jdt,Compiler Errors,我需要在POST_更改事件之后检测java源代码中的编译错误(通常在保存java文件中的更改后触发)。我正在使用IElementChangedListener来做这件事。因此,为了检测错误,我尝试了以下两种可能性: 1: 2: 第一种解决方案不起作用,因为我可以得到的错误来自以前的状态,即保存前的状态。它不反映当时的源代码,因此不可靠 第二种解决方案适用于大多数情况。保存java文件后,我可以检测该文件中存在的所有错误。但是,如果执行svn更新,此解决方案在合并后无法检测错误。基本上,我能发现的

我需要在POST_更改事件之后检测java源代码中的编译错误(通常在保存java文件中的更改后触发)。我正在使用IElementChangedListener来做这件事。因此,为了检测错误,我尝试了以下两种可能性:

1: 2: 第一种解决方案不起作用,因为我可以得到的错误来自以前的状态,即保存前的状态。它不反映当时的源代码,因此不可靠

第二种解决方案适用于大多数情况。保存java文件后,我可以检测该文件中存在的所有错误。但是,如果执行svn更新,此解决方案在合并后无法检测错误。基本上,我能发现的是,当我收到事件通知时,ICompilationUnit会显示文件的我的版本,而不是显示新的合并版本。奇怪的是IFile对象已经有了所有的更改(合并文件),即使我从IFile对象创建了一个ICompilationUnit对象,它似乎指向了我的ICompilationUnit版本的表示

有人能给我一些建议吗

谢谢,
蒂亚戈也有另一种方法。将
IDocumentListener
添加到当前java编辑器中,并在文档发生更改时重新创建
ICompilationUnit
。我认为应该行得通。 或者您也可以尝试通过
FileBuffers.getTextFileBufferManager().addFileBufferListener()
添加一个BufferListener,这样您就可以更好地控制何时需要更新ICompilationUnit

boolean error = IMarker.SEVERITY_ERROR == iFile.findMaxProblemSeverity(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE);
ICompilationUnit unit = ..; // get some compilation unit

  // create requestor for accumulating discovered problems
  IProblemRequestor problemRequestor = new IProblemRequestor() {
    public void acceptProblem(IProblem problem) {
      System.out.println(problem.getID() + ": " + problem.getMessage());
    }
    public void beginReporting() {}
    public void endReporting() {}
    public boolean isActive() { return true; } // will detect problems if active
  };

  // use working copy to hold source with error
  unit.getWorkingCopy(new WorkingCopyOwner() {}, problemRequestor, null);