1

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 の表現を指しているように見えることです。

誰かが私にそれについて何か考えを与えることができますか?

ありがとう、ティアゴ

4

1 に答える 1

0

代替方法も 1 つあります。を現在の Java エディタに追加するIDocumentListenerと、ドキュメントが変更されるたびにICompilationUnit. うまくいくはずだと思います。FileBuffers.getTextFileBufferManager().addFileBufferListener()または、ICompilationUnit をいつ更新する必要があるかをより詳細に制御できるように、BufferListener を追加することもできます。

于 2009-11-04T04:21:49.563 に答える