package jetbrains.mps.baseLanguage.lightweightdsl.pluginSolution.plugin; /*Generated by MPS */ import jetbrains.mps.plugins.custom.BaseCustomApplicationPlugin; import jetbrains.mps.classloading.MPSClassesListener; import java.util.Set; import jetbrains.mps.module.ReloadableModuleBase; import org.jetbrains.mps.util.Condition; import org.jetbrains.mps.openapi.language.SAbstractConcept; import java.util.Collection; import jetbrains.mps.smodel.Language; import jetbrains.mps.smodel.ModuleRepositoryFacade; import jetbrains.mps.internal.collections.runtime.CollectionSequence; import jetbrains.mps.internal.collections.runtime.ITranslator2; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.MetaAdapterByDeclaration; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.HashSet; import jetbrains.mps.classloading.ClassLoaderManager; import jetbrains.mps.ide.projectPane.CreateRootFilterEP; public class ClassLikeMenuAdjustment_CustomApplicationPlugin extends BaseCustomApplicationPlugin { private MPSClassesListener myReloadListener = new MPSClassesListener() { public void beforeClassesUnloaded(Set<? extends ReloadableModuleBase> p0) { ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myClassLikeConcepts = null; } public void afterClassesLoaded(Set<? extends ReloadableModuleBase> p0) { ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myClassLikeConcepts = null; } }; private Condition<SAbstractConcept> myCondition = new Condition<SAbstractConcept>() { public boolean met(final SAbstractConcept c) { if (ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myClassLikeConcepts == null) { Collection<Language> languages = ModuleRepositoryFacade.getInstance().getAllModules(Language.class); Iterable<SAbstractConcept> nonTrivialClassLikes = CollectionSequence.fromCollection(languages).translate(new ITranslator2<Language, SModel>() { public Iterable<SModel> translate(Language it) { return it.getAccessoryModels(); } }).where(new IWhereFilter<SModel>() { public boolean accept(SModel it) { return it != null; } }).translate(new ITranslator2<SModel, SNode>() { public Iterable<SNode> translate(SModel it) { return SModelOperations.roots(((SModel) it), MetaAdapterFactory.getConcept(0xc7d5b9dda05f4be2L, 0xbc73f2e16994cc67L, 0x340eb2bd2e03d160L, "jetbrains.mps.baseLanguage.lightweightdsl.structure.DSLDescriptor")); } }).select(new ISelector<SNode, SNode>() { public SNode select(SNode it) { return SLinkOperations.getTarget(it, MetaAdapterFactory.getReferenceLink(0xc7d5b9dda05f4be2L, 0xbc73f2e16994cc67L, 0x340eb2bd2e03d160L, 0x1955e1ca83e5ed92L, "preferredConcept")); } }).where(new IWhereFilter<SNode>() { public boolean accept(SNode it) { return it != null && it != SNodeOperations.getNode("r:00000000-0000-4000-0000-011c895902ca(jetbrains.mps.baseLanguage.structure)", "1068390468198"); } }).select(new ISelector<SNode, SAbstractConcept>() { public SAbstractConcept select(SNode it) { return MetaAdapterByDeclaration.getConcept(it); } }); ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myClassLikeConcepts = SetSequence.fromSetWithValues(new HashSet<SAbstractConcept>(), nonTrivialClassLikes); } return SetSequence.fromSet(ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myClassLikeConcepts).any(new IWhereFilter<SAbstractConcept>() { public boolean accept(SAbstractConcept it) { return c.equals(it); } }); } }; private Set<SAbstractConcept> myClassLikeConcepts = null; public ClassLikeMenuAdjustment_CustomApplicationPlugin() { } public void doInit() { // todo actually this whole thing should be replaced by a custom concept aspect, so that // the filter is like SAbstractConcept.getAspect(ClassLike).isClassLike() ClassLoaderManager.getInstance().addClassesHandler(ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myReloadListener); CreateRootFilterEP.getInstance().addFilter(ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myCondition); } public void doDispose() { CreateRootFilterEP.getInstance().removeFilter(ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myCondition); ClassLoaderManager.getInstance().removeClassesHandler(ClassLikeMenuAdjustment_CustomApplicationPlugin.this.myReloadListener); } }