diff --git a/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-1/pom.xml b/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-1/pom.xml
index ecc723376..46fd628a0 100644
--- a/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-1/pom.xml
+++ b/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-1/pom.xml
@@ -39,24 +39,6 @@
org.jetbrains.kotlin
kotlin-maven-plugin
-
- org.codehaus.mojo
- build-helper-maven-plugin
- 3.2.0
-
-
- generate-sources
-
- add-source
-
-
-
-
-
-
-
-
-
diff --git a/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-2/pom.xml b/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-2/pom.xml
index 6e18d815c..00d24c96c 100644
--- a/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-2/pom.xml
+++ b/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-2/pom.xml
@@ -39,24 +39,6 @@
org.jetbrains.kotlin
kotlin-maven-plugin
-
- org.codehaus.mojo
- build-helper-maven-plugin
- 3.2.0
-
-
- generate-sources
-
- add-source
-
-
-
-
-
-
-
-
-
diff --git a/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-3/pom.xml b/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-3/pom.xml
index 135d604e2..e0bfad6d6 100644
--- a/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-3/pom.xml
+++ b/pitest-maven-verification/src/test/resources/pit-kotlin-multi-module/sub-module-3/pom.xml
@@ -39,24 +39,6 @@
org.jetbrains.kotlin
kotlin-maven-plugin
-
- org.codehaus.mojo
- build-helper-maven-plugin
- 3.2.0
-
-
- generate-sources
-
- add-source
-
-
-
-
-
-
-
-
-
diff --git a/pitest-maven/src/main/java/org/pitest/maven/AbstractPitMojo.java b/pitest-maven/src/main/java/org/pitest/maven/AbstractPitMojo.java
index 979e0eedd..514c3198b 100644
--- a/pitest-maven/src/main/java/org/pitest/maven/AbstractPitMojo.java
+++ b/pitest-maven/src/main/java/org/pitest/maven/AbstractPitMojo.java
@@ -353,6 +353,12 @@ public class AbstractPitMojo extends AbstractMojo {
@Parameter(property = "pit.outputEncoding", defaultValue = "${project.reporting.outputEncoding}")
private String outputEncoding;
+ @Parameter(property = "pit.additionalSources", defaultValue = "src/main/kotlin")
+ private List additionalSources;
+
+ @Parameter(property = "pit.additionalTestSources", defaultValue = "src/test/kotlin")
+ private List additionalTestSources;
+
/**
* The base directory of a multi-module project. Defaults to the execution
* directory
@@ -433,6 +439,7 @@ public final void execute() throws MojoExecutionException,
MojoFailureException {
switchLogging();
+ augmentConfig();
RunDecision shouldRun = shouldRun();
if (shouldRun.shouldRun()) {
@@ -469,6 +476,27 @@ public final void execute() throws MojoExecutionException,
}
}
+ /**
+ * Maven kotlin projects often add the kotlin sources at runtime via the build helper or kotlin p;lugins.
+ * Unfortunately, pitest is often has its maven goal called directly so this
+ * config isn't visible to it. We therefore add them in at runtime ourselves if present.
+ */
+ private void augmentConfig() {
+ for (File source : emptyWithoutNulls(additionalSources)) {
+ if (source.exists() && ! this.project.getCompileSourceRoots().contains(source.getAbsolutePath())) {
+ this.getLog().info("Adding source root " + source);
+ this.project.addCompileSourceRoot(source.getAbsolutePath());
+ }
+ }
+
+ for (File source : emptyWithoutNulls(additionalTestSources)) {
+ if (source.exists() && ! this.project.getTestCompileSourceRoots().contains(source.getAbsolutePath())) {
+ this.getLog().info("Adding test root " + source);
+ this.project.addTestCompileSourceRoot(source.getAbsolutePath());
+ }
+ }
+ }
+
private void switchLogging() {
if (this.useSlf4j) {
SLF4JBridgeHandler.removeHandlersForRootLogger();
diff --git a/pitest-maven/src/main/java/org/pitest/maven/MojoToReportOptionsConverter.java b/pitest-maven/src/main/java/org/pitest/maven/MojoToReportOptionsConverter.java
index ae9d9894f..7ea345b49 100644
--- a/pitest-maven/src/main/java/org/pitest/maven/MojoToReportOptionsConverter.java
+++ b/pitest-maven/src/main/java/org/pitest/maven/MojoToReportOptionsConverter.java
@@ -34,7 +34,6 @@
import java.io.File;
import java.nio.file.FileSystems;
-import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -50,7 +49,6 @@
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import static org.pitest.functional.Streams.asStream;
@@ -220,7 +218,6 @@ private ReportOptions parseReportOptions(final List classPath) {
final List sourceRoots = new ArrayList<>();
sourceRoots.addAll(this.mojo.getProject().getCompileSourceRoots());
sourceRoots.addAll(this.mojo.getProject().getTestCompileSourceRoots());
- sourceRoots.addAll(kotlinIfPresent());
data.setSourceDirs(stringsToPaths(sourceRoots));
@@ -256,17 +253,6 @@ private ReportOptions parseReportOptions(final List classPath) {
return data;
}
- // Many maven projects will not have the kotlin sources dirs configured within the maven
- // model. To work around this, the horrible hack below adds them if they are present
- private Collection kotlinIfPresent() {
- Path test = Paths.get(this.mojo.getProject().getBasedir().getAbsolutePath(),"src","test","kotlin" );
- Path main = Paths.get(this.mojo.getProject().getBasedir().getAbsolutePath(),"src","main","kotlin" );
- return Stream.of(test, main)
- .filter(Files::exists)
- .map(p -> p.toFile().getAbsolutePath())
- .collect(Collectors.toList());
- }
-
private void configureVerbosity(ReportOptions data) {
if (this.mojo.isVerbose()) {
data.setVerbosity(Verbosity.VERBOSE);
diff --git a/pitest-maven/src/test/java/org/pitest/maven/MojoToReportOptionsConverterTest.java b/pitest-maven/src/test/java/org/pitest/maven/MojoToReportOptionsConverterTest.java
index 3f4d518d1..7edcf0798 100644
--- a/pitest-maven/src/test/java/org/pitest/maven/MojoToReportOptionsConverterTest.java
+++ b/pitest-maven/src/test/java/org/pitest/maven/MojoToReportOptionsConverterTest.java
@@ -470,28 +470,6 @@ public void testEvaluatesNormalPropertiesInArgLines() {
assertThat(actual.getArgLine()).isEqualTo("fooValue barValue");
}
- public void testAutoAddsKotlinSourceDirsWhenPresent() throws IOException {
- // we're stuck in junit 3 land but can
- // use junit 4's temporary folder rule programatically
- TemporaryFolder t = new TemporaryFolder();
- try {
- t.create();
- File base = t.getRoot();
- when(project.getBasedir()).thenReturn(base);
-
- Path main = base.toPath().resolve("src").resolve("main").resolve("kotlin");
- Path test = base.toPath().resolve("src").resolve("test").resolve("kotlin");
- Files.createDirectories(main);
- Files.createDirectories(test);
-
- ReportOptions actual = parseConfig("");
- assertThat(actual.getSourcePaths()).contains(main);
- } finally {
- t.delete();
- }
-
- }
-
private ReportOptions parseConfig(final String xml) {
try {
final String pom = createPomWithConfiguration(xml);
diff --git a/pitest-maven/src/test/java/org/pitest/maven/PitMojoTest.java b/pitest-maven/src/test/java/org/pitest/maven/PitMojoTest.java
index e187f79bd..afa965ec8 100644
--- a/pitest-maven/src/test/java/org/pitest/maven/PitMojoTest.java
+++ b/pitest-maven/src/test/java/org/pitest/maven/PitMojoTest.java
@@ -38,7 +38,7 @@ public void setUp() throws Exception {
when(this.executionProject.getBasedir()).thenReturn(new File("BASEDIR"));
}
- public void testRunsAMutationReportWhenMutationCoverageGoalTrigered()
+ public void testRunsAMutationReportWhenMutationCoverageGoalTriggered()
throws Exception {
this.testee = createPITMojo(createPomWithConfiguration(""));
final Build build = new Build();