2016-04-27 210 views
0

我需要一個可以通知PsiElement不是vaild的偵聽器。 PsiTreeChangeListener似乎不適合這個。有沒有其他的聽衆可以說出這一點。或者我必須創建一個監聽器?如何創建這個監聽器?PSI更改偵聽器

+0

我不知道這是可能的和/或必要的。你能告訴我們你想達到什麼嗎? – Argb32

+0

在開始時我得到了所有必需的psiElement,但是如果在某人發表評論或刪除或移動任何psiElement之間,那麼該psiElement將變爲無效或無效。所以我想知道在那個時候,並根據我想更新我所有psiElements的列表。我正在考慮在這種情況下實現觀察者模式,但我需要爲此傾聽。所以如果任何psiElement從該列表中變得無效,那麼列表將會知道並從該列表中移除該元素。我沒有得到我應該如何實現這個聽衆。 – Aarti

回答

0

您可以使用SmartPsiElementPointer類來創建和維護psi元素列表。

SmartPsiElementPointer是一個指向PsiElement這不會成爲即使它指向的PSI元素被刪除無效的。在這種情況下,它是getElement()方法將簡單地返回null。你可以檢測並處理這個。

要包裝一個元素SmartPsiElementPointer您可以使用下面的代碼:

SmartPointerManager.getInstance(element.getProject()).createSmartPsiElementPointer(element);