diff --git a/pitest-command-line/src/main/java/org/pitest/mutationtest/commandline/MutationCoverageReport.java b/pitest-command-line/src/main/java/org/pitest/mutationtest/commandline/MutationCoverageReport.java index 5fee03f86..ce08a44a8 100644 --- a/pitest-command-line/src/main/java/org/pitest/mutationtest/commandline/MutationCoverageReport.java +++ b/pitest-command-line/src/main/java/org/pitest/mutationtest/commandline/MutationCoverageReport.java @@ -14,8 +14,6 @@ */ package org.pitest.mutationtest.commandline; -import java.util.HashMap; - import org.pitest.coverage.CoverageSummary; import org.pitest.mutationtest.config.PluginServices; import org.pitest.mutationtest.config.ReportOptions; @@ -25,6 +23,8 @@ import org.pitest.mutationtest.tooling.EntryPoint; import org.pitest.util.Unchecked; +import java.util.HashMap; + /** * Entry point for command line interface */ @@ -96,7 +96,7 @@ private static CombinedStatistics runReport(ReportOptions data, final EntryPoint e = new EntryPoint(); final AnalysisResult result = e.execute(null, data, plugins, - new HashMap()); + new HashMap<>()); if (result.getError().isPresent()) { throw Unchecked.translateCheckedException(result.getError().get()); } diff --git a/pitest-entry/src/main/java/org/pitest/coverage/CoverageData.java b/pitest-entry/src/main/java/org/pitest/coverage/CoverageData.java index a42b56696..88332ce2a 100644 --- a/pitest-entry/src/main/java/org/pitest/coverage/CoverageData.java +++ b/pitest-entry/src/main/java/org/pitest/coverage/CoverageData.java @@ -15,7 +15,12 @@ package org.pitest.coverage; -import static java.util.stream.Collectors.toCollection; +import org.pitest.classinfo.ClassInfo; +import org.pitest.classinfo.ClassName; +import org.pitest.classpath.CodeSource; +import org.pitest.functional.FCollection; +import org.pitest.testapi.Description; +import org.pitest.util.Log; import java.math.BigInteger; import java.util.ArrayList; @@ -35,12 +40,7 @@ import java.util.logging.Logger; import java.util.stream.Stream; -import org.pitest.classinfo.ClassInfo; -import org.pitest.classinfo.ClassName; -import org.pitest.classpath.CodeSource; -import org.pitest.functional.FCollection; -import org.pitest.testapi.Description; -import org.pitest.util.Log; +import static java.util.stream.Collectors.toCollection; public class CoverageData implements CoverageDatabase { @@ -185,6 +185,11 @@ public CoverageSummary createSummary() { return new CoverageSummary(numberOfLines(), coveredLines()); } + @Override + public Map> getInstructionCoverage() { + return Collections.unmodifiableMap(this.instructionCoverage); + } + private BigInteger generateCoverageNumber( final Map> coverage) { BigInteger coverageNumber = BigInteger.ZERO; diff --git a/pitest-entry/src/main/java/org/pitest/coverage/CoverageDatabase.java b/pitest-entry/src/main/java/org/pitest/coverage/CoverageDatabase.java index 05c8f3082..314dab60b 100644 --- a/pitest-entry/src/main/java/org/pitest/coverage/CoverageDatabase.java +++ b/pitest-entry/src/main/java/org/pitest/coverage/CoverageDatabase.java @@ -1,11 +1,13 @@ package org.pitest.coverage; -import java.math.BigInteger; -import java.util.Collection; - import org.pitest.classinfo.ClassInfo; import org.pitest.classinfo.ClassName; +import java.math.BigInteger; +import java.util.Collection; +import java.util.Map; +import java.util.Set; + public interface CoverageDatabase { Collection getClassInfo(Collection classes); @@ -24,4 +26,7 @@ public interface CoverageDatabase { CoverageSummary createSummary(); + Map> getInstructionCoverage(); + + } diff --git a/pitest-entry/src/main/java/org/pitest/mutationtest/build/CompoundInterceptorFactory.java b/pitest-entry/src/main/java/org/pitest/mutationtest/build/CompoundInterceptorFactory.java index 6b3755bad..00f5c0c6d 100644 --- a/pitest-entry/src/main/java/org/pitest/mutationtest/build/CompoundInterceptorFactory.java +++ b/pitest-entry/src/main/java/org/pitest/mutationtest/build/CompoundInterceptorFactory.java @@ -1,6 +1,7 @@ package org.pitest.mutationtest.build; import org.pitest.classinfo.ClassByteArraySource; +import org.pitest.coverage.CoverageDatabase; import org.pitest.mutationtest.config.ReportOptions; import org.pitest.plugin.FeatureSelector; import org.pitest.plugin.FeatureSetting; @@ -21,18 +22,22 @@ public CompoundInterceptorFactory(List features, public MutationInterceptor createInterceptor( ReportOptions data, + CoverageDatabase coverage, ClassByteArraySource source) { final List interceptors = this.features.getActiveFeatures().stream() - .map(toInterceptor(this.features, data, source)) + .map(toInterceptor(this.features, data, coverage, source)) .collect(Collectors.toList()); return new CompoundMutationInterceptor(interceptors); } private static Function toInterceptor( - final FeatureSelector features, final ReportOptions data, final ClassByteArraySource source) { + FeatureSelector features, + ReportOptions data, + CoverageDatabase coverage, + ClassByteArraySource source) { - return a -> a.createInterceptor(new InterceptorParameters(features.getSettingForFeature(a.provides().name()), data, source)); + return a -> a.createInterceptor(new InterceptorParameters(features.getSettingForFeature(a.provides().name()), data, coverage, source)); } } \ No newline at end of file diff --git a/pitest-entry/src/main/java/org/pitest/mutationtest/build/InterceptorParameters.java b/pitest-entry/src/main/java/org/pitest/mutationtest/build/InterceptorParameters.java index a39a7b737..503fbbe6c 100644 --- a/pitest-entry/src/main/java/org/pitest/mutationtest/build/InterceptorParameters.java +++ b/pitest-entry/src/main/java/org/pitest/mutationtest/build/InterceptorParameters.java @@ -1,25 +1,28 @@ package org.pitest.mutationtest.build; -import java.util.Collections; -import java.util.List; - import org.pitest.classinfo.ClassByteArraySource; -import java.util.Optional; +import org.pitest.coverage.CoverageDatabase; import org.pitest.mutationtest.config.ReportOptions; import org.pitest.plugin.FeatureParameter; import org.pitest.plugin.FeatureSetting; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + public final class InterceptorParameters { private final FeatureSetting conf; private final ReportOptions data; private final ClassByteArraySource source; + private final CoverageDatabase coverage; - public InterceptorParameters(FeatureSetting conf, ReportOptions data, + public InterceptorParameters(FeatureSetting conf, ReportOptions data, CoverageDatabase coverage, ClassByteArraySource source) { this.conf = conf; this.data = data; + this.coverage = coverage; this.source = source; } @@ -27,6 +30,10 @@ public ReportOptions data() { return this.data; } + public CoverageDatabase coverage() { + return this.coverage; + } + public Optional settings() { return Optional.ofNullable(this.conf); } diff --git a/pitest-entry/src/main/java/org/pitest/mutationtest/tooling/MutationCoverage.java b/pitest-entry/src/main/java/org/pitest/mutationtest/tooling/MutationCoverage.java index 8edd0ed9b..e91b46eae 100644 --- a/pitest-entry/src/main/java/org/pitest/mutationtest/tooling/MutationCoverage.java +++ b/pitest-entry/src/main/java/org/pitest/mutationtest/tooling/MutationCoverage.java @@ -259,7 +259,7 @@ private List buildMutationTests( coverageData); final MutationInterceptor interceptor = this.settings.getInterceptor() - .createInterceptor(this.data, bas); + .createInterceptor(this.data, coverageData, bas); final MutationSource source = new MutationSource(mutationConfig, testPrioritiser, bas, interceptor); diff --git a/pitest-entry/src/test/java/org/pitest/mutationtest/build/InterceptorParametersTest.java b/pitest-entry/src/test/java/org/pitest/mutationtest/build/InterceptorParametersTest.java index bcc2d0df9..209d711c2 100644 --- a/pitest-entry/src/test/java/org/pitest/mutationtest/build/InterceptorParametersTest.java +++ b/pitest-entry/src/test/java/org/pitest/mutationtest/build/InterceptorParametersTest.java @@ -1,16 +1,16 @@ package org.pitest.mutationtest.build; -import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Test; +import org.pitest.plugin.FeatureParameter; +import org.pitest.plugin.FeatureSetting; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; - -import org.junit.Test; import java.util.Optional; -import org.pitest.plugin.FeatureParameter; -import org.pitest.plugin.FeatureSetting; + +import static org.assertj.core.api.Assertions.assertThat; public class InterceptorParametersTest { @@ -30,7 +30,7 @@ public void shouldReturnNoneWhenValueAbsent() { @Test public void shouldReturnNoneWhenFeatureSettingsAbsent() { - this.testee = new InterceptorParameters(null, null, null); + this.testee = new InterceptorParameters(null, null, null, null); assertThat(this.testee.getString(FeatureParameter.named("foo"))).isEqualTo(Optional.empty()); } @@ -49,8 +49,8 @@ public void shouldReturnListsOfStringsWhenPresent() { private InterceptorParameters makeFor(String key, String ... vals) { final Map> values = new HashMap<>(); values.put(key, Arrays.asList(vals)); - final FeatureSetting fs = new FeatureSetting(null, null,values); - return new InterceptorParameters(fs, null, null); + final FeatureSetting fs = new FeatureSetting(null, null, values); + return new InterceptorParameters(fs, null, null,null); } } diff --git a/pitest-entry/src/test/java/org/pitest/mutationtest/build/MutationDiscoveryTest.java b/pitest-entry/src/test/java/org/pitest/mutationtest/build/MutationDiscoveryTest.java index 496054a63..d607c6f45 100755 --- a/pitest-entry/src/test/java/org/pitest/mutationtest/build/MutationDiscoveryTest.java +++ b/pitest-entry/src/test/java/org/pitest/mutationtest/build/MutationDiscoveryTest.java @@ -1,12 +1,5 @@ package org.pitest.mutationtest.build; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; - -import java.util.Collection; -import java.util.Collections; -import java.util.logging.Logger; - import org.junit.Before; import org.junit.Test; import org.pitest.classinfo.ClassByteArraySource; @@ -27,6 +20,13 @@ import org.pitest.mutationtest.engine.gregor.config.GregorEngineFactory; import org.pitest.util.ResourceFolderByteArraySource; +import java.util.Collection; +import java.util.Collections; +import java.util.logging.Logger; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; + /** * Tests discovery of mutants - including the full default interceptor chain */ @@ -261,7 +261,7 @@ MutationSource createSource(ClassByteArraySource source) { final SettingsFactory settings = new SettingsFactory(this.data, PluginServices.makeForContextLoader()); final MutationInterceptor interceptor = settings.getInterceptor() - .createInterceptor(this.data, source); + .createInterceptor(this.data, null, source); final MutationEngine engine = new GregorEngineFactory().createEngine( EngineArguments.arguments().withExcludedMethods(this.data.getExcludedMethods())