diff --git a/.gitignore b/.gitignore index 7933d63..0ba5348 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ *.ear *.zip +pom.xml.versionsBackup + # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/builder/pom.xml b/builder/pom.xml index 3e57205..9bf41e3 100644 --- a/builder/pom.xml +++ b/builder/pom.xml @@ -3,6 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + + 1.16.18 + net.kemitix @@ -32,6 +35,12 @@ 2016 + + org.projectlombok + lombok + ${lombok.version} + provided + org.springframework.boot spring-boot-starter @@ -78,6 +87,17 @@ + + io.repaint.maven + tiles-maven-plugin + ${tiles-maven-plugin.version} + true + + + net.kemitix.tiles:all-tiles:${kemitix-tiles.version} + + + org.springframework.boot spring-boot-maven-plugin diff --git a/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/CheckstyleWriter.java b/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/CheckstyleWriter.java index 95a5a04..5c9e137 100644 --- a/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/CheckstyleWriter.java +++ b/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/CheckstyleWriter.java @@ -22,7 +22,6 @@ package net.kemitix.checkstyle.ruleset.builder; import com.speedment.common.mapstream.MapStream; -import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -58,13 +57,13 @@ class CheckstyleWriter implements CommandLineRunner { private final RuleClassLocator ruleClassLocator; @Override - public void run(final String... args) throws Exception { + public void run(final String... args) { Stream.of(RuleLevel.values()) .filter(level -> !level.equals(RuleLevel.UNSPECIFIED)) .forEach(this::writeCheckstyleFile); } - private void writeCheckstyleFile(@NonNull final RuleLevel ruleLevel) { + private void writeCheckstyleFile(final RuleLevel ruleLevel) { val xmlFile = outputProperties.getDirectory() .resolve(outputProperties.getRulesetFiles() .get(ruleLevel)); diff --git a/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/DefaultRuleClassLocator.java b/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/DefaultRuleClassLocator.java index 6a91c6b..0df04a6 100644 --- a/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/DefaultRuleClassLocator.java +++ b/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/DefaultRuleClassLocator.java @@ -28,6 +28,7 @@ import javax.annotation.PostConstruct; import java.util.AbstractMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -62,6 +63,7 @@ public class DefaultRuleClassLocator implements RuleClassLocator { } private String getCanonicalClassName(final RuleSource source, final String name) { + Objects.requireNonNull(checkClasses, "init() method not called"); return checkClasses.get(source) .stream() .sorted() diff --git a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/CheckstyleWriterTest.java b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/CheckstyleWriterTest.java index 9f057ff..a5ca9e0 100644 --- a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/CheckstyleWriterTest.java +++ b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/CheckstyleWriterTest.java @@ -7,8 +7,6 @@ import org.junit.Before; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -24,6 +22,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; /** * Tests for {@link CheckstyleWriter}. @@ -58,12 +57,10 @@ public class CheckstyleWriterTest { private Path outputDirectory; - @Mock - private RuleClassLocator ruleClassLocator; + private RuleClassLocator ruleClassLocator = mock(RuleClassLocator.class); @Before public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); ruleName = "RegexpOnFilename"; ruleClassname = "com.puppycrawl.tools.checkstyle.checks.regexp.RegexpOnFilenameCheck"; outputProperties = new OutputProperties(); @@ -90,7 +87,7 @@ public class CheckstyleWriterTest { given(ruleClassLocator.apply(any())).willReturn(ruleClassname); } - private Map.Entry getOutputFile(final RuleLevel level) throws IOException { + private Map.Entry getOutputFile(final RuleLevel level) { final String xmlFile = String.format("checkstyle-%s.xml", level.toString()); return new AbstractMap.SimpleImmutableEntry<>(level, xmlFile); } @@ -202,7 +199,7 @@ public class CheckstyleWriterTest { // throw RTE if template not found @Test - public void throwRteIfTemplateNotFound() throws Exception { + public void throwRteIfTemplateNotFound() { //given templateProperties.setCheckstyleXml(Paths.get("garbage")); //when @@ -214,7 +211,7 @@ public class CheckstyleWriterTest { // throw RTE if error writing file @Test - public void throwRteIfErrorWritingFile() throws Exception { + public void throwRteIfErrorWritingFile() { //given final String imaginary = String.join(FILE_SEPARATOR, "", "..", "imaginary"); outputProperties.setDirectory(Paths.get(imaginary)); diff --git a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/DefaultRuleClassLocatorTest.java b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/DefaultRuleClassLocatorTest.java index e8ea62a..a342ae6 100644 --- a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/DefaultRuleClassLocatorTest.java +++ b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/DefaultRuleClassLocatorTest.java @@ -2,14 +2,15 @@ package net.kemitix.checkstyle.ruleset.builder; import org.junit.Before; import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import java.util.Collections; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatNullPointerException; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; /** * Tests for {@link DefaultRuleClassLocator}. @@ -20,17 +21,15 @@ public class DefaultRuleClassLocatorTest { private DefaultRuleClassLocator subject; - @Mock - private PackageScanner packageScanner; + private PackageScanner packageScanner = mock(PackageScanner.class); @Before public void setUp() { - MockitoAnnotations.initMocks(this); subject = new DefaultRuleClassLocator(packageScanner); } @Test - public void canLookupRule() { + public void canLookupRuleWithClassNameEndingInCheck() { //given final String rulename = "RegexpOnFilename"; final String expected = "com.puppycrawl.tools.checkstyle.checks.regexp.RegexpOnFilenameCheck"; @@ -46,6 +45,47 @@ public class DefaultRuleClassLocatorTest { assertThat(result).isEqualTo(expected); } + @Test + public void canLookupRuleWithClassNameMatchingRuleName() { + //given + final String rulename = "RegexpOnFilename"; + final String expected = "com.puppycrawl.tools.checkstyle.checks.regexp.RegexpOnFilename"; + final List checkstyleClasses = Collections.singletonList(expected); + final List sevntuClasses = Collections.emptyList(); + given(packageScanner.apply(RuleSource.CHECKSTYLE)).willReturn(checkstyleClasses.stream()); + given(packageScanner.apply(RuleSource.SEVNTU)).willReturn(sevntuClasses.stream()); + subject.init(); + final Rule rule = createCheckstyleRule(rulename); + //when + final String result = subject.apply(rule); + //then + assertThat(result).isEqualTo(expected); + } + + @Test + public void throwsExceptionWhenCheckstyleClassNotFound() { + //given + final String rulename = "RegexpOnFilename"; + final String expected = "com.puppycrawl.tools.checkstyle.checks.regexp.RegexpOnFilenameNoMatch"; + final List checkstyleClasses = Collections.singletonList(expected); + final List sevntuClasses = Collections.emptyList(); + given(packageScanner.apply(RuleSource.CHECKSTYLE)).willReturn(checkstyleClasses.stream()); + given(packageScanner.apply(RuleSource.SEVNTU)).willReturn(sevntuClasses.stream()); + subject.init(); + final Rule rule = createCheckstyleRule(rulename); + //then + assertThatThrownBy(() -> subject.apply(rule)) + .isInstanceOf(CheckstyleClassNotFoundException.class) + .hasMessage("No class found to implement RegexpOnFilename"); + } + + @Test + public void throwsNullPointerExceptionWhenInitNotCalled() { + assertThatNullPointerException() + .isThrownBy(() -> subject.apply(new Rule())) + .withMessage("init() method not called"); + } + private Rule createCheckstyleRule(final String rulename) { final Rule rule = new Rule(); rule.setSource(RuleSource.CHECKSTYLE); diff --git a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/RuleLevelTest.java b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/RuleLevelTest.java new file mode 100644 index 0000000..fce27f6 --- /dev/null +++ b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/RuleLevelTest.java @@ -0,0 +1,25 @@ +package net.kemitix.checkstyle.ruleset.builder; + +import org.junit.Test; + +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RuleLevelTest { + + private final String[] ruleLevelStrings = + {"DISABLED", "LAYOUT", "NAMING", "JAVADOC", "TWEAKS", "COMPLEXITY", "UNSPECIFIED"}; + + @Test + public void valuesToString() { + assertThat(Stream.of(RuleLevel.values()) + .map(RuleLevel::toString)).containsExactly(ruleLevelStrings); + } + + @Test + public void stringValueOf() { + assertThat(Stream.of(ruleLevelStrings) + .map(RuleLevel::valueOf)).containsExactly(RuleLevel.values()); + } +} diff --git a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/RulesPropertiesTest.java b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/RulesPropertiesTest.java index 119ce11..1dd4136 100644 --- a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/RulesPropertiesTest.java +++ b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/RulesPropertiesTest.java @@ -15,16 +15,16 @@ public class RulesPropertiesTest { private RulesProperties rulesProperties; @Before - public void setUp() throws Exception { + public void setUp() { rulesProperties = new RulesProperties(); } @Test - public void getEmpty() throws Exception { + public void getEmpty() { assertThat(rulesProperties.getRules()).isEmpty(); } @Test - public void getContent() throws Exception { + public void getContent() { //given final Rule rule = new Rule(); //when diff --git a/plugin/pom.xml b/plugin/pom.xml deleted file mode 100644 index 78fc434..0000000 --- a/plugin/pom.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - 4.0.0 - - - net.kemitix - kemitix-checkstyle-ruleset-parent - 3.4.0-SNAPSHOT - - - kemitix-checkstyle-ruleset-maven-plugin - maven-plugin - Kemitix Checkstyle :: Ruleset :: Plugin - Checkstyle configuration using the Kemitix Checkstyle Ruleset - - - 3.5.0 - 3.5 - 3.5 - 2.3.0 - 1.0.0 - - - - - org.apache.maven - maven-plugin-api - ${maven.version} - - - org.apache.maven - maven-core - ${maven.version} - - - org.apache.maven.plugin-tools - maven-plugin-annotations - ${maven-plugin-annotations.version} - provided - - - org.twdata.maven - mojo-executor - ${mojo-executor.version} - - - me.andrz - map-builder - ${map-builder.version} - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.apache.maven.plugins - maven-plugin-plugin - ${maven-plugin-plugin.version} - - - - diff --git a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckConfiguration.java b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckConfiguration.java deleted file mode 100644 index 32572db..0000000 --- a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckConfiguration.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * 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.checkstyle.ruleset.plugin; - -import lombok.Builder; -import lombok.Getter; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.execution.MavenSession; -import org.apache.maven.plugin.BuildPluginManager; -import org.apache.maven.project.MavenProject; - -/** - * Configuration for performing a Checkstyle Check. - * - * @author Paul Campbell (pcampbell@kemitix.net) - */ -@Getter -@Builder -class CheckConfiguration { - - private MavenProject mavenProject; - - private MavenSession mavenSession; - - private ArtifactRepository artifactRepository; - - private BuildPluginManager pluginManager; - - private String rulesetVersion; - - private String sourceDirectory; - - private String level; -} diff --git a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckMojo.java b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckMojo.java deleted file mode 100644 index 07f2d0c..0000000 --- a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckMojo.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * 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.checkstyle.ruleset.plugin; - -import lombok.Setter; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.execution.MavenSession; -import org.apache.maven.model.Build; -import org.apache.maven.model.Plugin; -import org.apache.maven.model.io.xpp3.MavenXpp3Reader; -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.BuildPluginManager; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugins.annotations.Component; -import org.apache.maven.plugins.annotations.LifecyclePhase; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.project.MavenProject; - -/** - * Runs the Checkstyle Maven Plugin with the Kemitix Checkstyle Ruleset. - * - * @author Paul Campbell (pcampbell@kemitix.net) - */ -@Mojo(name = "check", defaultPhase = LifecyclePhase.VALIDATE) -public class CheckMojo extends AbstractMojo { - - private static final String KEMITIX_GROUPID = "net.kemitix"; - - private static final String KEMITIX_ARTIFACTID = "kemitix-checkstyle-ruleset"; - - @Setter - private CheckstyleExecutor checkstyleExecutor = - new DefaultCheckstyleExecutor(new DefaultPluginExecutor(), new MavenXpp3Reader()); - - @Setter - @Parameter(defaultValue = "${project}", readonly = true) - private MavenProject mavenProject; - - @Setter - @Parameter(defaultValue = "${session}", readonly = true) - private MavenSession mavenSession; - - @Setter - @Parameter(defaultValue = "${localRepository}", readonly = true, required = true) - private ArtifactRepository artifactRepository; - - @Parameter(name = "level", defaultValue = "5-complexity", readonly = true) - private String level = "5-complexity"; - - @Setter - @Component - private BuildPluginManager pluginManager; - - @Override - public final void execute() throws MojoExecutionException, MojoFailureException { - checkstyleExecutor.setLog(getLog()); - CheckConfiguration config = getCheckConfiguration(); - checkstyleExecutor.performCheck(config); - } - - private CheckConfiguration getCheckConfiguration() { - final Plugin rulesetPlugin = getRulesetPlugin(); - final Build build = mavenProject.getBuild(); - return CheckConfiguration.builder() - .mavenProject(mavenProject) - .mavenSession(mavenSession) - .artifactRepository(artifactRepository) - .pluginManager(pluginManager) - .rulesetVersion(rulesetPlugin.getVersion()) - .sourceDirectory(build.getSourceDirectory()) - .level(level) - .build(); - } - - private Plugin getRulesetPlugin() { - return mavenProject.getPlugin(KEMITIX_GROUPID + ":" + KEMITIX_ARTIFACTID + "-maven-plugin"); - } -} diff --git a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckstyleExecutor.java b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckstyleExecutor.java deleted file mode 100644 index d40db6a..0000000 --- a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/CheckstyleExecutor.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * 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.checkstyle.ruleset.plugin; - -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugin.logging.Log; - -/** - * Executes the Checkstyle plugin. - * - * @author Paul Campbell (pcampbell@kemitix.net) - */ -interface CheckstyleExecutor { - - /** - * Execute Checkstyle Check. - * - * @param configuration The Configuration - * - * @throws MojoExecutionException on execution error - * @throws MojoFailureException on execution failure - */ - void performCheck(CheckConfiguration configuration) throws MojoExecutionException, MojoFailureException; - - /** - * Set the logger to use. - * - * @param log the logger. - */ - void setLog(Log log); -} diff --git a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/DefaultCheckstyleExecutor.java b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/DefaultCheckstyleExecutor.java deleted file mode 100644 index f3f066c..0000000 --- a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/DefaultCheckstyleExecutor.java +++ /dev/null @@ -1,186 +0,0 @@ -/** - * 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.checkstyle.ruleset.plugin; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; -import lombok.val; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.DefaultArtifact; -import org.apache.maven.artifact.handler.ArtifactHandler; -import org.apache.maven.artifact.handler.DefaultArtifactHandler; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.model.Dependency; -import org.apache.maven.model.Model; -import org.apache.maven.model.Plugin; -import org.apache.maven.model.io.xpp3.MavenXpp3Reader; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugin.logging.Log; -import org.codehaus.plexus.util.xml.Xpp3Dom; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; -import org.twdata.maven.mojoexecutor.MojoExecutor; - -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.io.Reader; -import java.util.List; -import java.util.Properties; - -/** - * Default implementation of {@link CheckstyleExecutor}. - * - * @author Paul Campbell (pcampbell@kemitix.net) - */ -@SuppressWarnings("classfanoutcomplexity") -@RequiredArgsConstructor -public class DefaultCheckstyleExecutor implements CheckstyleExecutor { - - private static final String CHECKSTYLE_GROUPID = "com.puppycrawl.tools"; - - private static final String CHECKSTYLE_ARTIFACTID = "checkstyle"; - - private static final String SEVNTU_GROUPID = "com.github.sevntu-checkstyle"; - - private static final String SEVNTU_ARTIFACTID = "sevntu-checkstyle-maven-plugin"; - - private static final String KEMITIX_GROUPID = "net.kemitix"; - - private static final String KEMITIX_ARTIFACTID = "kemitix-checkstyle-ruleset"; - - private static final String APACHE_PLUGIN_GROUPID = "org.apache.maven.plugins"; - - private static final String APACHE_PLUGIN_ARTIFACTID = "maven-checkstyle-plugin"; - - private static final String CONFIG_LOCATION = "configLocation"; - - private static final String SOURCE_DIR = "sourceDirectory"; - - private static final ArtifactHandler POM_ARTIFACT_HANDLER = new DefaultArtifactHandler("pom"); - - private static final String PLUGIN_ARTIFACT_ID = KEMITIX_ARTIFACTID + "-parent"; - - private final PluginExecutor pluginExecutor; - - private final MavenXpp3Reader mavenXpp3Reader; - - @Setter - @Getter - private Log log; - - private String rulesetVersion; - - @Override - public final void performCheck(final CheckConfiguration config) - throws MojoExecutionException, MojoFailureException { - rulesetVersion = config.getRulesetVersion(); - val properties = getProperties(config.getArtifactRepository()); - - // configure - val checkstylePlugin = getPlugin(properties); - final String sourceDirectory = config.getSourceDirectory(); - final String level = config.getLevel(); - info("Ruleset: %s", level); - final String configFile = String.format("net/kemitix/checkstyle-%s.xml", level); - final Xpp3Dom configuration = pluginExecutor.configuration(pluginExecutor.element(CONFIG_LOCATION, configFile), - pluginExecutor.element(SOURCE_DIR, sourceDirectory) - ); - final MojoExecutor.ExecutionEnvironment environment = pluginExecutor.executionEnvironment(config); - - // run - pluginExecutor.executeMojo(checkstylePlugin, "check", configuration, environment); - info("Checkstyle complete"); - } - - private String getProperty(final Properties properties, final String key) { - val property = properties.getProperty(key); - debug("%s: %s", key, property); - return property; - } - - private Plugin getPlugin(final Properties properties) { - // get versions from pom.xml properties - val pluginVersion = getProperty(properties, "maven-checkstyle-plugin.version"); - val checkstyleVersion = getProperty(properties, "checkstyle.version"); - val sevntuVersion = getProperty(properties, "sevntu.version"); - info("Checkstyle %s (plugin: %s, sevntu: %s, ruleset: %s)", checkstyleVersion, - pluginVersion, sevntuVersion, rulesetVersion - ); - - // create checkstyle dependencies - val checkstyle = getCheckstyleDependency(checkstyleVersion); - val sevntu = getSevntuDependency(sevntuVersion); - val ruleset = getRulesetDependency(); - final List dependencies = pluginExecutor.dependencies(checkstyle, sevntu, ruleset); - - return pluginExecutor.plugin(APACHE_PLUGIN_GROUPID, APACHE_PLUGIN_ARTIFACTID, pluginVersion, dependencies); - } - - private Dependency getRulesetDependency() { - return pluginExecutor.dependency(KEMITIX_GROUPID, KEMITIX_ARTIFACTID, rulesetVersion); - } - - private Dependency getSevntuDependency(final String sevntuVersion) { - return pluginExecutor.dependency(SEVNTU_GROUPID, SEVNTU_ARTIFACTID, sevntuVersion); - } - - private Dependency getCheckstyleDependency(final String checkstyleVersion) { - return pluginExecutor.dependency(CHECKSTYLE_GROUPID, CHECKSTYLE_ARTIFACTID, checkstyleVersion); - } - - private Properties getProperties(final ArtifactRepository artifactRepository) throws MojoFailureException { - // load properties from the plugin pom.xml - final Artifact pluginArtifact = getPluginArtifact(artifactRepository); - try { - final File pomFile = pluginArtifact.getFile(); - return parsePomFile(pomFile).getProperties(); - } catch (XmlPullParserException | IOException e) { - throw new MojoFailureException("Can't load properties from plugin's pom.xml", e); - } - } - - private Model parsePomFile(final File pomFile) throws IOException, XmlPullParserException { - final Reader pomReader = new FileReader(pomFile); - return mavenXpp3Reader.read(pomReader); - } - - private Artifact getPluginArtifact(final ArtifactRepository artifactRepository) { - final Artifact templateArtifact = getRulesetArtifactTemplate(); - return artifactRepository.find(templateArtifact); - } - - private DefaultArtifact getRulesetArtifactTemplate() { - return new DefaultArtifact(KEMITIX_GROUPID, PLUGIN_ARTIFACT_ID, rulesetVersion, null, "", null, - POM_ARTIFACT_HANDLER - ); - } - - private void info(final String format, final Object... args) { - getLog().info(String.format(format, args)); - } - - private void debug(final String format, final Object... args) { - getLog().debug(String.format(format, args)); - } -} diff --git a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/DefaultPluginExecutor.java b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/DefaultPluginExecutor.java deleted file mode 100644 index b176c2d..0000000 --- a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/DefaultPluginExecutor.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * 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.checkstyle.ruleset.plugin; - -import org.apache.maven.model.Dependency; -import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.MojoExecutionException; -import org.codehaus.plexus.util.xml.Xpp3Dom; -import org.twdata.maven.mojoexecutor.MojoExecutor; - -import java.util.List; - -/** - * Wrapper for {@link org.twdata.maven.mojoexecutor.MojoExecutor}. - * - * @author Paul Campbell (pcampbell@kemitix.net). - */ -public final class DefaultPluginExecutor implements PluginExecutor { - - @Override - public MojoExecutor.Element element(final String key, final String value) { - return MojoExecutor.element(key, value); - } - - @Override - public Xpp3Dom configuration(final MojoExecutor.Element... elements) { - return MojoExecutor.configuration(elements); - } - - @Override - public MojoExecutor.ExecutionEnvironment executionEnvironment(final CheckConfiguration config) { - return MojoExecutor.executionEnvironment( - config.getMavenProject(), config.getMavenSession(), config.getPluginManager()); - } - - @Override - public void executeMojo( - final Plugin plugin, final String goal, final Xpp3Dom configuration, - final MojoExecutor.ExecutionEnvironment env - ) throws MojoExecutionException { - MojoExecutor.executeMojo(plugin, goal, configuration, env); - } - - @Override - public Dependency dependency(final String groupid, final String artifactid, final String version) { - return MojoExecutor.dependency(groupid, artifactid, version); - } - - @Override - public List dependencies(final Dependency... dependencies) { - return MojoExecutor.dependencies(dependencies); - } - - @Override - public Plugin plugin( - final String groupid, final String artifactid, final String version, final List dependencies - ) { - return MojoExecutor.plugin(groupid, artifactid, version, dependencies); - } -} diff --git a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/PluginExecutor.java b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/PluginExecutor.java deleted file mode 100644 index 91caeaf..0000000 --- a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/PluginExecutor.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * 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.checkstyle.ruleset.plugin; - -import org.apache.maven.model.Dependency; -import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.MojoExecutionException; -import org.codehaus.plexus.util.xml.Xpp3Dom; -import org.twdata.maven.mojoexecutor.MojoExecutor; - -import java.util.List; - -/** - * Interface for wrapping calls to static methods on {@link org.twdata.maven.mojoexecutor.MojoExecutor}. - * - * @author Paul Campbell (pcampbell@kemitix.net). - */ -public interface PluginExecutor { - - /** - * Constructs the element with a textual body. - * - * @param name The element name - * @param value The element text value - * - * @return The element object - */ - MojoExecutor.Element element(String name, String value); - - /** - * Builds the configuration for the goal using Elements. - * - * @param elements A list of elements for the configuration section - * - * @return The elements transformed into the Maven-native XML format - */ - Xpp3Dom configuration(MojoExecutor.Element... elements); - - /** - * Constructs the {@link MojoExecutor.ExecutionEnvironment} instance fluently. - * - * @param configuration The Configuration - * - * @return The execution environment - */ - MojoExecutor.ExecutionEnvironment executionEnvironment(CheckConfiguration configuration); - - /** - * Entry point for executing a mojo. - * - * @param plugin The plugin to execute - * @param goal The goal to execute - * @param configuration The execution configuration - * @param env The execution environment - * - * @throws MojoExecutionException If there are any exceptions locating or executing the mojo - */ - void executeMojo( - Plugin plugin, String goal, Xpp3Dom configuration, MojoExecutor.ExecutionEnvironment env - ) throws MojoExecutionException; - - /** - * Defines a dependency. - * - * @param groupId The group id - * @param artifactId The artifact id - * @param version The plugin version - * - * @return the dependency instance - */ - Dependency dependency(String groupId, String artifactId, String version); - - /** - * Creates a list of dependencies. - * - * @param dependencies the dependencies - * - * @return A list of dependencies - */ - List dependencies(Dependency... dependencies); - - /** - * Defines a plugin. - * - * @param groupId The group id - * @param artifactId The artifact id - * @param version The plugin version - * @param dependencies The plugin dependencies - * - * @return The plugin instance - */ - Plugin plugin( - String groupId, String artifactId, String version, List dependencies - ); -} diff --git a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/package-info.java b/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/package-info.java deleted file mode 100644 index a2bf527..0000000 --- a/plugin/src/main/java/net/kemitix/checkstyle/ruleset/plugin/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/** - * 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.checkstyle.ruleset.plugin; diff --git a/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/CheckConfigurationTest.java b/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/CheckConfigurationTest.java deleted file mode 100644 index 15c63ac..0000000 --- a/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/CheckConfigurationTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.kemitix.checkstyle.ruleset.plugin; - -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Paul Campbell (pcampbell@kemitix.net). - */ -public class CheckConfigurationTest { - - @Test - public void toStringCoverage() { - //given - final String rulesetVersion = "ruleset version"; - final String sourceDirectory = "source directory"; - //when - final String result = CheckConfiguration.builder() - .rulesetVersion(rulesetVersion) - .sourceDirectory(sourceDirectory) - .toString(); - //then - assertThat(result).contains("rulesetVersion=ruleset version") - .contains("sourceDirectory=source directory"); - } -} diff --git a/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/CheckMojoTest.java b/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/CheckMojoTest.java deleted file mode 100644 index 86e540f..0000000 --- a/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/CheckMojoTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package net.kemitix.checkstyle.ruleset.plugin; - -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.execution.MavenSession; -import org.apache.maven.model.Build; -import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.BuildPluginManager; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.project.MavenProject; -import org.junit.Before; -import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; - -/** - * Tests for {@link CheckMojo}. - * - * @author Paul Campbell (pcampbell@kemitix.net) - */ -public class CheckMojoTest { - - @Mock - private CheckstyleExecutor checkstyleExecutor; - - @Mock - private MavenProject mavenProject; - - @Mock - private MavenSession mavenSession; - - @Mock - private ArtifactRepository artifactRepository; - - @Mock - private BuildPluginManager pluginManager; - - @Captor - private ArgumentCaptor configuration; - - @Mock - private Plugin rulesetPlugin; - - @Mock - private Build build; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void canExecute() throws MojoFailureException, MojoExecutionException { - //given - final CheckMojo mojo = new CheckMojo(); - mojo.setCheckstyleExecutor(checkstyleExecutor); - mojo.setMavenProject(mavenProject); - mojo.setMavenSession(mavenSession); - mojo.setArtifactRepository(artifactRepository); - mojo.setPluginManager(pluginManager); - given(mavenProject.getPlugin(any())).willReturn(rulesetPlugin); - given(mavenProject.getBuild()).willReturn(build); - //when - mojo.execute(); - //then - then(checkstyleExecutor).should() - .performCheck(configuration.capture()); - assertThat(configuration.getValue()).returns(mavenProject, CheckConfiguration::getMavenProject) - .returns(mavenSession, CheckConfiguration::getMavenSession) - .returns(artifactRepository, CheckConfiguration::getArtifactRepository) - .returns(pluginManager, CheckConfiguration::getPluginManager); - } -} diff --git a/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/DefaultCheckstyleExecutorTest.java b/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/DefaultCheckstyleExecutorTest.java deleted file mode 100644 index b7de3cb..0000000 --- a/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/DefaultCheckstyleExecutorTest.java +++ /dev/null @@ -1,161 +0,0 @@ -package net.kemitix.checkstyle.ruleset.plugin; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.execution.MavenSession; -import org.apache.maven.model.Dependency; -import org.apache.maven.model.Model; -import org.apache.maven.model.Plugin; -import org.apache.maven.model.io.xpp3.MavenXpp3Reader; -import org.apache.maven.plugin.BuildPluginManager; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugin.logging.Log; -import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.util.xml.Xpp3Dom; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.twdata.maven.mojoexecutor.MojoExecutor; - -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; - -/** - * Tests for {@link DefaultCheckstyleExecutor}. - * - * @author Paul Campbell (pcampbell@kemitix.net) - */ -public class DefaultCheckstyleExecutorTest { - - @Rule - public TemporaryFolder folder = new TemporaryFolder(); - - @Mock - private PluginExecutor pluginExecutor; - - @Mock - private MavenProject mavenProject; - - @Mock - private MavenSession mavenSession; - - @Mock - private ArtifactRepository artifactRepository; - - @Mock - private BuildPluginManager pluginManager; - - @Mock - private Plugin rulesetPlugin; - - @Mock - private Log log; - - private DefaultCheckstyleExecutor checkstyleExecutor; - - private String level; - - @Mock - private Artifact artifact; - - @Mock - private MavenXpp3Reader mavenXpp3Reader; - - @Mock - private Model pomModel; - - @Mock - private MojoExecutor.Element configElement; - - @Mock - private MojoExecutor.Element sourceElement; - - @Mock - private Xpp3Dom pluginConfig; - - @Mock - private MojoExecutor.ExecutionEnvironment env; - - @Mock - private Dependency checkstyle; - - @Mock - private Dependency sevntu; - - @Mock - private Dependency ruleset; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - level = "test level"; - checkstyleExecutor = new DefaultCheckstyleExecutor(pluginExecutor, mavenXpp3Reader); - checkstyleExecutor.setLog(log); - } - - @Test - public void canPerformCheck() - throws MojoFailureException, MojoExecutionException, IOException, XmlPullParserException { - //given - final CheckConfiguration configuration = CheckConfiguration.builder() - .mavenProject(mavenProject) - .mavenSession(mavenSession) - .artifactRepository(artifactRepository) - .pluginManager(pluginManager) - .rulesetVersion("ruleset version") - .level(level) - .build(); - - given(artifactRepository.find(any())).willReturn(artifact); - final File artifactFile = folder.newFile("pom.xml"); - given(artifact.getFile()).willReturn(artifactFile); - given(mavenXpp3Reader.read(any(FileReader.class))).willReturn(pomModel); - final Properties properties = new Properties(); - given(pomModel.getProperties()).willReturn(properties); - given(pluginExecutor.element(eq("configLocation"), any())).willReturn(configElement); - given(pluginExecutor.element(eq("sourceDirectory"), any())).willReturn(sourceElement); - given(pluginExecutor.configuration(configElement, sourceElement)).willReturn(pluginConfig); - given(pluginExecutor.executionEnvironment(configuration)).willReturn(env); - final List dependencies = new ArrayList<>(); - dependencies.add(checkstyle); - dependencies.add(sevntu); - dependencies.add(ruleset); - final String pluginVersion = "plugin version"; - final String checkstyleVersion = "checkstyle version"; - final String sevntuVersion = "sevntu version"; - final String rulesetVersion = "ruleset version"; - given(pluginExecutor.dependencies(checkstyle, sevntu, ruleset)).willReturn(dependencies); - given(pluginExecutor.dependency("com.puppycrawl.tools", "checkstyle", checkstyleVersion)).willReturn( - checkstyle); - given(pluginExecutor.dependency( - "com.github.sevntu.checkstyle", "sevntu-checkstyle-maven-plugin", sevntuVersion)).willReturn(sevntu); - given(pluginExecutor.dependency("net.kemitix", "kemtiix-checkstyle-ruleset", rulesetVersion)).willReturn( - ruleset); - properties.setProperty("maven-checkstyle-plugin.version", pluginVersion); - properties.setProperty("checkstyle.version", checkstyleVersion); - properties.setProperty("sevntu.version", sevntuVersion); - given(pluginExecutor.plugin( - eq("org.apache.maven.plugins"), eq("maven-checkstyle-plugin"), eq(pluginVersion), any())).willReturn( - rulesetPlugin); - //when - checkstyleExecutor.performCheck(configuration); - //then - - then(pluginExecutor).should() - .executeMojo(rulesetPlugin, "check", pluginConfig, env); - } -} diff --git a/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/DefaultPluginExecutorTest.java b/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/DefaultPluginExecutorTest.java deleted file mode 100644 index ba5f6b2..0000000 --- a/plugin/src/test/java/net/kemitix/checkstyle/ruleset/plugin/DefaultPluginExecutorTest.java +++ /dev/null @@ -1,177 +0,0 @@ -package net.kemitix.checkstyle.ruleset.plugin; - -import org.apache.maven.execution.MavenSession; -import org.apache.maven.model.Dependency; -import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.BuildPluginManager; -import org.apache.maven.plugin.InvalidPluginDescriptorException; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugin.PluginConfigurationException; -import org.apache.maven.plugin.PluginDescriptorParsingException; -import org.apache.maven.plugin.PluginManagerException; -import org.apache.maven.plugin.PluginNotFoundException; -import org.apache.maven.plugin.PluginResolutionException; -import org.apache.maven.plugin.descriptor.MojoDescriptor; -import org.apache.maven.plugin.descriptor.PluginDescriptor; -import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.configuration.PlexusConfiguration; -import org.codehaus.plexus.util.xml.Xpp3Dom; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.twdata.maven.mojoexecutor.MojoExecutor; - -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; - -/** - * Tests for {@link DefaultPluginExecutor}. - * - * @author Paul Campbell (pcampbell@kemitix.net) - */ -public class DefaultPluginExecutorTest { - - private PluginExecutor pluginExecutor; - - @Mock - private MavenProject mavenProject; - - @Mock - private MavenSession mavenSession; - - @Mock - private BuildPluginManager pluginManager; - - @Mock - private Plugin plugin; - - @Mock - private Xpp3Dom configuration; - - @Mock - private PluginDescriptor pluginDescriptor; - - @Mock - private MojoDescriptor mojoDescriptor; - - @Mock - private PlexusConfiguration mojoConfiguration; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - pluginExecutor = new DefaultPluginExecutor(); - } - - @Test - public void canElement() { - //when - final MojoExecutor.Element element = pluginExecutor.element("name", "value"); - //then - assertThat(element.toDom()).returns("name", Xpp3Dom::getName) - .returns("value", Xpp3Dom::getValue); - } - - @Test - public void canConfiguration() { - //given - final MojoExecutor.Element alpha = pluginExecutor.element("alpha", "first"); - final MojoExecutor.Element beta = pluginExecutor.element("beta", "second"); - //when - final Xpp3Dom configuration = pluginExecutor.configuration(alpha, beta); - //then - assertThat(configuration.getChild("alpha")).returns("alpha", Xpp3Dom::getName) - .returns("first", Xpp3Dom::getValue); - assertThat(configuration.getChild("beta")).returns("beta", Xpp3Dom::getName) - .returns("second", Xpp3Dom::getValue); - } - - @Test - public void canExecutionEnvironment() { - //given - final CheckConfiguration configuration = createCheckConfiguration(); - //when - final MojoExecutor.ExecutionEnvironment environment = pluginExecutor.executionEnvironment(configuration); - //then - assertThat(environment).returns(mavenProject, MojoExecutor.ExecutionEnvironment::getMavenProject) - .returns(mavenSession, MojoExecutor.ExecutionEnvironment::getMavenSession) - .returns(pluginManager, MojoExecutor.ExecutionEnvironment::getPluginManager); - } - - private CheckConfiguration createCheckConfiguration() { - return CheckConfiguration.builder() - .mavenProject(mavenProject) - .mavenSession(mavenSession) - .pluginManager(pluginManager) - .build(); - } - - @Test - public void canExecuteMojo() - throws MojoExecutionException, InvalidPluginDescriptorException, PluginResolutionException, - PluginDescriptorParsingException, PluginNotFoundException, PluginManagerException, - PluginConfigurationException, MojoFailureException { - //given - final String goal = "check"; - final MojoExecutor.ExecutionEnvironment environment = - pluginExecutor.executionEnvironment(createCheckConfiguration()); - given(mavenSession.getCurrentProject()).willReturn(mavenProject); - given(pluginManager.loadPlugin(eq(plugin), any(), any())).willReturn(pluginDescriptor); - given(pluginDescriptor.getMojo(goal)).willReturn(mojoDescriptor); - given(mojoDescriptor.getMojoConfiguration()).willReturn(mojoConfiguration); - given(mojoConfiguration.getAttributeNames()).willReturn(new String[]{}); - given(mojoConfiguration.getChildren()).willReturn(new PlexusConfiguration[]{}); - //when - pluginExecutor.executeMojo(plugin, goal, configuration, environment); - //then - then(pluginManager).should() - .executeMojo(eq(mavenSession), any()); - } - - @Test - public void canDependency() { - //given - final String groupId = "groupId"; - final String artifactId = "artifactId"; - final String version = "version"; - //when - final Dependency dependency = pluginExecutor.dependency(groupId, artifactId, version); - //then - assertThat(dependency).returns(groupId, Dependency::getGroupId) - .returns(artifactId, Dependency::getArtifactId) - .returns(version, Dependency::getVersion); - } - - @Test - public void canDependencies() { - //given - final Dependency dependency = pluginExecutor.dependency("groupId", "artifactId", "version"); - //when - final List dependencies = pluginExecutor.dependencies(dependency); - //then - assertThat(dependencies).containsExactly(dependency); - } - - @Test - public void canPlugin() { - //given - final String groupId = "groupId"; - final String artifactId = "artifactId"; - final String version = "version"; - final List dependencies = pluginExecutor.dependencies(pluginExecutor.dependency("pg", "pa", "pv")); - //when - final Plugin plugin = pluginExecutor.plugin(groupId, artifactId, version, dependencies); - //then - assertThat(plugin).returns(groupId, Plugin::getGroupId) - .returns(artifactId, Plugin::getArtifactId) - .returns(version, Plugin::getVersion) - .returns(dependencies, Plugin::getDependencies); - } -} diff --git a/pom.xml b/pom.xml index 0510099..73c88e1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,13 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - net.kemitix - kemitix-parent - 3.0.0 - - + net.kemitix kemitix-checkstyle-ruleset-parent 3.4.0-SNAPSHOT pom @@ -18,6 +13,10 @@ Parent POM for the Kemitix Checkstyle Ruleset and it's Builder + 2.10 + 0.1.1 + 1.8 + 2.17 8.0 1.24.1 @@ -36,7 +35,6 @@ builder ruleset - plugin regressions @@ -55,6 +53,22 @@ 2016 + + + The MIT License (MIT) + https://opensource.org/licenses/MIT + + + + + + Paul Campbell + pcampbell@kemitix.net + Kemitix + https://github.com/kemitix/ + + + diff --git a/regressions/pom.xml b/regressions/pom.xml index 2213e86..6af0db7 100644 --- a/regressions/pom.xml +++ b/regressions/pom.xml @@ -13,17 +13,36 @@ Kemitix Checkstyle :: Ruleset :: Regression Tests - ${project.version} - 5-complexity + + 0-disabled + net.kemitix.checkstyle.regressions true + 2.5.6 org.immutables value + ${immutables-value.version} provided + + + + io.repaint.maven + tiles-maven-plugin + ${tiles-maven-plugin.version} + true + + + net.kemitix.tiles:all-tiles:${kemitix-tiles.version} + + + + + + diff --git a/regressions/src/main/java/net/kemitix/checkstyle/regressions/AvoidDefaultSerializableInInnerClasses.java b/regressions/src/main/java/net/kemitix/checkstyle/regressions/AvoidDefaultSerializableInInnerClasses.java index 1ac2c72..51f1157 100644 --- a/regressions/src/main/java/net/kemitix/checkstyle/regressions/AvoidDefaultSerializableInInnerClasses.java +++ b/regressions/src/main/java/net/kemitix/checkstyle/regressions/AvoidDefaultSerializableInInnerClasses.java @@ -33,7 +33,6 @@ public class AvoidDefaultSerializableInInnerClasses { /** * Inner class should not use default implementations of {@code readObject()} and {@code writeObject()}. */ - @SuppressWarnings("avoiddefaultserializableininnerclasses") public class InnerClass implements Serializable { } diff --git a/regressions/src/main/java/net/kemitix/checkstyle/regressions/Basic.java b/regressions/src/main/java/net/kemitix/checkstyle/regressions/Basic.java index 050b9c6..f269c44 100644 --- a/regressions/src/main/java/net/kemitix/checkstyle/regressions/Basic.java +++ b/regressions/src/main/java/net/kemitix/checkstyle/regressions/Basic.java @@ -22,7 +22,7 @@ package net.kemitix.checkstyle.regressions; /** - * Sample class. + * Sample class with no checkstyle issues. * * @author Paul Campbell (pcampbell@kemitix.net) */ diff --git a/regressions/src/main/java/net/kemitix/checkstyle/regressions/EmptyPublicCtorInClass.java b/regressions/src/main/java/net/kemitix/checkstyle/regressions/EmptyPublicCtorInClass.java index 1ce63b0..0c49972 100644 --- a/regressions/src/main/java/net/kemitix/checkstyle/regressions/EmptyPublicCtorInClass.java +++ b/regressions/src/main/java/net/kemitix/checkstyle/regressions/EmptyPublicCtorInClass.java @@ -31,7 +31,6 @@ public class EmptyPublicCtorInClass { /** * Useless empty public constructors. */ - @SuppressWarnings("emptypublicctorinclass") EmptyPublicCtorInClass() { } diff --git a/regressions/src/main/java/net/kemitix/checkstyle/regressions/ExplicitInitialization.java b/regressions/src/main/java/net/kemitix/checkstyle/regressions/ExplicitInitialization.java index 8742195..9c20896 100644 --- a/regressions/src/main/java/net/kemitix/checkstyle/regressions/ExplicitInitialization.java +++ b/regressions/src/main/java/net/kemitix/checkstyle/regressions/ExplicitInitialization.java @@ -37,16 +37,12 @@ class ExplicitInitialization { private Object validObject = new Object(); - @SuppressWarnings("explicitinitialization") private Boolean invalidBoolean = null; - @SuppressWarnings("explicitinitialization") private Integer invalidInteger = null; - @SuppressWarnings("explicitinitialization") private String invalidString = null; - @SuppressWarnings("explicitinitialization") private Object invalidObject = null; } diff --git a/regressions/src/main/java/net/kemitix/checkstyle/regressions/FinalizeImplementation.java b/regressions/src/main/java/net/kemitix/checkstyle/regressions/FinalizeImplementation.java index 738f7de..849afb7 100644 --- a/regressions/src/main/java/net/kemitix/checkstyle/regressions/FinalizeImplementation.java +++ b/regressions/src/main/java/net/kemitix/checkstyle/regressions/FinalizeImplementation.java @@ -31,7 +31,7 @@ class FinalizeImplementation { /** * Negates effect of superclass finalize. */ - @SuppressWarnings({"PMD.EmptyFinalizer", "nofinalizer", "finalizeimplementation"}) + @SuppressWarnings("PMD.EmptyFinalizer") protected void finalize() { // doesn't call super.finalize() } diff --git a/regressions/src/main/java/net/kemitix/checkstyle/regressions/MoveVariableInsideIf.java b/regressions/src/main/java/net/kemitix/checkstyle/regressions/MoveVariableInsideIf.java index 6e6151f..81c76d3 100644 --- a/regressions/src/main/java/net/kemitix/checkstyle/regressions/MoveVariableInsideIf.java +++ b/regressions/src/main/java/net/kemitix/checkstyle/regressions/MoveVariableInsideIf.java @@ -41,7 +41,6 @@ class MoveVariableInsideIf { * * @return value */ - @SuppressWarnings("movevariableinsideif") protected String invalid() { String variable = input.substring(1); if (condition) { diff --git a/ruleset/pom.xml b/ruleset/pom.xml index bed0366..978c095 100644 --- a/ruleset/pom.xml +++ b/ruleset/pom.xml @@ -16,87 +16,21 @@ Kemitix Checkstyle :: Ruleset Checkstyle Ruleset for use by packages derived from kemitix-parent - - 2.10.4 - 3.0.1 - 1.6 - 2.8.2 - - - - - release - - - - - org.apache.maven.plugins - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - - attach-javadocs - verify - - jar - - - - - - - org.apache.maven.plugins - maven-source-plugin - ${maven-source-plugin.version} - - - attach-sources - verify - - jar-no-fork - - - - - - - org.apache.maven.plugins - maven-gpg-plugin - ${maven-gpg-plugin.version} - - ${gpg.passphrase} - - - - sign-artifacts - verify - - sign - - - - - - - org.apache.maven.plugins - maven-deploy-plugin - ${maven-deploy-plugin.version} - - - - - - - - - sonatype-nexus-snapshots - Sonatype Nexus Snapshots - https://oss.sonatype.org/content/repositories/snapshots/ - - - sonatype-nexus-staging - Nexus Release Repository - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - + + + + io.repaint.maven + tiles-maven-plugin + ${tiles-maven-plugin.version} + true + + + net.kemitix.tiles:maven-plugins-tile:${kemitix-tiles.version} + net.kemitix.tiles:enforcer-tile:${kemitix-tiles.version} + net.kemitix.tiles:release-tile:${kemitix-tiles.version} + + + + +