Highlight all usages


I have a problem with my custom language, I'm trying to highlight usages of the element under the caret, but not all usages are highlighted. In the following code,

String foo;

fo<caret>o = "bar";

the first occurence of "foo" is correctly highlighted, but not the occurence under the caret. Ctrl-click leads me to the declaration, as expected, so resolve() seems to work okay.

The declaration PSI element implements PsiNameIdentifierOwner. Both occurences of "foo" are Identifier, which overrides getReference(). They resolve to the same declaration.

Any idea why the second foo is not highlighted?


Comment actions Permalink

Please check that PsiReference.isReferenceTo() is correctly implemented.

Comment actions Permalink

It is, at the moment I am using a naive "return element.equals(resolve());", but the thing is, this method is not called at all for these references... (it is called when highlighting type names, though).

Comment actions Permalink

Finally got it working: I forgot to override PsiNamedElement#getName() in the PSI class that's used for declarations.
Now every reference is correctly highlighted, and isReferenceTo() is called as well.

Comment actions Permalink

Thanks Past Me, I just had the same problem on another plugin and I'm glad I could help myself on this one ;)


Please sign in to leave a comment.