MPS-extensions icon indicating copy to clipboard operation
MPS-extensions copied to clipboard

shadowmodel.tranformation: UnsupportedOperationException when added NodeAttribute

Open arimer opened this issue 6 years ago • 1 comments

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: image

arimer avatar Apr 18 '19 08:04 arimer

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

arimer avatar Apr 18 '19 11:04 arimer