diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java b/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..3f8f4c50910dd4c7730f8896ab66b9d93c2ffe52 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java @@ -0,0 +1,67 @@ +package org.jastadd.tooling; + +import com.intellij.lang.cacheBuilder.DefaultWordsScanner; +import com.intellij.lang.cacheBuilder.WordsScanner; +import com.intellij.lang.findUsages.FindUsagesProvider; +import com.intellij.psi.PsiElement; +import com.intellij.psi.tree.TokenSet; +import org.jastadd.tooling.lexer.RelAstGrammarFlexAdapter; +import org.jastadd.tooling.parser.RelAstGrammarTypes; +import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class RelAstGrammarFindUsageProvider implements FindUsagesProvider { + + @Nullable + @Override + public WordsScanner getWordsScanner() { + // TODO comments are not working + return new DefaultWordsScanner(new RelAstGrammarFlexAdapter(), + TokenSet.create(RelAstGrammarTypes.ID), + TokenSet.create(RelAstGrammarTypes.MULTILINECOMMENT, RelAstGrammarTypes.DOCCOMMENT, RelAstGrammarTypes.SINGLELINECOMMENT), + TokenSet.EMPTY); + } + + @Override + public boolean canFindUsagesFor(@NotNull PsiElement psiElement) { + return psiElement instanceof RelAstGrammarTypeDecl; // was: PsiNamedElement + } + + @Nullable + @Override + public String getHelpId(@NotNull PsiElement psiElement) { + return null; + } + + @NotNull + @Override + public String getType(@NotNull PsiElement element) { + if (element instanceof RelAstGrammarTypeDecl) { + return "JastAdd Nonterminal Type"; + } else { + return ""; + } + } + + @NotNull + @Override + public String getDescriptiveName(@NotNull PsiElement element) { + if (element instanceof RelAstGrammarTypeDecl && ((RelAstGrammarTypeDecl) element).getName() != null) { + return ((RelAstGrammarTypeDecl) element).getName(); + } else { + return ""; + } + } + + @NotNull + @Override + public String getNodeText(@NotNull PsiElement element, boolean useFullName) { + if (element instanceof RelAstGrammarTypeDecl) { + return ((RelAstGrammarTypeDecl) element).getText(); + } else { + return ""; + } + } + +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 6c566e8bda4fe61f5c58aebc9e52240dcd6c3a72..7bb097d05c32c16a757a723a855c5212d4879a59 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -38,6 +38,10 @@ implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/> <lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference" implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/> + + + <lang.findUsagesProvider language="JastAddGrammar" + implementationClass="org.jastadd.tooling.RelAstGrammarFindUsageProvider"/> </extensions> <actions>