簡體   English   中英

如何檢測Eclipse編譯錯誤(Java-JDT)

[英]How to detect eclipse compile errors (Java - JDT)

我需要在POST_CHANGE事件后檢測Java源代碼中的編譯錯誤(通常是在將更改保存到Java文件中后觸發)。 我正在使用IElementChangedListener來做到這一點。 因此,為了檢測錯誤,我嘗試了以下兩種可能性:

1:

boolean error = IMarker.SEVERITY_ERROR == iFile.findMaxProblemSeverity(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE);

2:

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);

第一個解決方案不起作用,因為我可以得到的錯誤來自先前的狀態,即保存之前的狀態。 它不能反映當時的當前源代碼,因此不可靠。

第二種解決方案在大多數情況下都可以正常工作。 保存Java文件后,我可以檢測到該文件中存在的所有錯誤。 但是,如果我執行svn更新,則此解決方案無法在合並后檢測到錯誤。 基本上,我可以發現的是,當我收到事件通知時,ICompilationUnit會顯示文件的我的版本,而不是顯示新的合並文件。 奇怪的是,IFile對象已經進行了所有更改(合並的文件),即使我從IFile對象創建了ICompilationUnit對象,它似乎也指向了我的ICompilationUnit版本的表示形式。

有人可以給我任何想法嗎?

謝謝Tiago

也有另一種方法。 IDocumentListener添加到當前的Java編輯器中,每當文檔更改時,都會重新創建ICompilationUnit 我認為應該可以。 或者,您也可以嘗試通過FileBuffers.getTextFileBufferManager().addFileBufferListener()添加BufferListener,以便可以更好地控制何時需要更新ICompilationUnit。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM