package jetbrains.mps.lang.migration.pluginSolution.plugin; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import jetbrains.mps.refactoring.participant.RefactoringSession; import org.jetbrains.mps.openapi.module.SearchScope; import org.jetbrains.mps.openapi.module.SModule; import java.util.Map; import org.jetbrains.mps.openapi.module.SModuleReference; import jetbrains.mps.internal.collections.runtime.MapSequence; import java.util.HashMap; import jetbrains.mps.smodel.Language; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.smodel.LanguageAspect; import jetbrains.mps.smodel.SModelInternal; import org.jetbrains.mps.openapi.model.SModelReference; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.internal.collections.runtime.ITranslator2; import org.jetbrains.mps.openapi.model.SReference; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.smodel.SModelOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import java.util.List; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.lang.migration.runtime.base.MigrationModuleUtil; import jetbrains.mps.internal.collections.runtime.SetSequence; import org.apache.log4j.Level; import jetbrains.mps.refactoring.participant.RefactoringParticipant; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.lang.typesystem.runtime.HUtil; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; import jetbrains.mps.smodel.SModelUtil_new; public class LogBuilder { private static final Logger LOG = LogManager.getLogger(LogBuilder.class); private static final String myId = "refactoringSession.logBuilder"; public static LogBuilder getBuilder(RefactoringSession session, SearchScope searchScope, SModule module) { Map<SModuleReference, LogBuilder> moduleBuilders = (Map<SModuleReference, LogBuilder>) session.getObject(myId); if (moduleBuilders == null) { moduleBuilders = MapSequence.fromMap(new HashMap<SModuleReference, LogBuilder>()); session.putObject(myId, moduleBuilders); } LogBuilder builder = MapSequence.fromMap(moduleBuilders).get(module.getModuleReference()); if (builder == null) { builder = new LogBuilder(session, searchScope, ((Language) module)); MapSequence.fromMap(moduleBuilders).put(module.getModuleReference(), builder); } return builder; } private SNode myRefactoringStep; private LogBuilder(RefactoringSession session, final SearchScope searchScope, final Language module) { final int moduleVersion = module.getModuleVersion(); myRefactoringStep = createRefactoringLog_1o8b1n_a0b0d(moduleVersion, "RefactoringLog_" + moduleVersion); session.registerChange(new Runnable() { public void run() { SModel migrationModel = LanguageAspect.MIGRATION.getOrCreate(module); SModelInternal sm = (SModelInternal) (SModel) migrationModel; for (SModelReference reference : ListSequence.fromList(SNodeOperations.getNodeDescendants(myRefactoringStep, null, true, new SAbstractConcept[]{})).translate(new ITranslator2<SNode, SReference>() { public Iterable<SReference> translate(SNode it) { return SNodeOperations.getReferences(it); } }).select(new ISelector<SReference, SModelReference>() { public SModelReference select(SReference it) { return it.getTargetSModelReference(); } }).distinct()) { if (!(SModelOperations.getImportedModelUIDs(migrationModel).contains(reference))) { sm.addModelImport(reference); } } sm.addLanguage(MetaAdapterFactory.getLanguage(0x9882f4ad195546feL, 0x826994189e5dbbf2L, "jetbrains.mps.lang.migration.util")); jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations.addRootNode(migrationModel, myRefactoringStep); module.setModuleVersion(moduleVersion + 1); Iterable<SModule> modules = searchScope.getModules(); List<SModule> modulesToIncrementDependencyVersion = Sequence.fromIterable(modules).where(new IWhereFilter<SModule>() { public boolean accept(SModule m) { return MigrationModuleUtil.isModuleMigrateable(m); } }).where(new IWhereFilter<SModule>() { public boolean accept(SModule m) { return SetSequence.fromSet(MigrationModuleUtil.getModuleDependencies(m)).contains(module); } }).toListSequence(); for (SModule m : ListSequence.fromList(modulesToIncrementDependencyVersion)) { int depVersion = MigrationModuleUtil.getDependencyVersion(m, module); if (moduleVersion != depVersion) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Module " + m + " depends on module " + module + " with version " + depVersion + ", but current version is " + moduleVersion); } } else { MigrationModuleUtil.setDepVersion(m, module.getModuleReference(), moduleVersion + 1); } } } }); } public void addPart(RefactoringParticipant.PersistentRefactoringParticipant participant, SNode initialState, SNode finalState) { ListSequence.fromList(SLinkOperations.getChildren(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x1bf9eb43276b6d92L, "part"))).addElement(createRefactoringPart_1o8b1n_a0a0a4(participant.getId(), SNodeOperations.cast(HUtil.copyIfNecessary(initialState), MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept")), SNodeOperations.cast(HUtil.copyIfNecessary(finalState), MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept")))); } public int getFromVersion() { return SPropertyOperations.getInteger(this.myRefactoringStep, MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x1bf9eb43276b6d91L, "fromVersion")); } public void addOptions(Iterable<RefactoringParticipant.Option> selectedOptions) { if ((SLinkOperations.getTarget(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x31ee543051f2333cL, "options")) == null)) { SLinkOperations.setNewChild(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x31ee543051f2333cL, "options"), MetaAdapterFactory.getConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23340L, "jetbrains.mps.lang.migration.structure.RefactoringOptions")); } for (RefactoringParticipant.Option option : Sequence.fromIterable(selectedOptions)) { if (!(ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x31ee543051f2333cL, "options")), MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23340L, 0x31ee543051f23346L, "options"))).select(new ISelector<SNode, RefactoringParticipant.Option>() { public RefactoringParticipant.Option select(SNode it) { return new RefactoringParticipant.Option(SPropertyOperations.getString(it, MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f23344L, "optionId")), SPropertyOperations.getString(it, MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f30774L, "description"))); } }).contains(option))) { ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x31ee543051f2333cL, "options")), MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23340L, 0x31ee543051f23346L, "options"))).addElement(createRefactoringOption_1o8b1n_a0a0a0a1a6(option.getId(), option.getDescription())); } } } private static SNode createRefactoringLog_1o8b1n_a0b0d(Object p0, Object p1) { PersistenceFacade facade = PersistenceFacade.getInstance(); SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, "jetbrains.mps.lang.migration.structure.RefactoringLog"), null, null, false); n1.setProperty(MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, 0x115eca8579fL, "virtualPackage"), "refactoring"); n1.setProperty(MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x1bf9eb43276b6d91L, "fromVersion"), p0 + ""); n1.setProperty(MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), p1 + ""); return n1; } private static SNode createRefactoringPart_1o8b1n_a0a0a4(Object p0, Object p1, Object p2) { PersistenceFacade facade = PersistenceFacade.getInstance(); SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, "jetbrains.mps.lang.migration.structure.RefactoringPart"), null, null, false); n1.setProperty(MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3aaL, "participant"), p0 + ""); if (p1 != null) { n1.addChild(MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3acL, "initialState"), (SNode) p1); } if (p2 != null) { n1.addChild(MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3aeL, "finalState"), (SNode) p2); } return n1; } private static SNode createRefactoringOption_1o8b1n_a0a0a0a1a6(Object p0, Object p1) { PersistenceFacade facade = PersistenceFacade.getInstance(); SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, "jetbrains.mps.lang.migration.structure.RefactoringOption"), null, null, false); n1.setProperty(MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f23344L, "optionId"), p0 + ""); n1.setProperty(MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f30774L, "description"), p1 + ""); return n1; } }