From a23380d515a60a57d91c0719f27702325ba84f98 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Mon, 21 Jan 2019 17:18:45 +0100
Subject: [PATCH] Update on bool verification in AVATAR.

---
 .../avatartranslator/AvatarStateMachine.java  | 10 ++++----
 .../avatartranslator/AvatarSyntaxChecker.java |  6 ++---
 .../java/myutil/BoolExpressionEvaluator.java  | 23 +++++++++++--------
 .../java/ui/AvatarDesignPanelTranslator.java  |  4 ++--
 src/main/java/ui/avatarbd/AvatarBDPanel.java  |  4 ++--
 .../myutil/BoolExpressionEvaluatorTest.java   |  8 +++++++
 6 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/src/main/java/avatartranslator/AvatarStateMachine.java b/src/main/java/avatartranslator/AvatarStateMachine.java
index 856cd4bcff..cafd1aa4f8 100644
--- a/src/main/java/avatartranslator/AvatarStateMachine.java
+++ b/src/main/java/avatartranslator/AvatarStateMachine.java
@@ -623,7 +623,7 @@ public class AvatarStateMachine extends AvatarElement {
         }
 
         for (AvatarStateMachineElement element : v) {
-            TraceManager.addDev(">" + element + "<");
+            //TraceManager.addDev(">" + element + "<");
             splitAvatarTransition((AvatarTransition) element, _state);
         }
 
