2011-06-24 13 views
7

Eclipseでは、メソッド、メンバー、またはクラスのすべての参照を見つけることができます。同期されたモニタのすべての参照を見つけることも可能ですか?EclipseでJavaのすべての同期を同じモニターで見つける方法はありますか?

これはEclipseでは不可能な場合は、別のJava IDEでも可能ですか?

私の問題は、モニターオブジェクトが多くの参照を覆うことです。すべての参照を検索すると、多くの結果に戻ります。私はこのオブジェクトと同期している場所しか見ません。

EDITは:

public class LockClass{ 
    public synchronized void add(Object any){ 
    } 
} 

public class AnyOther{ 
    private LockClass lock; 

    public AnyOther(LockClass lock){ 
    this.lock = lock; 
    } 

    public void doSomethings(){ 
    synchronized(lock){ 
     //... 
    } 
} 

は今、私はすべてのモニターとしてLockClassを使用した同期を検索したい:私は私が何を意味するのかのサンプルを追加します。これは静的解析です。同じオブジェクトのすべての可能な同期ブロックを見つけることがSelect your element->rt-click menu->References->workspace

そのことはできません:

  • AnyOther.doSomethigs

答えて

1

のストレートいくつかの用語を取得してみましょう:

  • 同期ブロックのモニターが
  • 参考同期不明瞭であるのモニターにオブジェクト上で、実際にモニターされています:あなたはすべての場所をしたいですかこのモニターが参照されるコード、またはモニターを指すすべてのフィールド/ローカル変数?

ここで、モニタは参照されていますか?

Surajはこれを行う方法を既に説明しています:Search > References > Workspace...。これらの参照は、読み取りアクセス、書き込みアクセス、実装者などに限定してフィルタリングすることもできます。このような参照は、静的コード分析によって検出されるため、アプリケーションを実行する必要はありません。ただし、これは、オブジェクトへの参照がフィールドに割り当てられているフィールドを別の変数に割り当てる場合を自動的に検出しません。これは、オブジェクトに対するこの特定の参照への参照を検出するだけです。

どの変数がモニタを指していますか?

これは、いくつかのフィールド/ローカル変数がオブジェクトを参照する場合を扱います。これを行うには、アプリケーションが実行されている必要があります。ブレークポイントは、モニタが表示されている適切な場所に配置する必要があります(最も簡単な方法は、問題のモニタを使用する同期ブロックのまわりのどこかにあります)。変数ビューには、現在のスコープで使用可能なすべての変数が表示されます。変数ビューでオブジェクトへの参照を選択し、コンテキストメニューを表示してAll References...を選択すると、オブジェクトへの参照をすべて取得できます。これは、オブジェクトを参照するすべてのフィールド/ローカル変数を表示します。

2

見つけるへの参照をLockClass.add:私のサンプルでは私が見つけたいです参照によって指示される実際のオブジェクトは実行時に依存するためです。

1

Eclipseは特定のオブジェクトへの参照を見つけることができません。特定のシンボルへの参照のみが見つかります(例:変数、クラス、メソッドa.s.o。モニターは、this、または変数oの値で、実行時に同じオブジェクトを指し示すことができます。しかし、Eclipseには、そのような実行時情報を抽出する方法がありません。

関連する問題