2011-06-24 18 views
7

W Eclipse można znaleźć wszystkie odniesienia do metody, członka lub klasy. Czy można również znaleźć wszystkie odniesienia do monitora zsynchronizowanego?Jak mogę znaleźć wszystkie zsynchronizowane na tym samym monitorze w Javie z Eclipse?

Jeśli nie jest to możliwe w Eclipse, czy jest to możliwe z innym IDE Java?

Mój problem polega na tym, że obiekt monitora ma wiele odniesień. Wyszukiwanie wszystkich odnośników spowoduje powrót do wielu wyników. Będę widział tylko, gdzie są zsynchronizowane z tym obiektem.

EDIT: dodam próbkę co ja oznacza:

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){ 
     //... 
    } 
} 

teraz chcę wyszukać wszystkie zsynchronizowane które korzystają z LockClass jako monitora. To są analizy statyczne. W moim próbki Chcę znaleźć:

  • LockClass.add
  • AnyOther.doSomethigs

Odpowiedz

1

Chodźmy niektóre terminy proste:

  • Monitor z zsynchronizowanym bloku jest w rzeczywistości monitora na obiekcie
  • Odniesienia na monitorze zsynchronizowane jest ambigous: chcesz wszystkie miejsca w kod, do którego odnosi się ten monitor, lub wszystkie pola/zmienne lokalne, które wskazują na monitor?

Gdzie w kodzie występuje odniesienie do monitora?

Suraj już opisał, jak to zrobić: Search > References > Workspace.... Możesz także filtrować te odniesienia tylko do odczytu, dostępu do zapisu, implementatorów itd. Odniesienia te można znaleźć za pomocą statycznej analizy kodu, więc nie trzeba uruchamiać aplikacji. To jednak nie wykrywa automatycznie przypadków, w których odniesienie do obiektu jest przypisane do pola, które następnie jest przypisane do innej zmiennej. To tylko wykrywa odniesienie do tego konkretnego odniesienia do obiektu.

Które zmienne wskazują monitor?

To zajmie się przypadkiem, gdy kilka pól/zmiennych lokalnych odwoła się do obiektu. Aby to zrobić, aplikacja musi być uruchomiona. Musisz umieścić punkt przerwania w odpowiednim miejscu, gdzie monitor jest widoczny (najłatwiej jest gdzieś w pobliżu zsynchronizowanego bloku, który używa danego monitora). Widok Zmienne wyświetli wszystkie zmienne dostępne w bieżącym zakresie.Możesz uzyskać wszystkie odniesienia do obiektu, wybierając odniesienie do obiektu w widoku Zmienne, przynosząc menu kontekstowe i wybierając All References.... Spowoduje to wyświetlenie wszystkich pól/zmiennych lokalnych, które odwołują się do obiektu.

2

Aby znaleźć nazwy: Select your element->rt-click menu->References->workspace

Nie jest możliwe, aby znaleźć wszystkie możliwe zsynchronizowane bloki na tym samym obiekcie , ponieważ rzeczywisty obiekt wskazywany przez odniesienie byłby zależny od czasu wykonywania.

1

Eclipse nie będzie w stanie znaleźć odniesień do określonego obiektu. Może tylko znaleźć odniesienia do pewnego symbolu, np. zmienna, klasa, metoda a.s.o. Monitor może mieć wartość this lub wartość zmiennej o - wskazując na ten sam obiekt w czasie wykonywania. Jednak Eclipse nie ma sposobu na wyodrębnienie takich informacji.

Powiązane problemy