Skip to content

Commit 2154951

Browse files
committed
Added support for scoverage-compiler-plugin > 2.0.0
1 parent 163bbe9 commit 2154951

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.siterenderer.sink.SiteRendererSink;
@@ -45,17 +46,18 @@
4546

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

6062
/**
6163
* Generates code coverage by unit tests report in forked {@code scoverage} life cycle.
@@ -418,13 +420,13 @@ private void generateReports()
418420

419421
File coverageFile = Serializer.coverageFile( dataDirectory );
420422
getLog().info( String.format( "Reading scoverage instrumentation [%s]...", coverageFile.getAbsolutePath() ) );
421-
Coverage coverage = Serializer.deserialize( coverageFile );
423+
Coverage coverage = Serializer.deserialize( coverageFile, project.getBasedir() );
422424

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

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

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

512-
Coverage coverage =
513-
CoverageAggregator.aggregatedCoverage( JavaConverters.asScalaBuffer( scoverageDataDirs ).toSeq() );
514-
515543
getLog().info( "Generating coverage aggregated reports..." );
516544
writeReports( coverage, sourceRoots, topLevelModuleXmlOutputDirectory, topLevelModuleXmlOutputDirectory,
517545
topLevelModuleOutputDirectory );
@@ -521,13 +549,13 @@ else if ( !module.getPackaging().equals( "pom" ) )
521549
private void writeReports( Coverage coverage, List<File> sourceRoots, File coberturaXmlOutputDirectory,
522550
File scoverageXmlOutputDirectory, File scoverageHtmlOutputDirectory )
523551
{
524-
Seq<File> sourceRootsAsScalaSeq = JavaConverters.asScalaBuffer( sourceRoots );
552+
Seq<File> sourceRootsAsScalaSeq = CollectionConverters.asScala( sourceRoots ).toSeq();
525553

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

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

0 commit comments

Comments
 (0)