Skip to content

Commit 213462f

Browse files
committed
Added support for scoverage-compiler-plugin > 2.0.0
1 parent 3333ed1 commit 213462f

File tree

4 files changed

+91
-50
lines changed

4 files changed

+91
-50
lines changed

pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,14 @@ under the License.
9090
<maven.version>2.2.1</maven.version>
9191
<maven-plugin-plugin.version>3.6.0</maven-plugin-plugin.version>
9292

93-
<scalac-scoverage-plugin.version>1.4.11</scalac-scoverage-plugin.version>
94-
<scalac-scoverage-plugin.scala.version>2.12.15</scalac-scoverage-plugin.scala.version>
93+
<scalac-scoverage-plugin.version>2.0.7</scalac-scoverage-plugin.version>
94+
<scalac-scoverage-plugin.scala.version>2.13</scalac-scoverage-plugin.scala.version>
9595
</properties>
9696

9797
<dependencies>
9898
<dependency>
9999
<groupId>org.scoverage</groupId>
100-
<artifactId>scalac-scoverage-plugin_${scalac-scoverage-plugin.scala.version}</artifactId>
100+
<artifactId>scalac-scoverage-reporter_${scalac-scoverage-plugin.scala.version}</artifactId>
101101
<version>${scalac-scoverage-plugin.version}</version>
102102
</dependency>
103103

@@ -264,12 +264,12 @@ under the License.
264264
<artifactId>umlgraph</artifactId>
265265
<version>5.6.6</version>
266266
</docletArtifact>
267-
<additionalparam>
267+
<additionalOptions>
268268
-inferrel -inferdep -quiet -hide (java|javax)\..*
269269
-collpackages java\.util\..* -qualify
270270
-postfixpackage -nodefontsize 9
271271
-nodefontpackagesize 7
272-
</additionalparam>
272+
</additionalOptions>
273273
</configuration>
274274
</plugin>
275275

src/main/java/org/scoverage/plugin/SCoverageCheckMojo.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
import org.apache.maven.project.MavenProject;
3131

3232
import scala.Tuple2;
33-
import scala.collection.JavaConverters;
33+
import scala.jdk.javaapi.CollectionConverters;
3434

35-
import scoverage.Coverage;
36-
import scoverage.IOUtils;
37-
import scoverage.Serializer;
35+
import scoverage.domain.Coverage;
36+
import scoverage.reporter.IOUtils;
37+
import scoverage.serialize.Serializer;
3838

3939
/**
4040
* Checks if minimum code coverage by unit tests reached
@@ -93,6 +93,15 @@ public class SCoverageCheckMojo
9393
@Parameter( property = "scoverage.failOnMinimumCoverage", defaultValue = "false" )
9494
private boolean failOnMinimumCoverage;
9595

96+
/**
97+
* The file encoding to use when reading Scala sources.
98+
* <br>
99+
*
100+
* @since 1.4.12
101+
*/
102+
@Parameter( property = "encoding", defaultValue = "${project.build.sourceEncoding}" )
103+
private String encoding;
104+
96105
/**
97106
* Maven project to interact with.
98107
*/
@@ -148,10 +157,10 @@ public void execute() throws MojoFailureException
148157
return;
149158
}
150159

151-
Coverage coverage = Serializer.deserialize( coverageFile );
160+
Coverage coverage = Serializer.deserialize( coverageFile, project.getBasedir() );
152161
List<File> measurementFiles = Arrays.asList( IOUtils.findMeasurementFiles( dataDirectory ) );
153162
scala.collection.Set<Tuple2<Object, String>> measurements =
154-
IOUtils.invoked( JavaConverters.asScalaBuffer( measurementFiles ) );
163+
IOUtils.invoked( CollectionConverters.asScala( measurementFiles ).toSeq(), encoding );
155164
coverage.apply( measurements );
156165

