package jetbrains.mps.lang.structure.constraints;
/*Generated by MPS */
import jetbrains.mps.scope.Scope;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.scope.EmptyScope;
import jetbrains.mps.scope.FilteringScope;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.lang.structure.behavior.AbstractConceptDeclaration__BehaviorDescriptor;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
public class Scopes {
public static Scope forConceptsInSameLanguage(SModel model, SAbstractConcept metaConcept) {
return new FullyQualifiedNamedElementsScope(Concepts.getConceptsInSameLanguage(model, metaConcept));
}
public static Scope forConcepts(SNode contextNode, SAbstractConcept metaConcept) {
return new FullyQualifiedNamedElementsScope(Concepts.getAvailableConcepts(contextNode, metaConcept));
}
public static Scope forLanguageConcepts(SNode contextNode, SAbstractConcept metaConcept) {
return new FullyQualifiedNamedElementsScope(Concepts.getAvailableLanguageConcepts(contextNode, metaConcept));
}
public static Scope forConceptDeclarationExtends(final SNode conceptNode, SNode contextNode) {
if (conceptNode == null) {
return new EmptyScope();
}
return new FilteringScope(forConcepts(contextNode, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0xf979ba0450L, "jetbrains.mps.lang.structure.structure.ConceptDeclaration"))) {
@Override
public boolean isExcluded(SNode node) {
return node == conceptNode || Sequence.fromIterable(AbstractConceptDeclaration__BehaviorDescriptor.getAllSuperConcepts_id2A8AB0rAWpG.invoke(SNodeOperations.cast(node, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0xf979ba0450L, "jetbrains.mps.lang.structure.structure.ConceptDeclaration")), ((boolean) true))).contains(conceptNode);
}
};
}
}