1

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을 가리키는 것으로 보입니다.

누군가 나에게 그것에 대한 아이디어를 줄 수 있습니까?

감사합니다, 티아구

답변

0

너무 한 다른 방법이 있습니다. IDocumentListener을 현재 Java 편집기에 추가하고 문서가 변경되면 ICompilationUnit을 다시 작성하십시오. 나는 그것이 효과가 있어야한다고 생각한다. 또는 FileBuffers.getTextFileBufferManager().addFileBufferListener()을 통해 BufferListener를 추가하여 ICompilationUnit을 업데이트해야하는시기를보다 효율적으로 제어 할 수 있습니다.

관련 문제