From a9b111df6084e0c7ac5e5fccc20a2c45d57f5a86 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Sun, 3 Jan 2021 16:51:36 +0100 Subject: [PATCH] add symbol contributor (icon not working) --- .../RelAstGrammarChooseByNameContributor.java | 35 +++++++++++++++++++ .../impl/RelAstGrammarNamedElementImpl.java | 25 +++++++++++++ src/main/resources/META-INF/plugin.xml | 3 ++ 3 files changed, 63 insertions(+) create mode 100644 src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java b/src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java new file mode 100644 index 0000000..51ad305 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java @@ -0,0 +1,35 @@ +package org.jastadd.tooling; + +import com.intellij.navigation.ChooseByNameContributor; +import com.intellij.navigation.NavigationItem; +import com.intellij.openapi.project.Project; +import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +public class RelAstGrammarChooseByNameContributor implements ChooseByNameContributor { + + @NotNull + @Override + public String @NotNull [] getNames(Project project, boolean includeNonProjectItems) { + List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project); + List<String> names = new ArrayList<>(typeDecls.size()); + for (RelAstGrammarTypeDecl typeDecl : typeDecls) { + if (typeDecl.getName() != null && typeDecl.getName().length() > 0) { + names.add(typeDecl.getName()); + } + } + return names.toArray(new String[0]); + } + + @NotNull + @Override + public NavigationItem @NotNull [] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) { + // TODO: include non project items + List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project, name); + return typeDecls.toArray(new NavigationItem[0]); + } + +} diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java index 11c41f4..f684e42 100644 --- a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java +++ b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java @@ -2,12 +2,16 @@ package org.jastadd.tooling.psi.impl; import com.intellij.extapi.psi.ASTWrapperPsiElement; import com.intellij.lang.ASTNode; +import com.intellij.navigation.ItemPresentation; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry; +import org.jastadd.tooling.JastAddIcons; import org.jastadd.tooling.psi.RelAstGrammarNamedElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; + public abstract class RelAstGrammarNamedElementImpl extends ASTWrapperPsiElement implements RelAstGrammarNamedElement { protected RelAstGrammarNamedElementImpl(@NotNull ASTNode node) { @@ -25,4 +29,25 @@ public abstract class RelAstGrammarNamedElementImpl extends ASTWrapperPsiElement return ReferenceProvidersRegistry.getReferencesFromProviders(this); } + @Override + public ItemPresentation getPresentation() { + return new ItemPresentation() { + @Nullable + @Override + public String getPresentableText() { + return getName(); + } + + @Override + public String getLocationString() { + return getContainingFile().getName(); + } + + @Override + public Icon getIcon(boolean unused) { + return JastAddIcons.FILE; + } + }; + } + } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 321963c..f2d489f 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -40,6 +40,9 @@ <lang.findUsagesProvider language="JastAddGrammar" implementationClass="org.jastadd.tooling.RelAstGrammarFindUsageProvider"/> + + <gotoSymbolContributor + implementation="org.jastadd.tooling.RelAstGrammarChooseByNameContributor"/> </extensions> <actions> -- GitLab