POST_CHANGE イベントの後で Java ソース コードのコンパイル エラーを検出する必要があります (通常は、変更を Java ファイルに保存した後に発生します)。そのために IElementChangedListener を使用しています。したがって、エラーを検出するために、次の 2 つの可能性を試しました。
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);
最初の解決策は機能しません。これは、取得できるエラーが以前の状態、つまり保存前の状態からのものであるためです。その時点での最新のソース コードを反映していないため、信頼性がありません。
2 番目の解決策は、ほとんどの場合にうまく機能します。Java ファイルを保存した後、そのファイルに存在するすべてのエラーを検出できます。ただし、svn update を実行すると、このソリューションはマージ後にエラーを検出できません。基本的に、イベント通知を受け取るまでに、ICompilationUnit は新しいマージされたファイルを表示する代わりに、自分のバージョンのファイルを表示します。奇妙なのは、IFile オブジェクトには既にすべての変更 (マージされたファイル) があり、IFile オブジェクトから ICompilationUnit オブジェクトを作成しても、私のバージョンの ICompilationUnit の表現を指しているように見えることです。
誰かが私にそれについて何か考えを与えることができますか?
ありがとう、ティアゴ