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);
}
}