From 9029afb7a8863e7d3ae3883a1d18bbdf9a190c80 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Fri, 1 Jan 2021 18:41:10 +0100 Subject: [PATCH] add usage provider --- .../RelAstGrammarFindUsageProvider.java | 67 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 4 ++ 2 files changed, 71 insertions(+) create mode 100644 src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java 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 0000000..3f8f4c5 --- /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 6c566e8..7bb097d 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> -- GitLab