فهرست منبع

Issue 803: Fixed undo of extract subdiagram refactoring

* #803: Fixed undo action.
* #803: Re-wiring existing edge instead of creating new one to avoid sporadic undo problems.
Thomas Kutz 9 سال پیش
والد
کامیت
b70705125d

+ 7 - 14
plugins/org.yakindu.sct.refactoring/src/org/yakindu/sct/refactoring/refactor/impl/ExtractSubdiagramRefactoring.java

@@ -80,16 +80,8 @@ public class ExtractSubdiagramRefactoring extends AbstractRefactoring<View> {
 
 	@Override
 	protected boolean internalDoUndo() {
-		boolean close = DiagramPartitioningUtil.closeSubdiagramEditors((State) subdiagram.getElement());
-		if (!close)
-			return false;
-		// Since the canonical edit policy creates edges for the semantic
-		// transitions and it is not done within the TransactionalCommand we
-		// have to delete the created edges manually when undo is executed.
-		while (subdiagram.getEdges().size() > 0) {
-			EcoreUtil.delete((EObject) subdiagram.getEdges().get(0));
-		}
-		return true;
+		// close the sub diagram before undo will delete it
+		return DiagramPartitioningUtil.closeSubdiagramEditors((State) subdiagram.getElement());
 	}
 
 	@SuppressWarnings("unchecked")
@@ -279,15 +271,16 @@ public class ExtractSubdiagramRefactoring extends AbstractRefactoring<View> {
 				preferencesHint);
 
 		// re-wire existing transition to new exit point
-		Vertex oldTarget = transition.getTarget();
+		Vertex oldTransitionTarget = transition.getTarget();
 		transition.setTarget(exitPoint);
-		ViewService.createEdge(edge.getSource(), exitNode, transition, SemanticHints.TRANSITION, preferencesHint);
+		View oldEdgeTarget = edge.getTarget();
+		edge.setTarget(exitNode);
 
 		// create transition from selected state to former transition target
 		Transition exitPointTransition = SGraphFactory.eINSTANCE.createTransition();
 		exitPointTransition.setSource((State) subdiagram.getElement());
-		exitPointTransition.setTarget(oldTarget);
-		ViewService.createEdge(getContextObject(), edge.getTarget(), exitPointTransition, SemanticHints.TRANSITION,
+		exitPointTransition.setTarget(oldTransitionTarget);
+		ViewService.createEdge(getContextObject(), oldEdgeTarget, exitPointTransition, SemanticHints.TRANSITION,
 				preferencesHint);
 
 		addExitPointSpec(exitPointTransition, exitPoint);