From 344ac678b57a5634bd3f69bd5c4f4c0a3674fd04 Mon Sep 17 00:00:00 2001
From: Nelson Tavares de Sousa <ntd@informatik.uni-kiel.de>
Date: Fri, 17 Apr 2015 15:49:07 +0200
Subject: [PATCH] refactored visitor and adopted changes to all classes; made
 the exception test more restrictive

---
 src/main/java/teetime/framework/Analysis.java         |  8 +-------
 src/main/java/teetime/framework/IStageVisitor.java    |  2 +-
 .../java/teetime/framework/IntraStageVisitor.java     |  2 +-
 src/main/java/teetime/framework/Traversor.java        | 11 +++--------
 src/test/java/teetime/framework/TraversorTest.java    |  2 +-
 .../exceptionHandling/ExceptionHandlingTest.java      |  5 ++++-
 6 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java
index b71cfd55..dfbc4bbb 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 2b27c598..e6ff08c7 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 fb903e06..b3dba395 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 dd873d1b..f81aaefd 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 197a66d2..209fb6c8 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 0b2d44c1..e50b59f6 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);
 		}
 	}
 }
-- 
GitLab