package jetbrains.mps.lang.generator.pluginSolution.plugin; /*Generated by MPS */ import org.jetbrains.mps.openapi.module.SRepository; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SNode; import java.util.Set; import org.jetbrains.mps.openapi.module.SModuleReference; import java.util.HashSet; import org.jetbrains.annotations.NotNull; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.lang.smodel.behavior.ModuleIdentity__BehaviorDescriptor; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.smodel.Generator; import jetbrains.mps.lang.smodel.behavior.LanguageIdentity__BehaviorDescriptor; /*package*/ class GenPlanFunnel { private final SRepository myGeneratorLookupRepo; private final SModel myTargetModel; private final SNode myTarget; private final Set<SModuleReference> mySeenGenerators = new HashSet<SModuleReference>(); private boolean myDistinctSteps = false; private boolean myUseGenerators = true; private SNode mySharedGeneratorsStep; private SNode mySharedLanguagesStep; /*package*/ GenPlanFunnel(@NotNull SRepository generatorLookupRepo, @NotNull SNode target) { myTarget = target; myTargetModel = SNodeOperations.getModel(target); myGeneratorLookupRepo = generatorLookupRepo; } public GenPlanFunnel distinctSteps(boolean distinctSteps) { myDistinctSteps = distinctSteps; return this; } public GenPlanFunnel applyGenerators() { myUseGenerators = true; return this; } public GenPlanFunnel transformLanguages() { myUseGenerators = false; return this; } public void next(SModuleReference generatorIdentity) { if (!(mySeenGenerators.add(generatorIdentity))) { return; } if (myUseGenerators) { SNode gmp = SModelOperations.createNewNode(myTargetModel, null, MetaAdapterFactory.getConcept(0x7866978ea0f04cc7L, 0x81bc4d213d9375e1L, 0x73246de9adecb80dL, "jetbrains.mps.lang.smodel.structure.GeneratorModulePointer")); SLinkOperations.setNewChild(gmp, MetaAdapterFactory.getContainmentLink(0x7866978ea0f04cc7L, 0x81bc4d213d9375e1L, 0x73246de9adecb80dL, 0x73246de9adecb874L, "module"), MetaAdapterFactory.getConcept(0x7866978ea0f04cc7L, 0x81bc4d213d9375e1L, 0x5ef5a1e853388b3L, "jetbrains.mps.lang.smodel.structure.ModulePointer")); ModuleIdentity__BehaviorDescriptor.setModuleReference_idnJmxU5cSTj.invoke(SLinkOperations.getTarget(gmp, MetaAdapterFactory.getContainmentLink(0x7866978ea0f04cc7L, 0x81bc4d213d9375e1L, 0x73246de9adecb80dL, 0x73246de9adecb874L, "module")), generatorIdentity); SNode generatorStep; if (myDistinctSteps || mySharedGeneratorsStep == null) { generatorStep = SModelOperations.createNewNode(myTargetModel, null, MetaAdapterFactory.getConcept(0x7ab1a6fa0a114b95L, 0x9e4875f363d6cb00L, 0x73246de9adeca171L, "jetbrains.mps.lang.generator.plan.structure.ApplyGenerators")); ListSequence.fromList(SLinkOperations.getChildren(myTarget, MetaAdapterFactory.getContainmentLink(0x7ab1a6fa0a114b95L, 0x9e4875f363d6cb00L, 0x19443180a20717fbL, 0x19443180a2071807L, "steps"))).addElement(generatorStep); } else { generatorStep = mySharedGeneratorsStep; } if (!(myDistinctSteps) && mySharedGeneratorsStep == null) { mySharedGeneratorsStep = generatorStep; } ListSequence.fromList(SLinkOperations.getChildren(generatorStep, MetaAdapterFactory.getContainmentLink(0x7ab1a6fa0a114b95L, 0x9e4875f363d6cb00L, 0x73246de9adeca171L, 0x73246de9adf5a45cL, "generator"))).addElement(gmp); } else { SModuleReference languageModuleRef = as_mld0p3_a0a0a0a0c0r(generatorIdentity.resolve(myGeneratorLookupRepo), Generator.class).getSourceLanguage().getModuleReference(); SNode langId = SModelOperations.createNewNode(myTargetModel, null, MetaAdapterFactory.getConcept(0x7866978ea0f04cc7L, 0x81bc4d213d9375e1L, 0x312abca18ab8c8c0L, "jetbrains.mps.lang.smodel.structure.LanguageId")); LanguageIdentity__BehaviorDescriptor.setLanguage_id34EJa6aIcyw.invoke(langId, MetaAdapterFactory.getLanguage(languageModuleRef)); SNode transform; if (myDistinctSteps || mySharedLanguagesStep == null) { transform = SModelOperations.createNewNode(myTargetModel, null, MetaAdapterFactory.getConcept(0x7ab1a6fa0a114b95L, 0x9e4875f363d6cb00L, 0x19443180a2071802L, "jetbrains.mps.lang.generator.plan.structure.Transform")); ListSequence.fromList(SLinkOperations.getChildren(myTarget, MetaAdapterFactory.getContainmentLink(0x7ab1a6fa0a114b95L, 0x9e4875f363d6cb00L, 0x19443180a20717fbL, 0x19443180a2071807L, "steps"))).addElement(transform); } else { transform = mySharedLanguagesStep; } if (!(myDistinctSteps) && mySharedLanguagesStep == null) { mySharedLanguagesStep = transform; } ListSequence.fromList(SLinkOperations.getChildren(transform, MetaAdapterFactory.getContainmentLink(0x7ab1a6fa0a114b95L, 0x9e4875f363d6cb00L, 0x19443180a2071802L, 0x28dd6d5a7549fa8dL, "languages"))).addElement(langId); } } private static <T> T as_mld0p3_a0a0a0a0c0r(Object o, Class<T> type) { return (type.isInstance(o) ? (T) o : null); } }