2016-04-27 160 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);