Skip to content

Commit 0dcd42f

Browse files
committed
scoverage#171 Migrate ScoverageWriter from Java to Kotlin
1 parent 03a8cfa commit 0dcd42f

File tree

2 files changed

+137
-120
lines changed

2 files changed

+137
-120
lines changed

src/main/groovy/org/scoverage/ScoverageWriter.java

-120
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
package org.scoverage
2+
3+
import org.gradle.api.logging.Logger
4+
import scala.Option
5+
import scala.Some
6+
import scoverage.Constants
7+
import scoverage.Coverage
8+
import scoverage.report.CoberturaXmlWriter
9+
import scoverage.report.ScoverageHtmlWriter
10+
import scoverage.report.ScoverageXmlWriter
11+
import java.io.File
12+
import java.lang.reflect.Constructor
13+
14+
/**
15+
* Util for generating and saving coverage files.
16+
* Copied from sbt-scoverage and converted to Java to avoid dependency to Scala.
17+
*/
18+
class ScoverageWriter(private val logger: Logger) {
19+
20+
/**
21+
* Generates all reports from given data.
22+
*
23+
* @param sourceDirs directories with project sources
24+
* @param reportDir directory for generate reports
25+
* @param coverage coverage data
26+
* @param sourceEncoding the encoding of the source files
27+
* @param coverageOutputCobertura switch for Cobertura output
28+
* @param coverageOutputXML switch for Scoverage XML output
29+
* @param coverageOutputHTML switch for Scoverage HTML output
30+
* @param coverageDebug switch for Scoverage Debug output
31+
*/
32+
@Throws(ReflectiveOperationException::class)
33+
fun write(
34+
sourceDirs: Set<File>,
35+
reportDir: File,
36+
coverage: Coverage,
37+
sourceEncoding: String,
38+
coverageOutputCobertura: Boolean,
39+
coverageOutputXML: Boolean,
40+
coverageOutputHTML: Boolean,
41+
coverageDebug: Boolean
42+
) {
43+
44+
logger.info("[scoverage] Generating scoverage reports...")
45+
46+
reportDir.mkdirs()
47+
48+
val scalaBuffer = Class.forName("scala.collection.JavaConverters")
49+
.getMethod(
50+
"asScalaBuffer", java.util.List::class.java
51+
)
52+
.invoke(null, listOf(*sourceDirs.toTypedArray()))
53+
val sourceDirsSeq = scalaBuffer.javaClass.getMethod("toIndexedSeq").invoke(scalaBuffer)
54+
55+
if (coverageOutputCobertura) {
56+
val cst: Constructor<CoberturaXmlWriter> = try {
57+
CoberturaXmlWriter::class.java.getConstructor(
58+
Class.forName("scala.collection.immutable.Seq"),
59+
File::class.java
60+
)
61+
} catch (e: ReflectiveOperationException) {
62+
CoberturaXmlWriter::class.java.getConstructor(
63+
Class.forName("scala.collection.Seq"),
64+
File::class.java
65+
)
66+
}
67+
val writer = cst.newInstance(sourceDirsSeq, reportDir)
68+
writer.write(coverage)
69+
logger.info(
70+
"[scoverage] Written Cobertura XML report to " +
71+
reportDir.absolutePath +
72+
File.separator +
73+
"cobertura.xml"
74+
)
75+
}
76+
77+
if (coverageOutputXML) {
78+
val cst: Constructor<ScoverageXmlWriter> = try {
79+
ScoverageXmlWriter::class.java.getConstructor(
80+
Class.forName("scala.collection.immutable.Seq"),
81+
File::class.java,
82+
Boolean::class.java
83+
)
84+
} catch (e: ReflectiveOperationException) {
85+
ScoverageXmlWriter::class.java.getConstructor(
86+
Class.forName("scala.collection.Seq"),
87+
File::class.java,
88+
Boolean::class.java
89+
)
90+
}
91+
val writer = cst.newInstance(sourceDirsSeq, reportDir, false)
92+
writer.write(coverage)
93+
logger.info(
94+
"[scoverage] Written XML report to " +
95+
reportDir.absolutePath +
96+
File.separator +
97+
Constants.XMLReportFilename()
98+
)
99+
if (coverageDebug) {
100+
val writerDebug = cst.newInstance(sourceDirsSeq, reportDir, true)
101+
writerDebug.write(coverage)
102+
logger.info(
103+
"[scoverage] Written XML report with debug information to " +
104+
reportDir.absolutePath +
105+
File.separator +
106+
Constants.XMLReportFilenameWithDebug()
107+
)
108+
}
109+
}
110+
111+
if (coverageOutputHTML) {
112+
val cst: Constructor<ScoverageHtmlWriter> = try {
113+
ScoverageHtmlWriter::class.java.getConstructor(
114+
Class.forName("scala.collection.immutable.Seq"),
115+
File::class.java,
116+
Option::class.java
117+
)
118+
} catch (e: ReflectiveOperationException) {
119+
ScoverageHtmlWriter::class.java.getConstructor(
120+
Class.forName("scala.collection.Seq"),
121+
File::class.java,
122+
Option::class.java
123+
)
124+
}
125+
val writer = cst.newInstance(sourceDirsSeq, reportDir, Some(sourceEncoding))
126+
writer.write(coverage)
127+
logger.info(
128+
"[scoverage] Written HTML report to " +
129+
reportDir.absolutePath +
130+
File.separator +
131+
"index.html"
132+
)
133+
}
134+
135+
logger.info("[scoverage] Coverage reports completed")
136+
}
137+
}

0 commit comments

Comments
 (0)