[英]java - how to compile a java file with Eclipse or NetBeans without errors?
[英]How to detect eclipse compile errors (Java - JDT)
我需要在POST_CHANGE事件后檢測Java源代碼中的編譯錯誤(通常是在將更改保存到Java文件中后觸發)。 我正在使用IElementChangedListener來做到這一點。 因此,為了檢測錯誤,我嘗試了以下兩種可能性:
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);
第一個解決方案不起作用,因為我可以得到的錯誤來自先前的狀態,即保存之前的狀態。 它不能反映當時的當前源代碼,因此不可靠。
第二種解決方案在大多數情況下都可以正常工作。 保存Java文件后,我可以檢測到該文件中存在的所有錯誤。 但是,如果我執行svn更新,則此解決方案無法在合並后檢測到錯誤。 基本上,我可以發現的是,當我收到事件通知時,ICompilationUnit會顯示文件的我的版本,而不是顯示新的合並文件。 奇怪的是,IFile對象已經進行了所有更改(合並的文件),即使我從IFile對象創建了ICompilationUnit對象,它似乎也指向了我的ICompilationUnit版本的表示形式。
有人可以給我任何想法嗎?
謝謝Tiago
也有另一種方法。 將IDocumentListener
添加到當前的Java編輯器中,每當文檔更改時,都會重新創建ICompilationUnit
。 我認為應該可以。 或者,您也可以嘗試通過FileBuffers.getTextFileBufferManager().addFileBufferListener()
添加BufferListener,以便可以更好地控制何時需要更新ICompilationUnit。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.