You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by wo...@apache.org on 2013/11/08 04:53:58 UTC
svn commit: r1539916 - in /commons/proper/scxml/trunk/src:
main/java/org/apache/commons/scxml2/semantics/TransitionTargetComparator.java
test/java/org/apache/commons/scxml2/semantics/TransitionTargetComparatorTest.java
Author: woonsan
Date: Fri Nov 8 03:53:58 2013
New Revision: 1539916
URL: http://svn.apache.org/r1539916
Log:
SCXML-160: fixing cast exception in case that the state machine has nested parallels
Modified:
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/TransitionTargetComparator.java
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/semantics/TransitionTargetComparatorTest.java
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/TransitionTargetComparator.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/TransitionTargetComparator.java?rev=1539916&r1=1539915&r2=1539916&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/TransitionTargetComparator.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/TransitionTargetComparator.java Fri Nov 8 03:53:58 2013
@@ -17,11 +17,11 @@
package org.apache.commons.scxml2.semantics;
import java.io.Serializable;
+import java.util.Collection;
import java.util.Comparator;
import org.apache.commons.scxml2.SCXMLHelper;
import org.apache.commons.scxml2.model.Parallel;
-import org.apache.commons.scxml2.model.State;
import org.apache.commons.scxml2.model.TransitionTarget;
@@ -75,7 +75,7 @@ final class TransitionTargetComparator<T
// - not a requirement
// - though useful for an impl to have repeatable behavior
// - downside is users may rely on this behavior
- Parallel lca = (Parallel) SCXMLHelper.getLCA(tt1, tt2);
+ TransitionTarget lca = SCXMLHelper.getLCA(tt1, tt2);
TransitionTarget parent1 = tt1;
while (parent1.getParent() != lca) {
parent1 = parent1.getParent();
@@ -84,12 +84,17 @@ final class TransitionTargetComparator<T
while (parent2.getParent() != lca) {
parent2 = parent2.getParent();
}
- for (TransitionTarget tt : lca.getChildren()) {
- State s = (State) tt;
- if (s == parent1) {
- return 1;
- } else if (s == parent2) {
- return -1;
+ Collection<TransitionTarget> children = null;
+ if (lca instanceof Parallel) {
+ children = ((Parallel) lca).getChildren();
+ }
+ if (children != null) {
+ for (TransitionTarget tt : children) {
+ if (tt == parent1) {
+ return 1;
+ } else if (tt == parent2) {
+ return -1;
+ }
}
}
}
Modified: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/semantics/TransitionTargetComparatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/semantics/TransitionTargetComparatorTest.java?rev=1539916&r1=1539915&r2=1539916&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/semantics/TransitionTargetComparatorTest.java (original)
+++ commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/semantics/TransitionTargetComparatorTest.java Fri Nov 8 03:53:58 2013
@@ -108,4 +108,28 @@ public class TransitionTargetComparatorT
Assert.assertEquals(1, comparator.compare(target1, target2));
}
+
+ @Test
+ public void testComparatorSiblingParallels() {
+ Parallel ancestor = new Parallel();
+
+ State target1 = new State();
+ Parallel parent1 = new Parallel();
+ target1.setParent(parent1);
+ parent1.addChild(target1);
+
+ State target2 = new State();
+ Parallel parent2 = new Parallel();
+ target1.setParent(parent2);
+ parent1.addChild(target2);
+
+ parent1.setParent(ancestor);
+ ancestor.addChild(parent1);
+ parent2.setParent(ancestor);
+ ancestor.addChild(parent2);
+
+ Assert.assertEquals(1, comparator.compare(parent1, parent2));
+ Assert.assertEquals(-1, comparator.compare(parent2, parent1));
+ }
+
}