@@ -653,7 +653,7 @@ public class AvatarStateMachine extends AvatarElement {
         } else {
 
             if (_at.getNbOfAction() > 1) {
-                TraceManager.addDev("New split state");
+                //TraceManager.addDev("New split state");
                 String tmp = findUniqueStateName("splitstate_action__");
                 AvatarState as = new AvatarState(tmp, null);
                 as.setHidden(true);
@@ -712,7 +712,7 @@ public class AvatarStateMachine extends AvatarElement {
         //TraceManager.addDev("*** Analyzing components in state " + state);
         // Split avatar transitions
         for (AvatarStateMachineElement element : v) {
-            TraceManager.addDev(">" + element + "<");
+            //TraceManager.addDev(">" + element + "<");
             if (element instanceof AvatarTransition) {
                 splitAvatarTransition((AvatarTransition) element, state);
             }
@@ -1379,7 +1379,7 @@ public class AvatarStateMachine extends AvatarElement {
     }
 
     public AvatarTransition cloneCompositeTransition(AvatarTransition _at) {
-        TraceManager.addDev("Must clone: " + _at);
+        //TraceManager.addDev("Must clone: " + _at);
         // We clone elements until we find a state!
         AvatarStateMachineElement tomake, current;
         AvatarStateMachineElement tmp;
@@ -1390,7 +1390,7 @@ public class AvatarStateMachine extends AvatarElement {
         tomake = at;
 
         while ((current != null) && !(current instanceof AvatarState)) {
-            TraceManager.addDev("Cloning: " + current);
+            //TraceManager.addDev("Cloning: " + current);
             tmp = current.basicCloneMe(block);
             addElement(tmp);
             tomake.addNext(tmp);
diff --git a/src/main/java/avatartranslator/AvatarSyntaxChecker.java b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
index a1eed679c8..a0b88ce198 100644
--- a/src/main/java/avatartranslator/AvatarSyntaxChecker.java
+++ b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
@@ -158,13 +158,13 @@ public class AvatarSyntaxChecker  {
 
         BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
 
-        TraceManager.addDev("IsValidBoolExpr Evaluating bool:" + act);
-        boolean result = bee.getResultOf(act);
+        //TraceManager.addDev("IsValidBoolExpr Evaluating bool:" + act);
+        boolean result = bee.getResultOfWithIntExpr(act);
         if (bee.getError() != null) {
             TraceManager.addDev("Error in bool expr: " + bee.getError());
             return -1;
         } else {
-            TraceManager.addDev("IsValidBoolExpr: YES (" + act + ")");
+            //TraceManager.addDev("IsValidBoolExpr: YES (" + act + ")");
         }
 
         return 0;
diff --git a/src/main/java/myutil/BoolExpressionEvaluator.java b/src/main/java/myutil/BoolExpressionEvaluator.java
index 2d9e94e80f..ff6557e73e 100644
--- a/src/main/java/myutil/BoolExpressionEvaluator.java
+++ b/src/main/java/myutil/BoolExpressionEvaluator.java
@@ -497,7 +497,9 @@ public class BoolExpressionEvaluator {
                     return null;
                 }
                 Object ob1 = left.computeValue();
+                //TraceManager.addDev("ob1=" + ob1);
                 if (!(ob1 instanceof Boolean)) {
+                    TraceManager.addDev("ob1=" + ob1);
                     errorMessage = "Bad operand for  unary boolean operator";
                     return null;
                 }
@@ -594,7 +596,7 @@ public class BoolExpressionEvaluator {
             if (father == null) {
                 s += " father= no";
             } else {
-                s += " father=" + id;
+                s += " father=" + father.id;
             }
             s += " type:" + res + " op:" + toStringAction(op) + " int:" + i + " bool:" + b;
 
@@ -1646,11 +1648,13 @@ public class BoolExpressionEvaluator {
 
 
         //TraceManager.addDev("Tree of " + _expr + ": " + resIBR.toString() + "\nEnd of tree");
+        //TraceManager.addDev("Computing value of " + _expr);
 
 
         Object res = resIBR.computeValue();
 
         if (res == null) {
+            TraceManager.addDev("Error in tree of " + _expr + ": " + resIBR.toString() + "\nEnd of tree");
             return false;
         }
 
@@ -1803,14 +1807,6 @@ public class BoolExpressionEvaluator {
             return newElt;
         }
 
-        if (c1 == '>') {
-            newElt = current.addIntOperator(GT_TOKEN);
-            if (newElt == null) {
-                errorMessage = "Badly placed int operator:" + token;
-                return null;
-            }
-            return newElt;
-        }
 
         if (c1 == ';') {
             newElt = current.addIntOperator(LTEQ_TOKEN);
@@ -1841,6 +1837,15 @@ public class BoolExpressionEvaluator {
             return newElt;
         }
 
+        if (c1 == '$') {
+            newElt = current.addBinaryOperator(NOT_EQUAL_TOKEN);
+            if (newElt == null) {
+                errorMessage = "Badly placed bool operator:" + token;
+                return null;
+            }
+            return newElt;
+        }
+
         if (c1 == '&') {
             newElt = current.addBinaryOperator(AND_TOKEN);
             if (newElt == null) {
diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java
index ed37a70f04..b67b04277a 100644
--- a/src/main/java/ui/AvatarDesignPanelTranslator.java
+++ b/src/main/java/ui/AvatarDesignPanelTranslator.java
@@ -1969,7 +1969,7 @@ public class AvatarDesignPanelTranslator {
     			else {
     				// Variable assignment
 
-                    TraceManager.addDev("Action:" + actionText);
+                    //TraceManager.addDev("Action:" + actionText);
     				error = AvatarSyntaxChecker.isAValidVariableExpr( block.getAvatarSpecification(), block, actionText);
 
     				if ( error < 0 ) {
@@ -2531,7 +2531,7 @@ public class AvatarDesignPanelTranslator {
         int length = tmp.length();
         tmp = tmp.trim();
         if (tmp.length() != length) {
-            TraceManager.addDev("pb of length");
+            //TraceManager.addDev("pb of length");
             return true;
         }
 
diff --git a/src/main/java/ui/avatarbd/AvatarBDPanel.java b/src/main/java/ui/avatarbd/AvatarBDPanel.java
index 70c04c5758..b9a2bca3db 100644
--- a/src/main/java/ui/avatarbd/AvatarBDPanel.java
+++ b/src/main/java/ui/avatarbd/AvatarBDPanel.java
@@ -661,7 +661,7 @@ public class AvatarBDPanel extends TDiagramPanel {
     }
 
     public void makeValidated() {
-        TraceManager.addDev("Making validated with val=" + val);
+        //TraceManager.addDev("Making validated with val=" + val);
         validated = new LinkedList<AvatarBDStateMachineOwner> ();
         List<AvatarBDStateMachineOwner> list = getFullStateMachineOwnerList();
         String tmp;
@@ -682,7 +682,7 @@ public class AvatarBDPanel extends TDiagramPanel {
     }
 
     public void makeIgnored() {
-        TraceManager.addDev("Making ignored with ign=" + val);
+        //TraceManager.addDev("Making ignored with ign=" + val);
         ignored = new LinkedList<AvatarBDStateMachineOwner> ();
         List<AvatarBDStateMachineOwner> list = getFullStateMachineOwnerList();
         String tmp;
diff --git a/ttool/src/test/java/myutil/BoolExpressionEvaluatorTest.java b/ttool/src/test/java/myutil/BoolExpressionEvaluatorTest.java
index 5396786ce8..fe8fb6dce9 100755
--- a/ttool/src/test/java/myutil/BoolExpressionEvaluatorTest.java
+++ b/ttool/src/test/java/myutil/BoolExpressionEvaluatorTest.java
@@ -93,6 +93,14 @@ public class BoolExpressionEvaluatorTest {
         assertFalse(bee.hasError());
     }
 
+    @Test
+    public void testTrueDoubleIntegerNullEqualityExpr() {
+        BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
+        System.out.println("Hello");
+        assertTrue(bee.getResultOfWithIntExpr("((0)==(0)) || (0==0)"));
+        assertFalse(bee.hasError());
+    }
+
     @Test
     public void testFalseLeftAddition() {
         BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
-- 
GitLab