From b12b1521e436db98dd804df115de5609ba3c84f2 Mon Sep 17 00:00:00 2001
From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de>
Date: Tue, 2 Feb 2016 13:42:13 +0100
Subject: [PATCH] pmd fixes, disabled one custom rule and made Configuration
 not abstract

---
 conf/quality-config/pmd-ruleset.xml           |  4 ++-
 .../java/teetime/framework/Configuration.java | 16 ++++-----
 .../java/teetime/framework/Execution.java     |  4 +--
 .../framework/IntraStageCollector.java        |  2 +-
 .../framework/RunnableConsumerStage.java      |  3 +-
 .../java/teetime/framework/TeeTimeThread.java |  8 +++--
 .../java/teetime/framework/ThreadService.java | 35 +++++++++----------
 7 files changed, 38 insertions(+), 34 deletions(-)

diff --git a/conf/quality-config/pmd-ruleset.xml b/conf/quality-config/pmd-ruleset.xml
index 37662e82..cef948f1 100644
--- a/conf/quality-config/pmd-ruleset.xml
+++ b/conf/quality-config/pmd-ruleset.xml
@@ -100,7 +100,9 @@
 		<exclude name="SimplifyStartsWith" />
 	</rule>
 
-	<rule ref="rulesets/chw/basic.xml" />
+	<rule ref="rulesets/chw/basic.xml">
+		<exclude name="NonHeaderCommentSize"/>
+	</rule>
 
 <!-- 	<rule ref="rulesets/chw/basic.xml/NonHeaderCommentSize"> -->
 <!-- 		<properties> -->
diff --git a/src/main/java/teetime/framework/Configuration.java b/src/main/java/teetime/framework/Configuration.java
index dc3d9624..05e3c2b9 100644
--- a/src/main/java/teetime/framework/Configuration.java
+++ b/src/main/java/teetime/framework/Configuration.java
@@ -26,7 +26,7 @@ import teetime.framework.exceptionHandling.TerminatingExceptionListenerFactory;
  * @since 2.0
  *
  */
