Java 소스 코드에서 POST_CHANGE 이벤트 후 컴파일 오류를 감지해야합니다 (일반적으로 Java 파일에 변경 사항을 저장 한 후에 발생). IElementChangedListener를 사용하고 있습니다. 그래서, 오류를 감지 나는 울부 짖는 두 가지 가능성을 시도 :이클립스 컴파일 오류를 감지하는 방법 (Java - JDT)
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을 가리키는 것으로 보입니다.
누군가 나에게 그것에 대한 아이디어를 줄 수 있습니까?
감사합니다, 티아구