diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java index b71cfd5552aec86300e196ab2e3e31599a1e3329..dfbc4bbb472f3cce5b734574f73556ab83ea7477 100644 --- a/src/main/java/teetime/framework/Analysis.java +++ b/src/main/java/teetime/framework/Analysis.java @@ -17,7 +17,6 @@ package teetime.framework; import java.lang.Thread.UncaughtExceptionHandler; import java.util.Collection; -import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -162,8 +161,6 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught private Thread createThread(final AbstractExceptionListener newListener, final Set<Stage> intraStages, final Stage stage, final AbstractRunnableStage runnable) { final Thread thread = new Thread(runnable); - stage.setExceptionHandler(newListener); - stage.setOwningThread(thread); for (Stage intraStage : intraStages) { intraStage.setOwningThread(thread); intraStage.setExceptionHandler(newListener); @@ -324,10 +321,7 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught private Set<Stage> traverseIntraStages(final Stage stage) { final Traversor traversor = new Traversor(new IntraStageVisitor()); - if (stage.getOutputPorts().length == 0) { - return new HashSet<Stage>(); - } - traversor.traverse(stage, stage.getOutputPorts()[0].getPipe()); + traversor.traverse(stage); return traversor.getVisitedStage(); } } diff --git a/src/main/java/teetime/framework/IStageVisitor.java b/src/main/java/teetime/framework/IStageVisitor.java index 2b27c598cbed948ff987fa8783f4c416dea14d1e..e6ff08c7b3d9a0da7d3510e1310af190dd6a508d 100644 --- a/src/main/java/teetime/framework/IStageVisitor.java +++ b/src/main/java/teetime/framework/IStageVisitor.java @@ -23,6 +23,6 @@ public interface IStageVisitor { CONTINUE, STOP } - VisitorBehavior visit(Stage stage, IPipe inputPipe); + VisitorBehavior visit(IPipe inputPipe); } diff --git a/src/main/java/teetime/framework/IntraStageVisitor.java b/src/main/java/teetime/framework/IntraStageVisitor.java index fb903e06262dc16d5b18dc8bad48c7697fb4dcf3..b3dba3954ad6bbef4529a5dda4e5d2495aa6a716 100644 --- a/src/main/java/teetime/framework/IntraStageVisitor.java +++ b/src/main/java/teetime/framework/IntraStageVisitor.java @@ -22,7 +22,7 @@ public class IntraStageVisitor implements IStageVisitor { public IntraStageVisitor() {} @Override - public VisitorBehavior visit(final Stage stage, final IPipe inputPipe) { + public VisitorBehavior visit(final IPipe inputPipe) { if (inputPipe instanceof AbstractIntraThreadPipe) { return VisitorBehavior.CONTINUE; } diff --git a/src/main/java/teetime/framework/Traversor.java b/src/main/java/teetime/framework/Traversor.java index dd873d1b1711275f09c5a0191880246c88783deb..f81aaefda3988d82ec88ac3f9ba85d45b1b7fe7a 100644 --- a/src/main/java/teetime/framework/Traversor.java +++ b/src/main/java/teetime/framework/Traversor.java @@ -30,12 +30,7 @@ public class Traversor { this.stageVisitor = stageVisitor; } - public void traverse(final Stage stage, final IPipe inputPipe) { - - VisitorBehavior visitorBehavior = stageVisitor.visit(stage, inputPipe); - if (visitorBehavior == VisitorBehavior.STOP) { - return; - } + public void traverse(final Stage stage) { if (!visitedStage.add(stage)) { return; @@ -44,9 +39,9 @@ public class Traversor { OutputPort<?>[] outputPorts = stage.getOutputPorts(); for (OutputPort<?> outputPort : outputPorts) { IPipe pipe = outputPort.getPipe(); - if (null != pipe) { + if (null != pipe && stageVisitor.visit(pipe) == VisitorBehavior.CONTINUE) { Stage owningStage = pipe.getTargetPort().getOwningStage(); - traverse(owningStage, pipe); // recursive call + traverse(owningStage); // recursive call } } } diff --git a/src/test/java/teetime/framework/TraversorTest.java b/src/test/java/teetime/framework/TraversorTest.java index 197a66d2483bdf305205f961fa2f452d19ac4ebe..209fb6c81a5a0e0e383345ccee82ae9510a193bc 100644 --- a/src/test/java/teetime/framework/TraversorTest.java +++ b/src/test/java/teetime/framework/TraversorTest.java @@ -28,7 +28,7 @@ public class TraversorTest { @Test public void traverse() { TestConfiguration tc = new TestConfiguration(); - traversor.traverse(tc.init, tc.init.getOutputPort().getPipe()); + traversor.traverse(tc.init); Set<Stage> comparingSet = new HashSet<Stage>(); comparingSet.add(tc.init); comparingSet.add(tc.f2b); diff --git a/src/test/java/teetime/framework/exceptionHandling/ExceptionHandlingTest.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionHandlingTest.java index 0b2d44c12bda0c0c2d6e024de7a7a0330b933e98..e50b59f6dba08bde949f104db58aac364cf084f9 100644 --- a/src/test/java/teetime/framework/exceptionHandling/ExceptionHandlingTest.java +++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionHandlingTest.java @@ -18,6 +18,7 @@ package teetime.framework.exceptionHandling; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import org.junit.Test; @@ -52,12 +53,14 @@ public class ExceptionHandlingTest { @Test public void forAFewTimes() { for (int i = 0; i < 100; i++) { + boolean exceptionArised = false; try { exceptionPassingAndTermination(); terminatesAllStages(); } catch (AnalysisException e) { - // Correct behavior + exceptionArised = true; } + assertTrue(exceptionArised); } } }