package jetbrains.mps.workbench.findusages; /*Generated by MPS */ import com.intellij.openapi.components.ApplicationComponent; import org.jetbrains.mps.openapi.persistence.FindUsagesParticipant; import java.util.Collection; import org.jetbrains.mps.openapi.model.SModel; import java.util.Set; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.util.Consumer; import org.jetbrains.mps.openapi.model.SReference; import jetbrains.mps.project.structure.ProjectStructureModule; import jetbrains.mps.extapi.model.TransientSModel; import jetbrains.mps.project.structure.LanguageDescriptorModelProvider; import org.jetbrains.mps.openapi.language.SAbstractConcept; import org.jetbrains.mps.openapi.language.SLanguage; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.model.SModelReference; import org.jetbrains.annotations.NotNull; import jetbrains.mps.persistence.PersistenceRegistry; /** * evgeny, 3/11/13 */ public class InternalModelsFindUsagesParticipant implements ApplicationComponent, FindUsagesParticipant { @Override public void findUsages(Collection<SModel> scope, Set<SNode> nodes, Consumer<SReference> consumer, Consumer<SModel> processedConsumer) { boolean hasProjectModels = false; boolean hasTransientModels = false; for (SNode n : nodes) { SModel model = n.getModel(); if (model instanceof ProjectStructureModule.ProjectStructureSModelDescriptor) { hasProjectModels = true; } if (model instanceof TransientSModel) { hasTransientModels = true; } } for (SModel model : scope) { if (model instanceof ProjectStructureModule.ProjectStructureSModelDescriptor) { if (!(hasProjectModels)) { processedConsumer.consume(model); } } else if (model instanceof TransientSModel) { if (!(hasTransientModels)) { processedConsumer.consume(model); } } else if (model instanceof LanguageDescriptorModelProvider.LanguageModelDescriptor) { // language descriptor models are empty processedConsumer.consume(model); } } } @Override public void findInstances(Collection<SModel> scope, Set<SAbstractConcept> concepts, Consumer<SNode> consumer, Consumer<SModel> processedConsumer) { boolean hasProjectLanguageConcepts = false; SLanguage langProject = MetaAdapterFactory.getLanguage(0x86ef829012bb4ca7L, 0x947f093788f263a9L, "jetbrains.mps.lang.project"); for (SAbstractConcept n : concepts) { if (langProject.equals(n.getLanguage())) { hasProjectLanguageConcepts = true; break; } } for (SModel model : scope) { if (model instanceof ProjectStructureModule.ProjectStructureSModelDescriptor) { if (!(hasProjectLanguageConcepts)) { processedConsumer.consume(model); } } else if (model instanceof LanguageDescriptorModelProvider.LanguageModelDescriptor) { // language descriptor models are empty processedConsumer.consume(model); } } } @Override public void findModelUsages(Collection<SModel> scope, Set<SModelReference> modelReferences, Consumer<SModel> consumer, Consumer<SModel> processedConsumer) { for (SModel model : scope) { if (model instanceof ProjectStructureModule.ProjectStructureSModelDescriptor) { // project structure models have no imports processedConsumer.consume(model); } else if (model instanceof LanguageDescriptorModelProvider.LanguageModelDescriptor) { // language descriptor models are empty processedConsumer.consume(model); } } } @NotNull @Override public String getComponentName() { return this.getClass().getSimpleName(); } @Override public void initComponent() { PersistenceRegistry.getInstance().addFindUsagesParticipant(this); } @Override public void disposeComponent() { PersistenceRegistry.getInstance().removeFindUsagesParticipant(this); } }