From f288369c8208c86adfa8959be5c06568c3f3ab9a Mon Sep 17 00:00:00 2001
From: Bastien Sultan <bastien.sultan@telecom-paris.fr>
Date: Tue, 30 Aug 2022 11:38:23 +0200
Subject: [PATCH] Patching AMULET state deletion and action on signal deletion
 methods

---
 .../mutation/RmActionOnSignalMutation.java    | 22 +++++++++++++++++++
 .../mutation/RmStateMutation.java             | 10 ++++-----
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/main/java/avatartranslator/mutation/RmActionOnSignalMutation.java b/src/main/java/avatartranslator/mutation/RmActionOnSignalMutation.java
index e334fbe4f6..2aa0cbeb86 100644
--- a/src/main/java/avatartranslator/mutation/RmActionOnSignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmActionOnSignalMutation.java
@@ -40,6 +40,9 @@ package avatartranslator.mutation;
 
 import avatartranslator.*;
 
+import java.util.LinkedList;
+import java.util.List;
+
 /**
  * Class MdRandomMutation
  * Creation: 28/06/2022
@@ -65,6 +68,25 @@ public class RmActionOnSignalMutation extends ActionOnSignalMutation implements
         if (aaos == null) {
             throw new ApplyMutationException("no such action on signal in block " + getBlockName());
         }
+        List<AvatarStateMachineElement> asmElements = asm.getListOfElements();
+        List<AvatarStateMachineElement> asmElementsToRemove = new LinkedList<>();
+        //adding to the asmElementsToRemove list the transitions leading to the action on signal operator
+        for (AvatarStateMachineElement element : asmElements) {
+            if (element.getNexts().contains(aaos)) {
+                for (AvatarStateMachineElement element2 : asmElements) {
+                    if (element2.getNexts().contains(element)) {
+                        element2.removeNext(element);
+                    }
+                }
+                asmElementsToRemove.add(element);
+            }
+            //adding to the asmElementsToRemove list the transitions starting from the action on signal operator
+            asmElementsToRemove.addAll(aaos.getNexts());
+        }
+        //removing the incoming and outgoing transitions from the Avatar specification
+        for (AvatarStateMachineElement element : asmElementsToRemove){
+            asm.removeElement(element);
+        }
         asm.removeElement(aaos);
     }
 
diff --git a/src/main/java/avatartranslator/mutation/RmStateMutation.java b/src/main/java/avatartranslator/mutation/RmStateMutation.java
index 22c77e466b..7fbfd4e1e8 100644
--- a/src/main/java/avatartranslator/mutation/RmStateMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmStateMutation.java
@@ -63,6 +63,7 @@ public class RmStateMutation extends StateMutation implements RmMutation {
         AvatarStateMachine asm = getAvatarStateMachine(_avspec);
         List<AvatarStateMachineElement> asmElements = asm.getListOfElements();
         List<AvatarStateMachineElement> asmElementsToRemove = new LinkedList<>();
+        //adding to the asmElementsToRemove list the transitions leading to the state
         for (AvatarStateMachineElement element : asmElements) {
             if (element.getNexts().contains(state)) {
                 for (AvatarStateMachineElement element2 : asmElements) {
@@ -72,13 +73,10 @@ public class RmStateMutation extends StateMutation implements RmMutation {
                 }
                 asmElementsToRemove.add(element);
             }
-            if (element == state) {
-                for (AvatarStateMachineElement element3 : state.getNexts()) {
-                    asmElementsToRemove.add(element3);
-                }
-            }
+            //adding to the asmElementsToRemove list the transitions starting from the state
+            asmElementsToRemove.addAll(state.getNexts());
         }
-        System.out.println(asmElementsToRemove.toString());
+        //removing the incoming and outgoing transitions from the Avatar specification
         for (AvatarStateMachineElement element : asmElementsToRemove){
             asm.removeElement(element);
         }
-- 
GitLab