package jetbrains.mps.baseLanguage.scopes; /*Generated by MPS */ import jetbrains.mps.scope.FilteringScope; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.scope.ModelPlusImportedScope; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.lang.smodel.generator.smodelAdapter.AttributeOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.IAttributeDescriptor; public class ClassifiersScope extends FilteringScope { private boolean myInlcudeAncestors; private SNode myClassifier; private SModel myModel; public ClassifiersScope(SModel model, SNode clas, SAbstractConcept concept, boolean includeAncestors) { super(new ModelPlusImportedScope(model, false, concept)); myModel = model; myInlcudeAncestors = includeAncestors; myClassifier = clas; } public ClassifiersScope(SModel model, SNode clas, SAbstractConcept concept) { this(model, clas, concept, false); } @Override public boolean isExcluded(SNode node) { return SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1107e0cb103L, "jetbrains.mps.baseLanguage.structure.AnonymousClass")); } @Override public SNode resolve(SNode contextNode, String refText) { // hack for [model]node construction, remove it if (refText.startsWith("[")) { return ClassifierResolveUtils.resolveSpecialSyntax(refText, contextNode); } // end of hack // TODO Must be done through ScopeProvider return ClassifierResolveUtils.resolveAndCache(refText, contextNode, (ModelPlusImportedScope) wrapped, myInlcudeAncestors); } @Override public boolean contains(SNode node) { if (super.contains(node)) { return true; } if (!(SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier")))) { return false; } SNode root = Sequence.fromIterable(ClassifierResolveUtils.getPathToRoot(myClassifier)).last(); if ((root != null) && (AttributeOperations.getAttribute(root, new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x53f7c33f069862f2L, "jetbrains.mps.baseLanguage.structure.JavaImports"))) != null)) { return ClassifierResolveUtils.isImportedBy(SNodeOperations.cast(node, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier")), AttributeOperations.getAttribute(root, new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x53f7c33f069862f2L, "jetbrains.mps.baseLanguage.structure.JavaImports")))); } return false; } }