package jetbrains.mps.lang.generator.constraints; /*Generated by MPS */ import jetbrains.mps.smodel.search.AbstractSearchScope; import org.jetbrains.mps.openapi.model.SModel; import java.util.List; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.util.Condition; import java.util.ArrayList; import jetbrains.mps.smodel.search.ISearchScope; import jetbrains.mps.smodel.search.SModelSearchUtil; import jetbrains.mps.smodel.SModelStereotype; import org.jetbrains.mps.openapi.language.SLanguage; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; public class MappingRuleTemplateNodeSearchScope extends AbstractSearchScope { private SModel myModel; private List<SNode> myOwnNodes; public MappingRuleTemplateNodeSearchScope(SModel model) { myModel = model; } @NotNull @Override public List<SNode> getNodes(Condition<SNode> condition) { if (condition == Condition.FALSE_CONDITION) { return new ArrayList<SNode>(); } ensureInitialized(); if (condition == Condition.TRUE_CONDITION) { return myOwnNodes; } List<SNode> resut = new ArrayList<SNode>(); for (SNode node : myOwnNodes) { if (condition.met(node)) { resut.add(node); } } return resut; } private void ensureInitialized() { if (myOwnNodes == null) { ISearchScope searchScope = SModelSearchUtil.createModelAndImportedModelsScope(myModel, true); Condition<SNode> condition = new Condition<SNode>() { @Override public boolean met(SNode object) { if (!(SModelStereotype.isGeneratorModel(object.getModel()))) { return false; } // not instance of concepts from TLBase language (like TemplateDeclaration, MappingConfiguration etc.) SLanguage language = object.getConcept().getLanguage(); return !(language.equals(MetaAdapterFactory.getLanguage(0xb401a68083254110L, 0x8fd384331ff25befL, "jetbrains.mps.lang.generator"))); } }; myOwnNodes = searchScope.getNodes(condition); } } }