itemisCREATE / statecharts

YAKINDU Statechart Tools (http://www.statecharts.org)
Eclipse Public License 1.0
175 stars 85 forks source link

Folding/Unfolding of transitions is not working in combination with rename refactoring #1684

Closed ghost closed 6 years ago

ghost commented 6 years ago

The folding/unfolding mechanism is not working after a name of a variable/etc. is refactored. The folding/unfolding then does nothing, except enabling/disabling those operations in the context menu UI only. (2) Also folding/unfolding become disabled, after the value of the refactored variable is manually changed.

Steps to reproduce:


- Try fold/unfold the outgoing/incoming transition for each of the states.
- The folding/unfolding should work correctly.
- Refactor the name of the variable 'light' to any arbitrary name (e.g. 'lamp').
- After the renaming, the fold/undold mechanism doesn't work anymore.
(2)
- Change name value of the refactored name (i.e. if lamp was true, change to false, or otherwise)
- Right click one of the states -> the corresponding Fold/Unfold must not be disabled.
ghost commented 6 years ago

Also, if you add a printStackTrace() in AbstractSCTResource in serializeSpecification() method the following exception is thrown after the first unfold WITHOUT rename refactoring.

org.eclipse.xtext.parsetree.reconstr.XtextSerializationException: Serialization failed
<# of serialized tokens>: <EObject path> "<serializable fragment, starting from the end>":
  -> <possible reasons for not continuing>
2:Statechart'default'.regions[0]->Region'main region'.vertices[1]->State'StateA'.scopes[0]->SimpleScope.reactions[0]->LocalReaction.effect->ReactionEffect: "":
  -> ReactionEffect_ActionsAssignment_2_1: All 0 values of ReactionEffect.actions have been consumed. More are needed to continue here.
    at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.serialize(AbstractParseTreeConstructor.java:684)
    at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.serialize(AbstractParseTreeConstructor.java:691)
    at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.serializeSubtree(AbstractParseTreeConstructor.java:715)
    at org.eclipse.xtext.parsetree.reconstr.Serializer.serialize(Serializer.java:64)
    at org.eclipse.xtext.parsetree.reconstr.Serializer.serialize(Serializer.java:83)
    at org.eclipse.xtext.parsetree.reconstr.Serializer.serialize(Serializer.java:76)
    at org.yakindu.sct.model.sgraph.resource.AbstractSCTResource.serialize(AbstractSCTResource.java:383)
    at org.yakindu.sct.model.stext.resource.StextResource.serializeReaction(StextResource.java:86)
    at org.yakindu.sct.model.stext.resource.StextResource.serializeState(StextResource.java:76)
    at org.yakindu.sct.model.sgraph.resource.AbstractSCTResource.serializeSpecificationElement(AbstractSCTResource.java:366)
    at org.yakindu.sct.model.sgraph.resource.AbstractSCTResource$SerializeAdapter.notifyChanged(AbstractSCTResource.java:417)
    at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
    at org.eclipse.emf.ecore.util.EcoreEList.dispatchNotification(EcoreEList.java:249)
    at org.eclipse.emf.common.notify.impl.NotifyingListImpl.addUnique(NotifyingListImpl.java:294)
    at org.eclipse.emf.common.util.AbstractEList.add(AbstractEList.java:303)
    at org.yakindu.sct.refactoring.refactor.impl.FoldOutgoingActionsRefactoring.createExitBlock(FoldOutgoingActionsRefactoring.java:123)
    at org.yakindu.sct.refactoring.refactor.impl.FoldOutgoingActionsRefactoring.addActionsToExitReaction(FoldOutgoingActionsRefactoring.java:102)
    at org.yakindu.sct.refactoring.refactor.impl.FoldOutgoingActionsRefactoring.internalExecute(FoldOutgoingActionsRefactoring.java:54)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring$1.doExecuteWithResult(AbstractRefactoring.java:98)
    at org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand.doExecute(AbstractTransactionalCommand.java:247)
    at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:150)
    at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:488)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring.executeCommand(AbstractRefactoring.java:176)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring.executeCommand(AbstractRefactoring.java:166)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring.executeCommand(AbstractRefactoring.java:117)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring.execute(AbstractRefactoring.java:113)
    at org.yakindu.sct.refactoring.handlers.AbstractRefactoringHandler.execute(AbstractRefactoringHandler.java:64)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:295)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90)
    at sun.reflect.GeneratedMethodAccessor154.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:282)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:264)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:152)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:494)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:488)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:433)
    at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.handleWidgetSelection(AbstractContributionItem.java:454)
    at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem$3.handleEvent(AbstractContributionItem.java:482)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4418)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4236)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3824)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1492)

