diff --git a/Jenkinsfile.groovy b/Jenkinsfile.groovy index ef372a4..e799493 100644 --- a/Jenkinsfile.groovy +++ b/Jenkinsfile.groovy @@ -15,6 +15,14 @@ pipeline { error("Build failed because SNAPSHOT version") } } + stage('Static Code Analysis') { + steps { + withMaven(maven: 'maven 3.5.2', jdk: 'JDK 1.8') { + sh "${mvn} compile checkstyle:checkstyle pmd:pmd" + } + pmd canComputeNew: false, defaultEncoding: '', healthy: '', pattern: '', unHealthy: '' + } + } stage('Build') { parallel { stage('Java 8') { @@ -51,15 +59,10 @@ pipeline { archiveArtifacts '**/target/*.jar' } } - stage('Quality') { - steps { - pmd canComputeNew: false, defaultEncoding: '', healthy: '', pattern: '', unHealthy: '' - } - } stage('Deploy') { when { expression { (env.GIT_BRANCH == 'master') } } steps { - withMaven(maven: 'maven 3.5.2', jdk: 'JDK 9') { + withMaven(maven: 'maven 3.5.2', jdk: 'JDK 1.8') { sh "${mvn} deploy --activate-profiles release -DskipTests=true" } } diff --git a/pom.xml b/pom.xml index d71e264..e4e2b9c 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 3.9.1 4.3.0 2.10 - 0.6.1 + 0.7.1 2.20.1 2.20.1 1.16.20 diff --git a/src/main/java/net/kemitix/conditional/Action.java b/src/main/java/net/kemitix/conditional/Action.java new file mode 100644 index 0000000..67508e5 --- /dev/null +++ b/src/main/java/net/kemitix/conditional/Action.java @@ -0,0 +1,36 @@ +/** + * The MIT License (MIT) + * + * Copyright (c) 2017 Paul Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies + * or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE + * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package net.kemitix.conditional; + +/** + * An action to perform in a clause when a {@link Condition} is met. + * + * @author Paul Campbell (pcampbell@kemitix.net) + */ +@FunctionalInterface +public interface Action { + + /** + * The action to perform. + */ + void perform(); +} diff --git a/src/main/java/net/kemitix/conditional/Condition.java b/src/main/java/net/kemitix/conditional/Condition.java index 7129574..000268c 100644 --- a/src/main/java/net/kemitix/conditional/Condition.java +++ b/src/main/java/net/kemitix/conditional/Condition.java @@ -78,6 +78,7 @@ public interface Condition { * * @return the Condition */ + @SuppressWarnings("PMD.ShortMethodName") Condition or(boolean clause); /** @@ -98,14 +99,14 @@ public interface Condition { * * @return the Condition */ - Condition then(Runnable response); + Condition then(Action response); /** * Perform this response if the {@code Condition} is {@code false}. * * @param response the response to perform */ - void otherwise(Runnable response); + void otherwise(Action response); /** * Create a new {@code Condition} for the clause as a continuation to an existing {@code Condition}. diff --git a/src/main/java/net/kemitix/conditional/FalseCondition.java b/src/main/java/net/kemitix/conditional/FalseCondition.java index 165a649..07881c7 100644 --- a/src/main/java/net/kemitix/conditional/FalseCondition.java +++ b/src/main/java/net/kemitix/conditional/FalseCondition.java @@ -28,7 +28,7 @@ package net.kemitix.conditional; */ final class FalseCondition implements Condition { - protected static final Condition FALSE = new net.kemitix.conditional.FalseCondition(); + public static final Condition FALSE = new net.kemitix.conditional.FalseCondition(); @Override public Condition and(final boolean clause) { @@ -36,18 +36,19 @@ final class FalseCondition implements Condition { } @Override + @SuppressWarnings("PMD.ShortMethodName") public Condition or(final boolean secondClause) { return Condition.where(secondClause); } @Override - public Condition then(final Runnable response) { + public Condition then(final Action response) { return FALSE; } @Override - public void otherwise(final Runnable response) { - response.run(); + public void otherwise(final Action response) { + response.perform(); } } diff --git a/src/main/java/net/kemitix/conditional/FalseValueClause.java b/src/main/java/net/kemitix/conditional/FalseValueClause.java index e0143e0..672d285 100644 --- a/src/main/java/net/kemitix/conditional/FalseValueClause.java +++ b/src/main/java/net/kemitix/conditional/FalseValueClause.java @@ -45,6 +45,7 @@ class FalseValueClause implements Value.ValueClause { } @Override + @SuppressWarnings("PMD.ShortMethodName") public Value.ValueClause or(final boolean clause) { return Value.where(clause); } diff --git a/src/main/java/net/kemitix/conditional/TrueCondition.java b/src/main/java/net/kemitix/conditional/TrueCondition.java index d2132d1..06f041b 100644 --- a/src/main/java/net/kemitix/conditional/TrueCondition.java +++ b/src/main/java/net/kemitix/conditional/TrueCondition.java @@ -28,7 +28,7 @@ package net.kemitix.conditional; */ final class TrueCondition implements Condition { - protected static final Condition TRUE = new net.kemitix.conditional.TrueCondition(); + public static final Condition TRUE = new net.kemitix.conditional.TrueCondition(); @Override public Condition and(final boolean clause) { @@ -36,18 +36,19 @@ final class TrueCondition implements Condition { } @Override + @SuppressWarnings("PMD.ShortMethodName") public Condition or(final boolean secondClause) { return TRUE; } @Override - public Condition then(final Runnable response) { - response.run(); + public Condition then(final Action response) { + response.perform(); return TRUE; } @Override - public void otherwise(final Runnable response) { + public void otherwise(final Action response) { // do nothing } diff --git a/src/main/java/net/kemitix/conditional/TrueValueClause.java b/src/main/java/net/kemitix/conditional/TrueValueClause.java index c98f2be..9d3fbcc 100644 --- a/src/main/java/net/kemitix/conditional/TrueValueClause.java +++ b/src/main/java/net/kemitix/conditional/TrueValueClause.java @@ -47,6 +47,7 @@ class TrueValueClause implements Value.ValueClause { } @Override + @SuppressWarnings("PMD.ShortMethodName") public Value.ValueClause or(final boolean clause) { return this; } @@ -57,7 +58,7 @@ class TrueValueClause implements Value.ValueClause { @RequiredArgsConstructor private class TrueValueSupplier implements ValueSupplier { - private final Supplier valueSupplier; + private final transient Supplier valueSupplier; @Override public T otherwise(final Supplier falseSupplier) { diff --git a/src/main/java/net/kemitix/conditional/Value.java b/src/main/java/net/kemitix/conditional/Value.java index 6345564..9b1c3b6 100644 --- a/src/main/java/net/kemitix/conditional/Value.java +++ b/src/main/java/net/kemitix/conditional/Value.java @@ -41,6 +41,7 @@ public interface Value { * * @return the value from either the trueSupplier or the falseSupplier */ + @SuppressWarnings("PMD.LawOfDemeter") static T where( boolean clause, Supplier trueSupplier, @@ -123,6 +124,7 @@ public interface Value { * * @return a true or false value clause */ + @SuppressWarnings("PMD.ShortMethodName") ValueClause or(boolean clause); /** diff --git a/src/test/java/net/kemitix/conditional/ConditionalTest.java b/src/test/java/net/kemitix/conditional/ConditionalTest.java index 0093cd4..525c534 100644 --- a/src/test/java/net/kemitix/conditional/ConditionalTest.java +++ b/src/test/java/net/kemitix/conditional/ConditionalTest.java @@ -10,9 +10,9 @@ import static org.assertj.core.api.Assertions.assertThat; */ public class ConditionalTest { - private Runnable thenResponse; + private Action thenResponse; - private Runnable otherwiseResponse; + private Action otherwiseResponse; private boolean thenFlag;