package jetbrains.mps.build.mps.util; /*Generated by MPS */ import jetbrains.mps.generator.template.TemplateQueryContext; import jetbrains.mps.util.containers.ConcurrentHashSet; import org.jetbrains.mps.openapi.model.SNode; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.build.util.GenerationUtil; import jetbrains.mps.internal.collections.runtime.Sequence; import java.util.Set; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.LinkedHashSet; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; public class RequiredPlugins { private static final String KEY = "pluginDependency"; private final TemplateQueryContext myContext; private final ConcurrentHashSet<SNode> myDependency; private final SNode myRoot; private final List<SNode> myPlugins = ListSequence.fromList(new ArrayList<SNode>()); public RequiredPlugins(SNode project, TemplateQueryContext genContext) { myContext = genContext; ListSequence.fromList(myPlugins).addSequence(ListSequence.fromList(SNodeOperations.getNodeDescendants(project, MetaAdapterFactory.getConcept(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x5b7be37b4de9bb74L, "jetbrains.mps.build.mps.structure.BuildMps_IdeaPlugin"), false, new SAbstractConcept[]{}))); myRoot = project; myDependency = GenerationUtil.<SNode>getSessionSet(project, genContext, KEY); } public RequiredPlugins(TemplateQueryContext genContext, SNode initialPlugin) { myContext = genContext; ListSequence.fromList(myPlugins).addElement(initialPlugin); myRoot = SNodeOperations.getContainingRoot(initialPlugin); myDependency = GenerationUtil.<SNode>getSessionSet(SNodeOperations.as(myRoot, MetaAdapterFactory.getConcept(0x798100da4f0a421aL, 0xb99171f8c50ce5d2L, 0x4df58c6f18f84a13L, "jetbrains.mps.build.structure.BuildProject")), genContext, KEY); } public RequiredPlugins(TemplateQueryContext genContext, SNode root, Iterable<SNode> initialPlugins) { myContext = genContext; ListSequence.fromList(myPlugins).addSequence(Sequence.fromIterable(initialPlugins)); myRoot = root; myDependency = GenerationUtil.<SNode>getSessionSet(SNodeOperations.as(myRoot, MetaAdapterFactory.getConcept(0x798100da4f0a421aL, 0xb99171f8c50ce5d2L, 0x4df58c6f18f84a13L, "jetbrains.mps.build.structure.BuildProject")), genContext, KEY); } public void collectDependencies() { Set<SNode> visited = SetSequence.fromSet(new LinkedHashSet<SNode>()); for (SNode plugin : ListSequence.fromList(myPlugins)) { collectDependencies(plugin, visited); } myDependency.addAll(SetSequence.fromSet(visited).subtract(ListSequence.fromList(myPlugins)).where(new IWhereFilter<SNode>() { public boolean accept(SNode it) { return (it != null); } }).toListSequence()); } public Iterable<SNode> returnDependencies() { Set<SNode> visited = SetSequence.fromSet(new LinkedHashSet<SNode>()); for (SNode plugin : ListSequence.fromList(myPlugins)) { collectDependencies(plugin, visited); } return SetSequence.fromSet(visited).subtract(ListSequence.fromList(myPlugins)).where(new IWhereFilter<SNode>() { public boolean accept(SNode it) { return (it != null); } }).toListSequence(); } private void collectDependencies(SNode plugin, Set<SNode> visited) { SetSequence.fromSet(visited).addElement(plugin); for (SNode dependency : ListSequence.fromList(SLinkOperations.getChildren(plugin, MetaAdapterFactory.getContainmentLink(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x5b7be37b4de9bb74L, 0x5b7be37b4de9bbd4L, "dependencies")))) { SNode dependencyPlugin = SLinkOperations.getTarget(dependency, MetaAdapterFactory.getReferenceLink(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x5b7be37b4de9bbd3L, 0x5b7be37b4de9bbfaL, "target")); if (dependencyPlugin != null && !(SetSequence.fromSet(visited).contains(dependencyPlugin))) { collectDependencies(dependencyPlugin, visited); } } } public Iterable<SNode> getDependency() { // Usages suggest myDependencies are to come from original (non-transient) model - they used to get passed to DependenciesHelper.artifacts().get() directly return myDependency; } public Iterable<SNode> getDependencyInsideCurrent() { return myPlugins; } }