package jetbrains.mps.lang.editor.behavior; /*Generated by MPS */ import jetbrains.mps.scope.FilteringScope; import org.jetbrains.mps.openapi.language.SAbstractConcept; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.scope.ModelsScope; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.Language; import jetbrains.mps.internal.collections.runtime.Sequence; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.project.dependency.GlobalModuleDependenciesManager; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModuleOperations; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import org.jetbrains.mps.openapi.module.SRepository; import java.util.Set; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.HashSet; import org.jetbrains.mps.openapi.module.SModuleReference; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations; import jetbrains.mps.lang.structure.behavior.IConceptAspect__BehaviorDescriptor; public class EditorCellIdScope extends FilteringScope { private SAbstractConcept myConceptDeclaration; public EditorCellIdScope(SModel model, SNode conceptDeclaration) { super(new ModelsScope(getModels(model), false, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x3c0028bb846a5817L, "jetbrains.mps.lang.editor.structure.EditorCellId"))); myConceptDeclaration = SNodeOperations.asSConcept(conceptDeclaration); } private static Iterable<SModel> getModels(SModel model) { Iterable<Language> depLanguages = Sequence.fromIterable(((Iterable<SModule>) new GlobalModuleDependenciesManager(model.getModule()).getModules(GlobalModuleDependenciesManager.Deptype.VISIBLE))).ofType(Language.class); return Sequence.fromIterable(withExtendedLanguages(depLanguages, model.getRepository())).select(new ISelector<Language, SModel>() { public SModel select(Language it) { return SModuleOperations.getAspect(it, "editor"); } }).where(new IWhereFilter<SModel>() { public boolean accept(SModel it) { return it != null; } }); } private static Iterable<Language> withExtendedLanguages(Iterable<Language> languages, SRepository repository) { Set<Language> result = SetSequence.fromSet(new HashSet<Language>()); for (Language language : Sequence.fromIterable(languages)) { SetSequence.fromSet(result).addElement(language); for (SModuleReference extendedLangRef : SetSequence.fromSet(language.getExtendedLanguageRefs())) { SModule extendedLang = extendedLangRef.resolve(repository); if (extendedLang instanceof Language) { SetSequence.fromSet(result).addElement(((Language) extendedLang)); } } } return result; } @Override public String getReferenceText(SNode contextNode, SNode node) { if (isExcluded(node)) { return null; } return SPropertyOperations.getString(SNodeOperations.as(node, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x3c0028bb846a5817L, "jetbrains.mps.lang.editor.structure.EditorCellId")), MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")); } @Override public boolean isExcluded(SNode node) { SNode editorCellId = SNodeOperations.as(node, MetaAdapterFactory.getConcept(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x3c0028bb846a5817L, "jetbrains.mps.lang.editor.structure.EditorCellId")); if (editorCellId == null) { return true; } SNode conceptAspect = SNodeOperations.getNodeAncestor(editorCellId, MetaAdapterFactory.getInterfaceConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x24614259e94f0c84L, "jetbrains.mps.lang.structure.structure.IConceptAspect"), false, false); return conceptAspect == null || !(SConceptOperations.isSubConceptOf(SNodeOperations.asSConcept(myConceptDeclaration), SNodeOperations.asSConcept(SNodeOperations.asSConcept(IConceptAspect__BehaviorDescriptor.getBaseConcept_id2hxg_BDjKM8.invoke(conceptAspect))))); } }