MPS-extensions
MPS-extensions copied to clipboard
shadowmodel.tranformation: UnsupportedOperationException when added NodeAttribute
Problem
Adding a NodeAttribute to an shadow model input node throws the following exception:
ERROR - .ShadowOutputSynchronizerStep1 -
java.lang.UnsupportedOperationException: Not implemented
at de.q60.mps.shadowmodels.runtime.model.persistent.PNodeAdapter.addChild(PNodeAdapter.java:62)
at de.q60.mps.shadowmodels.runtime.engine.DependencyTrackingNode.addChild(DependencyTrackingNode.java:150)
at de.q60.mps.shadowmodels.runtime.smodel.NodeToSNodeAdapter.addChild(NodeToSNodeAdapter.java:168)
at jetbrains.mps.lang.smodel.generator.smodelAdapter.AbstractSNodeList$ChildrenSNodesList.doAddReference(AbstractSNodeList.java:163)
at jetbrains.mps.lang.smodel.generator.smodelAdapter.AbstractSNodeList.addReference(AbstractSNodeList.java:38)
at jetbrains.mps.lang.smodel.generator.smodelAdapter.AbstractSNodeList.add(AbstractSNodeList.java:140)
at jetbrains.mps.lang.smodel.generator.smodelAdapter.AbstractSNodeList$ChildrenSNodesList.add(AbstractSNodeList.java:150)
at jetbrains.mps.internal.collections.runtime.AbstractCollectionSequence.addElement(AbstractCollectionSequence.java:20)
at jetbrains.mps.lang.smodel.generator.smodelAdapter.AttributeOperations.addAttribute(AttributeOperations.java:51)
at jetbrains.mps.lang.smodel.generator.smodelAdapter.AttributeOperations.setAttribute(AttributeOperations.java:77)
at jetbrains.mps.lang.smodel.generator.smodelAdapter.AttributeOperations.createAndSetAttrbiute(AttributeOperations.java:99)
at org.safe4i.patterns.code.plugin.ShadowModelTransformationUtil.setShadowFlag(ShadowModelTransformationUtil.java:201)
at org.safe4i.patterns.code.transformations.CFunction2SafeFunction$6$1.apply(CFunction2SafeFunction.java:177)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine.applyRule(TransformationEngine.java:370)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine.computeResult(TransformationEngine.java:202)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine.computeResult(TransformationEngine.java:155)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4$1$1.invoke(TransformationEngine.java:135)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4$1$1.invoke(TransformationEngine.java:133)
at de.q60.mps.incremental.util.ContextValue.computeWith(ContextValue.java:44)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4$1.invoke(TransformationEngine.java:133)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4$1.invoke(TransformationEngine.java:131)
at de.q60.mps.incremental.util.ContextValue.computeWith(ContextValue.java:44)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4.invoke(TransformationEngine.java:131)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4.invoke(TransformationEngine.java:129)
at de.q60.mps.incremental.runtime.IncrementalEngine$5.invoke(IncrementalEngine.java:257)
at de.q60.mps.incremental.runtime.DependencyBroadcaster.evaluateWithTracking(DependencyBroadcaster.java:30)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluateWithTracking(IncrementalEngine.java:255)
at de.q60.mps.incremental.runtime.IncrementalEngine$4.invoke(IncrementalEngine.java:224)
at de.q60.mps.incremental.runtime.IncrementalEngine.cycleProtection(IncrementalEngine.java:245)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluate(IncrementalEngine.java:222)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine.execute(TransformationEngine.java:129)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine.computeResult(TransformationEngine.java:153)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4$1$1.invoke(TransformationEngine.java:135)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4$1$1.invoke(TransformationEngine.java:133)
at de.q60.mps.incremental.util.ContextValue.computeWith(ContextValue.java:44)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4$1.invoke(TransformationEngine.java:133)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4$1.invoke(TransformationEngine.java:131)
at de.q60.mps.incremental.util.ContextValue.computeWith(ContextValue.java:44)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4.invoke(TransformationEngine.java:131)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine$4.invoke(TransformationEngine.java:129)
at de.q60.mps.incremental.runtime.IncrementalEngine$5.invoke(IncrementalEngine.java:257)
at de.q60.mps.incremental.runtime.DependencyBroadcaster.evaluateWithTracking(DependencyBroadcaster.java:30)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluateWithTracking(IncrementalEngine.java:255)
at de.q60.mps.incremental.runtime.IncrementalEngine$4.invoke(IncrementalEngine.java:224)
at de.q60.mps.incremental.runtime.IncrementalEngine.cycleProtection(IncrementalEngine.java:245)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluate(IncrementalEngine.java:222)
at de.q60.mps.shadowmodels.runtime.engine.TransformationEngine.execute(TransformationEngine.java:129)
at de.q60.mps.shadowmodels.runtime.engine.SubgraphCallContext.resolveLocal(SubgraphCallContext.java:92)
at de.q60.mps.shadowmodels.runtime.engine.CallInContext.tryResolve(CallInContext.java:41)
at de.q60.mps.shadowmodels.runtime.engine.CallInContext.resolve(CallInContext.java:32)
at de.q60.mps.shadowmodels.runtime.engine.TransformationResult$TransformationResultChild.resolve(TransformationResult.java:552)
at de.q60.mps.shadowmodels.runtime.engine.TransformationResult$TransformationResultChild.asNode(TransformationResult.java:556)
at de.q60.mps.shadowmodels.runtime.engine.ResultElementAsNode$1.translate(ResultElementAsNode.java:64)
at de.q60.mps.shadowmodels.runtime.engine.ResultElementAsNode$1.translate(ResultElementAsNode.java:62)
at jetbrains.mps.internal.collections.runtime.ITranslator2.invoke(ITranslator2.java:12)
at jetbrains.mps.internal.collections.runtime.ITranslator2.invoke(ITranslator2.java:7)
at jetbrains.mps.internal.collections.runtime.impl.TranslatingSequence$TranslatingIterator.moveToNext(TranslatingSequence.java:82)
at jetbrains.mps.internal.collections.runtime.impl.TranslatingSequence$TranslatingIterator.hasNext(TranslatingSequence.java:37)
at jetbrains.mps.internal.collections.runtime.impl.SelectingSequence$SelectingIterator.moveToNext(SelectingSequence.java:59)
at jetbrains.mps.internal.collections.runtime.impl.SelectingSequence$SelectingIterator.hasNext(SelectingSequence.java:32)
at jetbrains.mps.internal.collections.runtime.ListSequence.fromIterable(ListSequence.java:122)
at jetbrains.mps.internal.collections.runtime.AbstractSequence.toListSequence(AbstractSequence.java:215)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.synchronizeChildren(ShadowOutputSynchronizerStep1.java:173)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.synchronizeNode(ShadowOutputSynchronizerStep1.java:158)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$2.invoke(ShadowOutputSynchronizerStep1.java:124)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$2.invoke(ShadowOutputSynchronizerStep1.java:121)
at de.q60.mps.incremental.runtime.IncrementalEngine$5.invoke(IncrementalEngine.java:257)
at de.q60.mps.incremental.runtime.DependencyBroadcaster.evaluateWithTracking(DependencyBroadcaster.java:30)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluateWithTracking(IncrementalEngine.java:255)
at de.q60.mps.incremental.runtime.IncrementalEngine$4.invoke(IncrementalEngine.java:224)
at de.q60.mps.incremental.runtime.IncrementalEngine.cycleProtection(IncrementalEngine.java:245)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluate(IncrementalEngine.java:222)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.getOutput(ShadowOutputSynchronizerStep1.java:121)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$3.select(ShadowOutputSynchronizerStep1.java:176)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$3.select(ShadowOutputSynchronizerStep1.java:174)
at jetbrains.mps.internal.collections.runtime.ISelector.invoke(ISelector.java:12)
at jetbrains.mps.internal.collections.runtime.impl.SelectingSequence$SelectingIterator.moveToNext(SelectingSequence.java:60)
at jetbrains.mps.internal.collections.runtime.impl.SelectingSequence$SelectingIterator.hasNext(SelectingSequence.java:32)
at jetbrains.mps.internal.collections.runtime.ListSequence.fromIterable(ListSequence.java:122)
at jetbrains.mps.internal.collections.runtime.AbstractSequence.toListSequence(AbstractSequence.java:215)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.synchronizeChildren(ShadowOutputSynchronizerStep1.java:178)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.synchronizeNode(ShadowOutputSynchronizerStep1.java:158)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$2.invoke(ShadowOutputSynchronizerStep1.java:124)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$2.invoke(ShadowOutputSynchronizerStep1.java:121)
at de.q60.mps.incremental.runtime.IncrementalEngine$5.invoke(IncrementalEngine.java:257)
at de.q60.mps.incremental.runtime.DependencyBroadcaster.evaluateWithTracking(DependencyBroadcaster.java:30)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluateWithTracking(IncrementalEngine.java:255)
at de.q60.mps.incremental.runtime.IncrementalEngine$4.invoke(IncrementalEngine.java:224)
at de.q60.mps.incremental.runtime.IncrementalEngine.cycleProtection(IncrementalEngine.java:245)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluate(IncrementalEngine.java:222)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.getOutput(ShadowOutputSynchronizerStep1.java:121)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$3.select(ShadowOutputSynchronizerStep1.java:176)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$3.select(ShadowOutputSynchronizerStep1.java:174)
at jetbrains.mps.internal.collections.runtime.ISelector.invoke(ISelector.java:12)
at jetbrains.mps.internal.collections.runtime.impl.SelectingSequence$SelectingIterator.moveToNext(SelectingSequence.java:60)
at jetbrains.mps.internal.collections.runtime.impl.SelectingSequence$SelectingIterator.hasNext(SelectingSequence.java:32)
at jetbrains.mps.internal.collections.runtime.ListSequence.fromIterable(ListSequence.java:122)
at jetbrains.mps.internal.collections.runtime.AbstractSequence.toListSequence(AbstractSequence.java:215)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.synchronizeChildren(ShadowOutputSynchronizerStep1.java:178)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.synchronizeNode(ShadowOutputSynchronizerStep1.java:158)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$2.invoke(ShadowOutputSynchronizerStep1.java:124)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1$2.invoke(ShadowOutputSynchronizerStep1.java:121)
at de.q60.mps.incremental.runtime.IncrementalEngine$5.invoke(IncrementalEngine.java:257)
at de.q60.mps.incremental.runtime.DependencyBroadcaster.evaluateWithTracking(DependencyBroadcaster.java:30)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluateWithTracking(IncrementalEngine.java:255)
at de.q60.mps.incremental.runtime.IncrementalEngine$4.invoke(IncrementalEngine.java:224)
at de.q60.mps.incremental.runtime.IncrementalEngine.cycleProtection(IncrementalEngine.java:245)
at de.q60.mps.incremental.runtime.IncrementalEngine.evaluate(IncrementalEngine.java:222)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.getOutput(ShadowOutputSynchronizerStep1.java:121)
at de.q60.mps.shadowmodels.runtime.smodel.ShadowOutputSynchronizerStep1.updateRepository(ShadowOutputSynchronizerStep1.java:108)
at de.q60.mps.shadowmodels.runtime.smodel.RepositoryModulesManager$6$1.invoke(RepositoryModulesManager.java:244)
at de.q60.mps.shadowmodels.runtime.smodel.RepositoryModulesManager$10$1.run(RepositoryModulesManager.java:398)
at de.q60.mps.incremental.util.ContextValue.runWith(ContextValue.java:24)
at de.q60.mps.shadowmodels.runtime.smodel.RepositoryModulesManager$10.invoke(RepositoryModulesManager.java:396)
at de.q60.mps.incremental.util.ContextValue.runWith(ContextValue.java:34)
at de.q60.mps.shadowmodels.runtime.model.persistent.PBranch.runRead(PBranch.java:65)
at de.q60.mps.shadowmodels.runtime.smodel.RepositoryModulesManager.runReadOnTransformationOutput(RepositoryModulesManager.java:394)
at de.q60.mps.shadowmodels.runtime.smodel.RepositoryModulesManager$6.invoke(RepositoryModulesManager.java:240)
at de.q60.mps.incremental.util.ContextValue.runWith(ContextValue.java:34)
at de.q60.mps.shadowmodels.runtime.model.persistent.PBranch.runWrite(PBranch.java:113)
at de.q60.mps.shadowmodels.runtime.smodel.RepositoryModulesManager.synchronize(RepositoryModulesManager.java:238)
at de.q60.mps.shadowmodels.runtime.smodel.RepositoryModulesManager$3.run(RepositoryModulesManager.java:124)
at java.lang.Thread.run(Thread.java:745)
In particual I pass the input paramter to a helper function where the NodeAttribute is added and the very same input node is returned.
public static node<> setShadowFlag(node<> n) {
[email protected](<ShadowFlag>())
return n
}
This method is used like this:

Addig a NodeAttribute could be achvieved however by transforming the input and + adding attribute like this:
