Browse Source

#833: Fold refactorings are only executable when there is at least one foldable action.

Thomas Kutz 9 years ago
parent
commit
444c079975

+ 8 - 3
plugins/org.yakindu.sct.refactoring/src/org/yakindu/sct/refactoring/refactor/impl/FoldIncomingActionsRefactoring.java

@@ -41,6 +41,7 @@ import org.yakindu.sct.refactoring.refactor.AbstractRefactoring;
  * <ul>
  * <li>Each incoming transition has at least one action.</li>
  * <li>No incoming transition enters a composite state which has entry actions.</li>
+ * <li>At least one action is foldable.</li>
  * </ul>
  * @author thomas kutz - Initial contribution and API
  * 
@@ -60,7 +61,8 @@ public class FoldIncomingActionsRefactoring extends AbstractRefactoring<State> {
 	public boolean isExecutable() {
 		return super.isExecutable()
 				&& allIncomingTransitionsHaveAtLeastOneAction()
-				&& noIncomingTransitionEntersCompositeWithEntryActions();
+				&& noIncomingTransitionEntersCompositeWithEntryActions()
+				&& atLeastOneActionIsFoldable();
 	}
 
 	private boolean noIncomingTransitionEntersCompositeWithEntryActions() {
@@ -70,8 +72,11 @@ public class FoldIncomingActionsRefactoring extends AbstractRefactoring<State> {
 	private boolean allIncomingTransitionsHaveAtLeastOneAction() {
 		return helper.haveAllAtLeastOneAction(getContextObject().getIncomingTransitions());
 	}
-
-
+	
+	private boolean atLeastOneActionIsFoldable() {
+		EList<Transition> transitions = getContextObject().getIncomingTransitions();
+		return getLastFoldableAction(helper.getAllActions(transitions), 0) != null;
+	}
 
 	private List<Expression> getFoldableActions() {
 		EList<Transition> transitions = getContextObject()

+ 8 - 1
plugins/org.yakindu.sct.refactoring/src/org/yakindu/sct/refactoring/refactor/impl/FoldOutgoingActionsRefactoring.java

@@ -39,6 +39,7 @@ import org.yakindu.sct.refactoring.refactor.AbstractRefactoring;
  * <ul>
  * <li>Each outgoing transition has at least one action.</li>
  * <li>No outgoing transition leaves a composite state which has exit actions.</li>
+ * <li>At least one action is foldable.</li>
  * </ul>
  * @author thomas kutz - Initial contribution and API
  * 
@@ -60,7 +61,8 @@ public class FoldOutgoingActionsRefactoring extends AbstractRefactoring<State> {
 	public boolean isExecutable() {
 		return super.isExecutable()
 				&& allOutgoingTransitionsHaveAtLeastOneAction()
-				&& noOutgoingTransitionLeavesCompositeWithExitActions();
+				&& noOutgoingTransitionLeavesCompositeWithExitActions()
+				&& atLeastOneFoldableAction();
 	}
 
 	private boolean noOutgoingTransitionLeavesCompositeWithExitActions() {
@@ -70,6 +72,11 @@ public class FoldOutgoingActionsRefactoring extends AbstractRefactoring<State> {
 	private boolean allOutgoingTransitionsHaveAtLeastOneAction() {
 		return helper.haveAllAtLeastOneAction(getContextObject().getOutgoingTransitions());
 	}
+	
+	private boolean atLeastOneFoldableAction() {
+		EList<Transition> transitions = getContextObject().getOutgoingTransitions();
+		return getFirstFoldableAction(helper.getAllActions(transitions), 0) != null;
+	}
 
 	private List<Expression> getFoldableActions(EList<Transition> transitions) {