diff --git a/CHANGELOG b/CHANGELOG
index 9723700..9e443ec 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,13 @@ CHANGELOG
*
+4.0.1
+-----
+
+* Add sourceDirectories to avoid scanning generated sources
+* Upgrade lombok to 1.16.20
+* Upgrade kemitix-maven-tiles to 0.3.0
+
4.0.0
-----
diff --git a/README.md b/README.md
index 6e420fa..99c48f1 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ The simplest way to use the ruleset is with the maven-tile:
true
- net.kemitix.checkstyle:tile:4.0.0
+ net.kemitix.checkstyle:tile:4.0.1
diff --git a/builder/pom.xml b/builder/pom.xml
index a18c11a..5e4ee5d 100644
--- a/builder/pom.xml
+++ b/builder/pom.xml
@@ -20,11 +20,11 @@
true
1.8
2.10
- 0.2.0
+ 0.3.0
8.6
1.26.0
- 1.16.18
+ 1.16.20
Brussels-SR6
1.5.9.RELEASE
2.3.5
@@ -36,6 +36,7 @@
${project.version}
5-complexity
net/kemitix/checkstyle-${kemitix.checkstyle.ruleset.level}.xml
+ 1.2
@@ -55,6 +56,7 @@
org.projectlombok
lombok
${lombok.version}
+ provided
org.mockito
@@ -76,6 +78,11 @@
+
+ javax.annotation
+ javax.annotation-api
+ ${javax.annotation-api.version}
+
org.springframework.boot
spring-boot-starter-log4j2
diff --git a/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/BuilderConfiguration.java b/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/BuilderConfiguration.java
index 197c38c..626c729 100644
--- a/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/BuilderConfiguration.java
+++ b/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/BuilderConfiguration.java
@@ -26,6 +26,12 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
+import java.util.AbstractMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* Configuration for Builder.
@@ -46,4 +52,35 @@ public class BuilderConfiguration {
public ClassPath classPath() throws IOException {
return ClassPath.from(getClass().getClassLoader());
}
+
+ /**
+ * A Map of rules for each RuleSource.
+ *
+ * @param packageScanner the PackageScanner
+ *
+ * @return a Map with a list of check classes for each rule source
+ */
+ @Bean
+ public Map> checkClasses(final PackageScanner packageScanner) {
+ return Stream.of(RuleSource.values())
+ .map(toRuleSourceEntry(packageScanner))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+ }
+
+ private static Function>> toRuleSourceEntry(
+ final PackageScanner packageScanner
+ ) {
+ return source -> new AbstractMap.SimpleEntry<>(
+ source,
+ classesInSource(source, packageScanner)
+ );
+ }
+
+ private static List classesInSource(
+ final RuleSource source,
+ final PackageScanner packageScanner
+ ) {
+ return packageScanner.apply(source)
+ .collect(Collectors.toList());
+ }
}
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 0df04a6..873de34 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
@@ -24,13 +24,9 @@ package net.kemitix.checkstyle.ruleset.builder;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
-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;
/**
* Default implementation of {@link RuleClassLocator}.
@@ -41,38 +37,30 @@ import java.util.stream.Stream;
@RequiredArgsConstructor
public class DefaultRuleClassLocator implements RuleClassLocator {
- private final PackageScanner packageScanner;
-
- private Map> checkClasses;
-
- /**
- * Initialise class lists for {@link RuleSource}s.
- */
- @PostConstruct
- public final void init() {
- checkClasses = Stream.of(RuleSource.values())
- .map(source -> new AbstractMap.SimpleEntry<>(
- source, packageScanner.apply(source)
- .collect(Collectors.toList())))
- .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
- }
+ private final Map> checkClasses;
@Override
public final String apply(final Rule rule) {
return getCanonicalClassName(rule.getSource(), rule.getName());
}
- private String getCanonicalClassName(final RuleSource source, final String name) {
+ private String getCanonicalClassName(
+ final RuleSource source,
+ final String name
+ ) {
Objects.requireNonNull(checkClasses, "init() method not called");
return checkClasses.get(source)
- .stream()
- .sorted()
- .filter(classname -> byRuleName(classname, name))
- .findFirst()
- .orElseThrow(() -> new CheckstyleClassNotFoundException(name));
+ .stream()
+ .sorted()
+ .filter(classname -> byRuleName(classname, name))
+ .findFirst()
+ .orElseThrow(() -> new CheckstyleClassNotFoundException(name));
}
- private boolean byRuleName(final String classname, final String name) {
+ private boolean byRuleName(
+ final String classname,
+ final String name
+ ) {
final String classNameWithDelimiter = "." + name;
return classname.endsWith(classNameWithDelimiter) || classname.endsWith(classNameWithDelimiter + "Check");
}
diff --git a/builder/src/main/resources/README-template.md b/builder/src/main/resources/README-template.md
index 98c3585..5aabff6 100644
--- a/builder/src/main/resources/README-template.md
+++ b/builder/src/main/resources/README-template.md
@@ -31,7 +31,7 @@ The simplest way to use the ruleset is with the maven-tile:
true
- net.kemitix.checkstyle:tile:4.0.0
+ net.kemitix.checkstyle:tile:4.0.1
diff --git a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/BuilderConfigurationTest.java b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/BuilderConfigurationTest.java
index 294cb87..9279196 100644
--- a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/BuilderConfigurationTest.java
+++ b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/BuilderConfigurationTest.java
@@ -4,8 +4,14 @@ import com.google.common.reflect.ClassPath;
import org.junit.Test;
import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
/**
* Tests for {@link BuilderConfiguration}.
@@ -21,4 +27,21 @@ public class BuilderConfigurationTest {
//then
assertThat(classPath).isNotNull();
}
+
+ @Test
+ public void canGetCheckClasses() {
+ //given
+ final PackageScanner packageScanner = mock(PackageScanner.class);
+ final String checkstyleClass = "checkstyle class";
+ given(packageScanner.apply(RuleSource.CHECKSTYLE)).willReturn(Stream.of(checkstyleClass));
+ final String sevntuClass = "sevntu class";
+ given(packageScanner.apply(RuleSource.SEVNTU)).willReturn(Stream.of(sevntuClass));
+ //when
+ final Map> checkClasses = new BuilderConfiguration().checkClasses(packageScanner);
+ //then
+ assertThat(checkClasses).containsOnlyKeys(RuleSource.values());
+ assertThat(checkClasses)
+ .containsEntry(RuleSource.CHECKSTYLE, Collections.singletonList(checkstyleClass))
+ .containsEntry(RuleSource.SEVNTU, Collections.singletonList(sevntuClass));
+ }
}
diff --git a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/DefaultPackageScannerTest.java b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/DefaultPackageScannerTest.java
index e0540f2..240d12c 100644
--- a/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/DefaultPackageScannerTest.java
+++ b/builder/src/test/java/net/kemitix/checkstyle/ruleset/builder/DefaultPackageScannerTest.java
@@ -16,7 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
public class DefaultPackageScannerTest {
- private DefaultPackageScanner scanner;
+ private PackageScanner scanner;
@Before
public void setUp() throws Exception {
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 a342ae6..3e9dd11 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
@@ -1,16 +1,14 @@
package net.kemitix.checkstyle.ruleset.builder;
-import org.junit.Before;
import org.junit.Test;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
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}.
@@ -19,14 +17,9 @@ import static org.mockito.Mockito.mock;
*/
public class DefaultRuleClassLocatorTest {
- private DefaultRuleClassLocator subject;
+ private final Map> checkClasses = new HashMap<>();
- private PackageScanner packageScanner = mock(PackageScanner.class);
-
- @Before
- public void setUp() {
- subject = new DefaultRuleClassLocator(packageScanner);
- }
+ private final DefaultRuleClassLocator subject = new DefaultRuleClassLocator(checkClasses);
@Test
public void canLookupRuleWithClassNameEndingInCheck() {
@@ -35,9 +28,8 @@ public class DefaultRuleClassLocatorTest {
final String expected = "com.puppycrawl.tools.checkstyle.checks.regexp.RegexpOnFilenameCheck";
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();
+ checkClasses.put(RuleSource.CHECKSTYLE, checkstyleClasses);
+ checkClasses.put(RuleSource.SEVNTU, sevntuClasses);
final Rule rule = createCheckstyleRule(rulename);
//when
final String result = subject.apply(rule);
@@ -52,9 +44,8 @@ public class DefaultRuleClassLocatorTest {
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();
+ checkClasses.put(RuleSource.CHECKSTYLE, checkstyleClasses);
+ checkClasses.put(RuleSource.SEVNTU, sevntuClasses);
final Rule rule = createCheckstyleRule(rulename);
//when
final String result = subject.apply(rule);
@@ -69,9 +60,8 @@ public class DefaultRuleClassLocatorTest {
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();
+ checkClasses.put(RuleSource.CHECKSTYLE, checkstyleClasses);
+ checkClasses.put(RuleSource.SEVNTU, sevntuClasses);
final Rule rule = createCheckstyleRule(rulename);
//then
assertThatThrownBy(() -> subject.apply(rule))
@@ -79,13 +69,6 @@ public class DefaultRuleClassLocatorTest {
.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/set-version.sh b/set-version.sh
new file mode 100644
index 0000000..717be2e
--- /dev/null
+++ b/set-version.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+if test $# != 2
+then
+ echo "current and next version missing"
+ exit
+fi
+
+CURRENT=$1
+NEXT=$2
+
+echo Updating version from $CURRENT to $NEXT
+
+./mvnw versions:set -DnewVersion=$NEXT
+perl -p -i -e "s,$CURRENT,$NEXT," builder/pom.xml builder/src/main/resources/README-template.md regressions/pom.xml ruleset/pom.xml tile/pom.xml tile/tile.xml
diff --git a/tile/tile.xml b/tile/tile.xml
index f87d3e6..b347e8d 100644
--- a/tile/tile.xml
+++ b/tile/tile.xml
@@ -3,7 +3,7 @@
3.0.0
8.6
1.26.0
- 4.0.0
+ 4.0.1
5-complexity
net/kemitix/checkstyle-${kemitix.checkstyle.ruleset.level}.xml
@@ -32,6 +32,9 @@
${kemitix.checkstyle.ruleset.location}
+
+ ${build.sourceDirectory}
+