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