package jetbrains.mps.idea.java.fastFind; /*Generated by MPS */ import org.jetbrains.mps.openapi.persistence.NavigationParticipant; import com.intellij.openapi.components.ApplicationComponent; import java.util.Collection; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.util.Consumer; import jetbrains.mps.idea.java.psiStubs.PsiJavaStubModelDescriptor; import com.intellij.psi.PsiJavaFile; import com.intellij.psi.PsiClass; import org.jetbrains.mps.openapi.language.SConcept; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.model.SNodeReference; import jetbrains.mps.idea.java.psiStubs.JavaForeignIdBuilder; import jetbrains.mps.persistence.PersistenceRegistry; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; public class JavaPsiStubsNavigationContributor implements NavigationParticipant, ApplicationComponent { public JavaPsiStubsNavigationContributor() { } public void findTargets(NavigationParticipant.TargetKind kind, Collection<SModel> collection, Consumer<NavigationParticipant.NavigationTarget> consumer, Consumer<SModel> processedConsumer) { for (SModel model : collection) { if (!(model instanceof PsiJavaStubModelDescriptor)) { continue; } for (PsiJavaFile javaFile : ((PsiJavaStubModelDescriptor) model).getSource().getJavaFiles()) { for (PsiClass psiClass : javaFile.getClasses()) { final PsiClass psiClaz = psiClass; final String name = psiClaz.getName(); if (name == null || name.trim().equals("")) { continue; } consumer.consume(new NavigationParticipant.NavigationTarget() { public String getPresentation() { return name; } public SConcept getConcept() { if (psiClaz.isAnnotationType()) { return (SConcept) MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a69dc80cL, "jetbrains.mps.baseLanguage.structure.Annotation"); } else if (psiClaz.isInterface()) { return (SConcept) MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101edd46144L, "jetbrains.mps.baseLanguage.structure.Interface"); } else if (psiClaz.isEnum()) { return (SConcept) MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfc367070a5L, "jetbrains.mps.baseLanguage.structure.EnumClass"); } else { return (SConcept) MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept"); } } public SNodeReference getNodeReference() { return JavaForeignIdBuilder.computeNodePtr(psiClaz).toSNodeReference(); } }); } } processedConsumer.consume(model); } } public void initComponent() { PersistenceRegistry.getInstance().addNavigationParticipant(this); } public void disposeComponent() { PersistenceRegistry.getInstance().removeNavigationParticipant(this); } @NonNls @NotNull public String getComponentName() { return "Java PSI stubs navigation participant"; } }