-public abstract class Configuration extends AbstractCompositeStage {
+public class Configuration extends AbstractCompositeStage {
 
 	private final AbstractExceptionListenerFactory<?> factory;
 	private final ConfigurationContext context;
@@ -35,11 +35,11 @@ public abstract class Configuration extends AbstractCompositeStage {
 	private boolean executed;
 	private AbstractStage startStage;
 
-	protected Configuration() {
+	public Configuration() {
 		this(new TerminatingExceptionListenerFactory());
 	}
 
-	protected Configuration(final AbstractExceptionListenerFactory<?> factory) {
+	public Configuration(final AbstractExceptionListenerFactory<?> factory) {
 		this.factory = factory;
 		this.context = new ConfigurationContext(this);
 	}
@@ -52,15 +52,15 @@ public abstract class Configuration extends AbstractCompositeStage {
 		this.initialized = executed;
 	}
 
-	public boolean isExecuted() {
+	boolean isExecuted() {
 		return executed;
 	}
 
-	public void setExecuted(final boolean executed) {
+	void setExecuted(final boolean executed) {
 		this.executed = executed;
 	}
 
-	public AbstractExceptionListenerFactory<?> getFactory() {
+	AbstractExceptionListenerFactory<?> getFactory() {
 		return factory;
 	}
 
@@ -70,12 +70,12 @@ public abstract class Configuration extends AbstractCompositeStage {
 	 * @param pipe
 	 *            A custom pipe instance
 	 */
-	protected void registerCustomPipe(final AbstractPipe<?> pipe) {
+	public void registerCustomPipe(final AbstractPipe<?> pipe) {
 		startStage = pipe.getSourcePort().getOwningStage(); // memorize an arbitrary stage as starting point for traversing
 	}
 
 	@Override
-	protected <T> void connectPorts(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort, final int capacity) {
+	public <T> void connectPorts(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort, final int capacity) {
 		startStage = sourcePort.getOwningStage(); // memorize an arbitrary stage as starting point for traversing
 		super.connectPorts(sourcePort, targetPort, capacity);
 	}
diff --git a/src/main/java/teetime/framework/Execution.java b/src/main/java/teetime/framework/Execution.java
index 7eb7ffa7..c2c8d2d2 100644
--- a/src/main/java/teetime/framework/Execution.java
+++ b/src/main/java/teetime/framework/Execution.java
@@ -87,7 +87,7 @@ public final class Execution<T extends Configuration> {
 			// // portConnectionValidator.validate(stage);
 			// }
 
-			final ValidatingSignal validatingSignal = new ValidatingSignal();
+			final ValidatingSignal validatingSignal = new ValidatingSignal(); // NOPMD we need a new instance every iteration
 			stage.onSignal(validatingSignal, null);
 			if (validatingSignal.getInvalidPortConnections().size() > 0) {
 				throw new AnalysisNotValidException(validatingSignal.getInvalidPortConnections());
@@ -99,7 +99,7 @@ public final class Execution<T extends Configuration> {
 	 * This initializes the analysis and needs to be run right before starting it.
 	 *
 	 */
-	private final void init() {
+	private void init() {
 		configurationContext.initializeServices();
 	}
 
diff --git a/src/main/java/teetime/framework/IntraStageCollector.java b/src/main/java/teetime/framework/IntraStageCollector.java
index 2b8680b6..fbc799ba 100644
--- a/src/main/java/teetime/framework/IntraStageCollector.java
+++ b/src/main/java/teetime/framework/IntraStageCollector.java
@@ -31,7 +31,7 @@ public class IntraStageCollector implements ITraverserVisitor {
 	public VisitorBehavior visit(final AbstractStage stage) {
 		if (stage.equals(startStage) || stage.getOwningThread() == null /* before execution */
 				|| stage.getOwningThread() == startStage.getOwningThread() /* while execution */) {
-			return VisitorBehavior.CONTINUE;
+			return VisitorBehavior.CONTINUE; // NOPMD two return stmts make the code clearer to understand
 		}
 		return VisitorBehavior.STOP;
 	}
diff --git a/src/main/java/teetime/framework/RunnableConsumerStage.java b/src/main/java/teetime/framework/RunnableConsumerStage.java
index 366adbfa..5d3519ac 100644
--- a/src/main/java/teetime/framework/RunnableConsumerStage.java
+++ b/src/main/java/teetime/framework/RunnableConsumerStage.java
@@ -52,6 +52,7 @@ final class RunnableConsumerStage extends AbstractRunnableStage {
 		for (InputPort<?> inputPort : stage.getInputPorts()) {
 			if (inputPort.isClosed()) {
 				// stage.removeDynamicPort(inputPort);
+				break;
 			} else {
 				return;
 			}
@@ -62,7 +63,7 @@ final class RunnableConsumerStage extends AbstractRunnableStage {
 
 	@Override
 	protected void afterStageExecution() {
-		final ISignal signal = new TerminatingSignal();
+		final ISignal signal = new TerminatingSignal(); // NOPMD DU caused by loop
 		for (InputPort<?> inputPort : stage.getInputPorts()) {
 			stage.onSignal(signal, inputPort);
 		}
diff --git a/src/main/java/teetime/framework/TeeTimeThread.java b/src/main/java/teetime/framework/TeeTimeThread.java
index 86b38f96..f291677b 100644
--- a/src/main/java/teetime/framework/TeeTimeThread.java
+++ b/src/main/java/teetime/framework/TeeTimeThread.java
@@ -31,8 +31,10 @@ public class TeeTimeThread extends Thread {
 	}
 
 	@Override
-	public synchronized void start() {
-		runnable.stage.getOwningContext().getThreadService().getRunnableCounter().inc();
-		super.start();
+	public void start() {
+		synchronized (this) {
+			runnable.stage.getOwningContext().getThreadService().getRunnableCounter().inc();
+			super.start();
+		}
 	}
 }
diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index 02189899..0e7de952 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -15,7 +15,6 @@
  */
 package teetime.framework;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -35,7 +34,7 @@ import teetime.util.framework.concurrent.SignalingCounter;
  *
  * @since 2.0
  */
-class ThreadService extends AbstractService<ThreadService> {
+class ThreadService extends AbstractService<ThreadService> { // NOPMD
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(ThreadService.class);
 
@@ -172,25 +171,25 @@ class ThreadService extends AbstractService<ThreadService> {
 			thread.interrupt();
 		}
 
-		List<Exception> exceptions = collectExceptions();
-		if (!exceptions.isEmpty()) {
-			// throw new ExecutionException(exceptions);
-		}
-	}
-
-	// TODO impl throw exception
-	private List<Exception> collectExceptions() {
-		// Collection<ThreadThrowableContainer> exceptions = new ConcurrentLinkedQueue<ThreadThrowableContainer>();
-		List<Exception> exceptions = new ArrayList<Exception>();
-
-		// for (Stage stage : threadableStages.keySet()) {
-		// List<Exception> stageExceptions = stage.exceptionListener.getExceptions();
-		// exceptions.addAll(stageExceptions);
+		// List<Exception> exceptions = collectExceptions();
+		// if (!exceptions.isEmpty()) {
+		// throw new ExecutionException(exceptions);
 		// }
-
-		return exceptions;
 	}
 
+	// TODO impl throw exception... see line 175
+	// private List<Exception> collectExceptions() {
+	// // Collection<ThreadThrowableContainer> exceptions = new ConcurrentLinkedQueue<ThreadThrowableContainer>();
+	// List<Exception> exceptions = new ArrayList<Exception>();
+	//
+	// // for (Stage stage : threadableStages.keySet()) {
+	// // List<Exception> stageExceptions = stage.exceptionListener.getExceptions();
+	// // exceptions.addAll(stageExceptions);
+	// // }
+	//
+	// return exceptions;
+	// }
+
 	Set<AbstractStage> getThreadableStages() {
 		return threadableStages;
 	}
-- 
GitLab