157166
int branchCount = coverage.branchCount();
@@ -165,7 +174,7 @@ public void execute() throws MojoFailureException
165174
invokedBranchesCount, branchCount, invokedStatementCount, statementCount ) );
166175
if ( minimumCoverage > 0.0 )
167176
{
168-
String minimumCoverageFormatted = scoverage.DoubleFormat.twoFractionDigits( minimumCoverage );
177+
String minimumCoverageFormatted = scoverage.domain.DoubleFormat.twoFractionDigits( minimumCoverage );
169178
if ( is100( minimumCoverage ) && is100( coverage.statementCoveragePercent() ) )
170179
{
171180
getLog().info( "100% Coverage !" );

src/main/java/org/scoverage/plugin/SCoveragePreCompileMojo.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@
2222
import java.io.FileOutputStream;
2323
import java.io.IOException;
2424
import java.io.OutputStreamWriter;
25-
import java.util.HashMap;
26-
import java.util.LinkedHashSet;
27-
import java.util.List;
28-
import java.util.Map;
29-
import java.util.Properties;
30-
import java.util.Set;
25+
import java.util.*;
26+
import java.util.stream.Collectors;
27+
import java.util.stream.Stream;
3128

29+
import edu.emory.mathcs.backport.java.util.Arrays;
3230
import org.apache.maven.artifact.Artifact;
3331
import org.apache.maven.artifact.factory.ArtifactFactory;
3432
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -286,10 +284,10 @@ else if ( "2.13".equals( resolvedScalaVersion ) || resolvedScalaVersion.startsWi
286284

287285
try
288286
{
289-
Artifact pluginArtifact = getScalaScoveragePluginArtifact( resolvedScalaVersion, scalaBinaryVersion );
287+
List<Artifact> pluginArtifacts = getScalaScoveragePluginArtifacts( resolvedScalaVersion, scalaBinaryVersion );
290288
Artifact runtimeArtifact = getScalaScoverageRuntimeArtifact( scalaBinaryVersion );
291289

292-
if ( pluginArtifact == null )
290+
if ( pluginArtifacts == null )
293291
{
294292
return; // scoverage plugin will not be configured
295293
}
@@ -300,6 +298,10 @@ else if ( "2.13".equals( resolvedScalaVersion ) || resolvedScalaVersion.startsWi
300298
String _scalacOptions = quoteArgument( arg );
301299
String addScalacArgs = arg;
302300

301+
arg = SOURCE_ROOT_OPTION + project.getBasedir().getAbsolutePath();
302+
_scalacOptions = _scalacOptions + SPACE + quoteArgument( arg );
303+
addScalacArgs = addScalacArgs + PIPE + arg;
304+
303305
if ( !StringUtils.isEmpty( excludedPackages ) )
304306
{
305307
arg = EXCLUDED_PACKAGES_OPTION + excludedPackages.replace( "(empty)", "<empty>" );
@@ -320,11 +322,10 @@ else if ( "2.13".equals( resolvedScalaVersion ) || resolvedScalaVersion.startsWi
320322
addScalacArgs = addScalacArgs + PIPE + "-Yrangepos";
321323
}
322324

323-
String _scalacPlugins =
324-
String.format( "%s:%s:%s", pluginArtifact.getGroupId(), pluginArtifact.getArtifactId(),
325-
pluginArtifact.getVersion() );
325+
String _scalacPlugins = pluginArtifacts.stream()
326+
.map(x -> String.format("%s:%s:%s", x.getGroupId(), x.getArtifactId(),x.getVersion())).collect(Collectors.joining(" "));
326327

327-
arg = PLUGIN_OPTION + pluginArtifact.getFile().getAbsolutePath();
328+
arg = PLUGIN_OPTION + pluginArtifacts.stream().map(x -> x.getFile().getAbsolutePath()).collect(Collectors.joining(":"));
328329
addScalacArgs = addScalacArgs + PIPE + arg;
329330

330331
Properties projectProperties = project.getProperties();
@@ -371,6 +372,7 @@ else if ( "2.13".equals( resolvedScalaVersion ) || resolvedScalaVersion.startsWi
371372
private static final String SCALA_LIBRARY_ARTIFACT_ID = "scala-library";
372373

373374
private static final String DATA_DIR_OPTION = "-P:scoverage:dataDir:";
375+
private static final String SOURCE_ROOT_OPTION = "-P:scoverage:sourceRoot:";
374376
private static final String EXCLUDED_PACKAGES_OPTION = "-P:scoverage:excludedPackages:";
375377
private static final String EXCLUDED_FILES_OPTION = "-P:scoverage:excludedFiles:";
376378
private static final String PLUGIN_OPTION = "-Xplugin:";
@@ -427,7 +429,7 @@ private void setProperty( Properties projectProperties, String propertyName, Str
427429
}
428430
}
429431

430-
private Artifact getScalaScoveragePluginArtifact( String resolvedScalaVersion, String scalaMainVersion )
432+
private List<Artifact> getScalaScoveragePluginArtifacts(String resolvedScalaVersion, String scalaMainVersion )
431433
throws ArtifactNotFoundException, ArtifactResolutionException
432434
{
433435
String resolvedScalacPluginVersion = scalacPluginVersion;
@@ -446,9 +448,11 @@ private Artifact getScalaScoveragePluginArtifact( String resolvedScalaVersion, S
446448

447449
try
448450
{
449-
return getResolvedArtifact(
450-
"org.scoverage", "scalac-scoverage-plugin_" + resolvedScalaVersion,
451-
resolvedScalacPluginVersion );
451+
List<Artifact> resolvedArtifacts = new ArrayList<>();
452+
resolvedArtifacts.add(getResolvedArtifact("org.scoverage", "scalac-scoverage-plugin_" + resolvedScalaVersion, resolvedScalacPluginVersion));
453+
resolvedArtifacts.add(getResolvedArtifact("org.scoverage", "scalac-scoverage-domain_" + scalaMainVersion, resolvedScalacPluginVersion));
454+
resolvedArtifacts.add(getResolvedArtifact("org.scoverage", "scalac-scoverage-serializer_" + scalaMainVersion, resolvedScalacPluginVersion));
455+
return resolvedArtifacts;
452456
}
453457
catch ( ArtifactNotFoundException | ArtifactResolutionException e )
454458
{
@@ -457,9 +461,9 @@ private Artifact getScalaScoveragePluginArtifact( String resolvedScalaVersion, S
457461
resolvedScalaVersion, resolvedScalacPluginVersion, scalaMainVersion, resolvedScalacPluginVersion ) );
458462

459463
// for scalac-scoverage-plugin versions up to 1.4.1
460-
return getResolvedArtifact(
461-
"org.scoverage", "scalac-scoverage-plugin_" + scalaMainVersion,
462-
resolvedScalacPluginVersion );
464+
return Collections.singletonList(
465+
getResolvedArtifact("org.scoverage", "scalac-scoverage-plugin_" + scalaMainVersion, resolvedScalacPluginVersion )
466+
);
463467
}
464468
}
465469

src/main/java/org/scoverage/plugin/SCoverageReportMojo.java

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.List;
2828
import java.util.Locale;
2929
import java.util.ResourceBundle;
30+
import java.util.concurrent.atomic.AtomicInteger;
3031

3132
import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
3233
import org.apache.maven.doxia.sink.Sink;
@@ -46,17 +47,18 @@
4647

4748
import scala.Option;
4849
import scala.Tuple2;
49-
import scala.collection.JavaConverters;
50-
import scala.collection.Seq;
51-
52-
import scoverage.Constants;
53-
import scoverage.Coverage;
54-
import scoverage.IOUtils;
55-
import scoverage.Serializer;
56-
import scoverage.report.CoberturaXmlWriter;
57-
import scoverage.report.CoverageAggregator;
58-
import scoverage.report.ScoverageHtmlWriter;
59-
import scoverage.report.ScoverageXmlWriter;
50+
import scala.collection.immutable.Seq;
51+
import scala.jdk.javaapi.CollectionConverters;
52+
53+
import scoverage.domain.Constants;
54+
import scoverage.domain.Coverage;
55+
import scoverage.domain.Statement;
56+
import scoverage.reporter.IOUtils;
57+
import scoverage.serialize.Serializer;
58+
import scoverage.reporter.CoberturaXmlWriter;
59+
import scoverage.reporter.CoverageAggregator;
60+
import scoverage.reporter.ScoverageHtmlWriter;
61+
import scoverage.reporter.ScoverageXmlWriter;
6062

6163
/**
6264
* Generates code coverage by unit tests report in forked {@code scoverage} life cycle.
@@ -419,13 +421,13 @@ private void generateReports()
419421

420422
File coverageFile = Serializer.coverageFile( dataDirectory );
421423
getLog().info( String.format( "Reading scoverage instrumentation [%s]...", coverageFile.getAbsolutePath() ) );
422-
Coverage coverage = Serializer.deserialize( coverageFile );
424+
Coverage coverage = Serializer.deserialize( coverageFile, project.getBasedir() );
423425

424426
getLog().info( String.format( "Reading scoverage measurements [%s*]...",
425427
new File( dataDirectory, Constants.MeasurementsPrefix() ).getAbsolutePath() ) );
426428
List<File> measurementFiles = Arrays.asList( IOUtils.findMeasurementFiles( dataDirectory ) );
427429
scala.collection.Set<Tuple2<Object, String>> measurements =
428-
IOUtils.invoked( JavaConverters.asScalaBuffer( measurementFiles ) );
430+
IOUtils.invoked( CollectionConverters.asScala( measurementFiles ).toSeq(), encoding );
429431
coverage.apply( measurements );
430432

431433
getLog().info( "Generating coverage reports..." );
@@ -436,6 +438,8 @@ private void generateReports()
436438
private void generateAggregatedReports()
437439
throws MavenReportException
438440
{
441+
Coverage coverage = new Coverage();
442+
AtomicInteger id = new AtomicInteger();
439443
List<File> scoverageDataDirs = new ArrayList<File>();
440444
List<File> sourceRoots = new ArrayList<File>();
441445
MavenProject topLevelModule = null;
@@ -451,6 +455,33 @@ else if ( !module.getPackaging().equals( "pom" ) )
451455
if ( scoverageDataDir.isDirectory() )
452456
{
453457
scoverageDataDirs.add( scoverageDataDir );
458+
File coverageFile = Serializer.coverageFile(scoverageDataDir);
459+
if (coverageFile.exists()) {
460+
Coverage subCoverage = Serializer.deserialize(coverageFile, module.getBasedir());
461+
List<File> measurementFiles = Arrays.asList( IOUtils.findMeasurementFiles( scoverageDataDir ) );
462+
scala.collection.Set<Tuple2<Object, String>> measurements =
463+
IOUtils.invoked( CollectionConverters.asScala( measurementFiles ).toSeq(), encoding );
464+
subCoverage.apply( measurements );
465+
subCoverage.statements().foreach(statement -> {
466+
int statementId = id.getAndIncrement();
467+
Statement copy = statement.copy(
468+
statement.location(),
469+
statementId,
470+
statement.start(),
471+
statement.end(),
472+
statement.line(),
473+
statement.desc(),
474+
statement.symbolName(),
475+
statement.treeName(),
476+
statement.branch(),
477+
statement.count(),
478+
statement.ignored(),
479+
statement.tests()
480+
);
481+
coverage.add(copy);
482+
return null;
483+
});
484+
}
454485

455486
File sourceRootsFile = new File( scoverageDataDir, "source.roots" );
456487
if ( sourceRootsFile.isFile() )
@@ -510,9 +541,6 @@ else if ( !module.getPackaging().equals( "pom" ) )
510541
mkdirs( topLevelModuleOutputDirectory );
511542
mkdirs( topLevelModuleXmlOutputDirectory );
512543

513-
Coverage coverage =
514-
CoverageAggregator.aggregatedCoverage( JavaConverters.asScalaBuffer( scoverageDataDirs ).toSeq() );
515-
516544
getLog().info( "Generating coverage aggregated reports..." );
517545
writeReports( coverage, sourceRoots, topLevelModuleXmlOutputDirectory, topLevelModuleXmlOutputDirectory,
518546
topLevelModuleOutputDirectory );
@@ -522,13 +550,13 @@ else if ( !module.getPackaging().equals( "pom" ) )
522550
private void writeReports( Coverage coverage, List<File> sourceRoots, File coberturaXmlOutputDirectory,
523551
File scoverageXmlOutputDirectory, File scoverageHtmlOutputDirectory )
524552
{
525-
Seq<File> sourceRootsAsScalaSeq = JavaConverters.asScalaBuffer( sourceRoots );
553+
Seq<File> sourceRootsAsScalaSeq = CollectionConverters.asScala( sourceRoots ).toSeq();
526554

527-
new CoberturaXmlWriter( sourceRootsAsScalaSeq, coberturaXmlOutputDirectory ).write( coverage );
555+
new CoberturaXmlWriter( sourceRootsAsScalaSeq, coberturaXmlOutputDirectory, Option.<String>apply( encoding ) ).write( coverage );
528556
getLog().info( String.format( "Written Cobertura XML report [%s]",
529557
new File( coberturaXmlOutputDirectory, "cobertura.xml" ).getAbsolutePath() ) );
530558

531-
new ScoverageXmlWriter( sourceRootsAsScalaSeq, scoverageXmlOutputDirectory, false ).write( coverage );
559+
new ScoverageXmlWriter( sourceRootsAsScalaSeq, scoverageXmlOutputDirectory, false, Option.<String>apply( encoding ) ).write( coverage );
532560
getLog().info( String.format( "Written XML coverage report [%s]",
533561
new File( scoverageXmlOutputDirectory, "scoverage.xml" ).getAbsolutePath() ) );
534562

0 commit comments

Comments
 (0)