diff --git a/src/main/java/avatartranslator/AvatarBlock.java b/src/main/java/avatartranslator/AvatarBlock.java index 2401f90bcb13a55178137ee449dd81d9896ade82..0343288f5018dfba66418697e73d52edec76696e 100644 --- a/src/main/java/avatartranslator/AvatarBlock.java +++ b/src/main/java/avatartranslator/AvatarBlock.java @@ -793,10 +793,12 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne public void removeConstantAttributes() { AvatarTransition at; - - if (constants == null) { - List<AvatarAttribute> newAttributes = new LinkedList<AvatarAttribute>(); - constants = new LinkedList<AvatarAttribute>(); + + + + if ((constants == null) || (constants.size() == 0)) { + List<AvatarAttribute> newAttributes = new LinkedList<>(); + constants = new LinkedList<>(); for (AvatarAttribute attr : attributes) { boolean toKeep = false; @@ -804,13 +806,12 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne if (attr.isTimer()) { toKeep = true; } + for (AvatarStateMachineElement elt : asm.getListOfElements()) { if (elt instanceof AvatarTransition) { at = (AvatarTransition) elt; - - for (AvatarAction aa : at.getActions()) { if (aa instanceof AvatarActionAssignment) { if (((AvatarActionAssignment) aa).leftHand.getName().compareTo(attr.name) == 0) { @@ -833,6 +834,10 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne if (((AvatarRandom) elt).getVariable().compareTo(attr.name) == 0) { toKeep = true; } + } else if (elt instanceof AvatarQueryOnSignal) { + if (((AvatarQueryOnSignal) elt).getAttribute().getName().compareTo(attr.name) == 0) { + toKeep = true; + } } diff --git a/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java b/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java index bf62d038cc0ed037ee991369eb48230afcd77cdb..66fc79e8218e0e15796558d65aa032bfee824f60 100644 --- a/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java +++ b/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java @@ -286,16 +286,16 @@ public class AvatarExpressionTest { e1 = new AvatarExpressionSolver("block1.x + block2.y"); assertTrue(e1.buildExpression(as)); e2 = new AvatarExpressionSolver("-block1.x / block1.y - 15 * block2.z + 1 == -46"); - assertFalse(e2.buildExpression(as)); + assertTrue(e2.buildExpression(as)); e3 = new AvatarExpressionSolver("not(-block2.x / block2.z - not(block1.x + block2.y) * -2 + -(1) <= -(-4 + 7))"); assertFalse(e3.buildExpression(as)); e4 = new AvatarExpressionSolver("block1.x + block2.w"); assertTrue(e4.buildExpression(as)); assertTrue(e1.getResult(ss) == 17); - //assertTrue(e2.getResult(ss) == 1); + assertTrue(e2.getResult(ss) == 1); assertTrue(e3.getResult(ss) == 0); - //assertTrue(e4.getResult(ss) == -2); + assertTrue(e4.getResult(ss) == -2); }