Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Leaf nodes should not implement INamedElement (bug fix for find usages) #17

Open
TysonMN opened this issue Mar 27, 2023 · 0 comments
Open

Comments

@TysonMN
Copy link

TysonMN commented Mar 27, 2023

IdentifierPSINode is a leaf node in your AST, and it implements PsiNamedElement.

public class IdentifierPSINode extends ANTLRPsiLeafNode implements PsiNamedElement {

It should not implement PsiNamedElement.

The Custom Language tutorial says

While the referencing element and the referenced element both may have a name, only the element which introduces the name (e.g., the definition int x = 42) needs to implement PsiNamedElement. The referencing element at the point of usage (e.g., the x in the expression x + 1) should not implement PsiNamedElement since it does not have a name.

I based my leaf node implementations on IdentifierPSINode, so I had my leaves implement PsiNamedElement. I just realized that this was causing a bug with "Find Usages". When searching for usages from a declaration, there were no results. Changing my leaves to not implement this interface fixed this problem.

Before I found this fix, I found the following workaround. I had my declaration be a reference to itself. In this case, "right-click -> Find Usages" works correctly, but "right-click -> Go To -> Declaration or Usages" does not. If there was only one usage, then the correct behavior would be to go to that usage. Instead, the behavior in this case is that the cursor moves to the beginning of the declaration (which is the current behavior for the current ANTLR plugin antlr/intellij-plugin-v4#580).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant