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 0000000000000000000000000000000000000000..51ad305b136d8b42198ff2993a318f10ebafeeb7 --- /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 11c41f499e3e529a2cf16b801b251b5a3f934ac1..f684e427eb0700feae1b799a9e28828efd9c8181 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 321963c6945774ea7cc9d107882e92da476cb18f..f2d489f03713716ac8366d9e10f068dc8130ae8f 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>