When you directly unfold again, the following exception occurs:

org.eclipse.xtext.parsetree.reconstr.XtextSerializationException: Serialization failed
<# of serialized tokens>: <EObject path> "<serializable fragment, starting from the end>":
  -> <possible reasons for not continuing>
2:Statechart'default'.regions[0]->Region'main region'.vertices[1]->State'StateA'.outgoingTransitions[0]->Transition.effect->ReactionEffect: "":
  -> ReactionEffect_ActionsAssignment_2_1: All 0 values of ReactionEffect.actions have been consumed. More are needed to continue here.
    at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.serialize(AbstractParseTreeConstructor.java:684)
    at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.serialize(AbstractParseTreeConstructor.java:691)
    at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.serializeSubtree(AbstractParseTreeConstructor.java:715)
    at org.eclipse.xtext.parsetree.reconstr.Serializer.serialize(Serializer.java:64)
    at org.eclipse.xtext.parsetree.reconstr.Serializer.serialize(Serializer.java:83)
    at org.eclipse.xtext.parsetree.reconstr.Serializer.serialize(Serializer.java:76)
    at org.yakindu.sct.model.sgraph.resource.AbstractSCTResource.serialize(AbstractSCTResource.java:383)
    at org.yakindu.sct.model.stext.resource.StextResource.serializeReaction(StextResource.java:86)
    at org.yakindu.sct.model.stext.resource.StextResource.serializeTransition(StextResource.java:98)
    at org.yakindu.sct.model.sgraph.resource.AbstractSCTResource.serializeSpecificationElement(AbstractSCTResource.java:364)
    at org.yakindu.sct.model.sgraph.resource.AbstractSCTResource$SerializeAdapter.notifyChanged(AbstractSCTResource.java:417)
    at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
    at org.eclipse.emf.common.notify.impl.NotificationImpl.dispatch(NotificationImpl.java:1027)
    at org.yakindu.sct.model.sgraph.impl.TransitionImpl.setEffect(TransitionImpl.java:265)
    at org.yakindu.sct.refactoring.refactor.impl.UnfoldExitActionsRefactoring.addActionsToTransition(UnfoldExitActionsRefactoring.java:97)
    at org.yakindu.sct.refactoring.refactor.impl.UnfoldExitActionsRefactoring.addActionsToOutgoingTransitions(UnfoldExitActionsRefactoring.java:83)
    at org.yakindu.sct.refactoring.refactor.impl.UnfoldExitActionsRefactoring.unfoldExitActions(UnfoldExitActionsRefactoring.java:77)
    at org.yakindu.sct.refactoring.refactor.impl.UnfoldExitActionsRefactoring.internalExecute(UnfoldExitActionsRefactoring.java:47)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring$1.doExecuteWithResult(AbstractRefactoring.java:98)
    at org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand.doExecute(AbstractTransactionalCommand.java:247)
    at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:150)
    at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:488)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring.executeCommand(AbstractRefactoring.java:176)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring.executeCommand(AbstractRefactoring.java:166)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring.executeCommand(AbstractRefactoring.java:117)
    at org.yakindu.sct.refactoring.refactor.AbstractRefactoring.execute(AbstractRefactoring.java:113)
    at org.yakindu.sct.refactoring.handlers.AbstractRefactoringHandler.execute(AbstractRefactoringHandler.java:64)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:295)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90)
    at sun.reflect.GeneratedMethodAccessor154.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:282)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:264)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:152)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:494)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:488)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:433)
    at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.handleWidgetSelection(AbstractContributionItem.java:454)
    at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem$3.handleEvent(AbstractContributionItem.java:482)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4418)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4236)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3824)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1492)