Skip to content

Commit 76ffd77

Browse files
committed
Added scales writer.
1 parent b835f3c commit 76ffd77

File tree

5 files changed

+37
-15
lines changed

5 files changed

+37
-15
lines changed

src/main/scala/scales/Instrumenter.scala

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
package scales
22

33
import java.util.concurrent.atomic.AtomicInteger
4-
import scala.collection.mutable.ListBuffer
54
import scala.reflect.internal.util.SourceFile
6-
import scala.collection.mutable
75

86
/** @author Stephen Samuel */
97
object Instrumentation {
108

119
val ids = new AtomicInteger(0)
1210
val coverage = new Coverage
1311

14-
def add(source: SourceFile, _package: String, _class: String, _method: String, start: Int, line: Int) = {
12+
def add(source: SourceFile, _package: String, _class: String, _method: String, start: Int, line: Int, desc: String) = {
1513
val id = ids.incrementAndGet()
16-
val stmt = MeasuredStatement(source, _package, _class, _method: String, id, start, line)
14+
val stmt = MeasuredStatement(source, _package, _class, _method: String, id, start, line, desc)
1715
coverage.add(stmt)
1816
stmt
1917
}

src/main/scala/scales/coverage.scala

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package scales
33
import scala.collection.mutable.ListBuffer
44
import scala.reflect.internal.util.SourceFile
55
import scala.collection.mutable
6-
import java.lang.String
7-
import scala.Predef.String
86

97
/** @author Stephen Samuel */
108
class Coverage extends StatementCoverage {
@@ -15,8 +13,10 @@ class Coverage extends StatementCoverage {
1513
val classNames = new ListBuffer[String]()
1614
val methodNames = new ListBuffer[String]()
1715

18-
def loc = sources.map(src => new String(src.content).replaceAll("^\\s.*$", "").split("\n").size).sum
19-
def ncloc = sources.map(src => new String(src.content).replaceAll("/\\*.*?\\*/", "").replace("//.*$", "").count(_ == '\n')).sum
16+
def loc = sources.map(src => new String(src.content).replaceAll("^\\s.*$", "").split("\n").length).sum
17+
def ncloc =
18+
sources
19+
.map(src => new String(src.content).replaceAll("/\\*.*?\\*/", "").replace("//.*$", "").split("\n").count(_ == '\n')).sum
2020
def packageCount = packageNames.size
2121
def classCount = classNames.size
2222
def methodCount = methodNames.size
@@ -57,7 +57,7 @@ case class MeasuredStatement(source: SourceFile,
5757
id: Int,
5858
start: Int,
5959
line: Int,
60-
var end: Int = -1) {
60+
desc: String) {
6161
val fqn = (_package + ".").replace("<empty>.", "") + _class
6262
var count = 0
6363
def invoked: Unit = count = count + 1

src/main/scala/scales/plugin.scala

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import scala.tools.nsc.plugins.{PluginComponent, Plugin}
44
import scala.tools.nsc.Global
55
import scala.tools.nsc.transform.{Transform, TypingTransformers}
66
import scala.tools.nsc.ast.TreeDSL
7-
import scales.report.ScalesHtmlWriter
7+
import scales.report.{ScalesXmlWriter, ScalesHtmlWriter}
88
import scala.reflect.internal.util.SourceFile
99

1010
/** @author Stephen Samuel */
@@ -30,6 +30,7 @@ class ScalesComponent(val global: Global) extends PluginComponent with TypingTra
3030
println("Statements=" + Instrumentation.coverage.statements)
3131
val writer = ScalesHtmlWriter
3232
writer.write(Instrumentation.coverage)
33+
ScalesXmlWriter.write(Instrumentation.coverage)
3334
}
3435
}
3536

@@ -63,7 +64,8 @@ class ScalesComponent(val global: Global) extends PluginComponent with TypingTra
6364
_safeSource(tree) match {
6465
case None => tree
6566
case Some(source) =>
66-
val instruction = Instrumentation.add(source, _package, _class, _method, _safeStart(tree), _safeLine(tree))
67+
val instruction =
68+
Instrumentation.add(source, _package, _class, _method, _safeStart(tree), _safeLine(tree), tree.toString())
6769
val apply = invokeCall(instruction.id)
6870
localTyper.typed(atPos(tree.pos)(apply))
6971
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package scales.report
22

3-
/** @author Stephen Samuel */
4-
class CoberturaXmlWriter {
3+
import scales.Coverage
54

5+
/** @author Stephen Samuel */
6+
class CoberturaXmlWriter extends ScalesWriter {
7+
def write(coverage: Coverage) {}
68
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,31 @@
11
package scales.report
22

3-
import scales.Coverage
3+
import scales.{MeasuredStatement, Coverage}
4+
import java.io.{FileWriter, BufferedWriter, File}
45

56
/** @author Stephen Samuel */
6-
class ScalesXmlWriter extends ScalesWriter {
7+
object ScalesXmlWriter extends ScalesWriter {
78

89
def write(coverage: Coverage) = {
10+
val statements = statements2xml(coverage.statements)
11+
val xml = <scales timestamp={System.currentTimeMillis.toString}>
12+
{statements}
13+
</scales>
14+
write("scales.xml", xml.toString())
15+
}
916

17+
def write(path: String, data: AnyRef) {
18+
println(s"Writing to path $path")
19+
val file = new File(path)
20+
val writer = new BufferedWriter(new FileWriter(file))
21+
writer.write(data.toString)
22+
writer.close()
1023
}
24+
25+
def statements2xml(statements: Iterable[MeasuredStatement]) = statements.map(arg => statement2xml(arg))
26+
def statement2xml(statement: MeasuredStatement) =
27+
<statement source={statement.source.path} package={statement._package} class={statement._class} method={statement._method}
28+
start={statement.start.toString} line={statement.line.toString} count={statement.count.toString}>
29+
{statement.desc}
30+
</statement>
1131
}

0 commit comments

Comments
 (0)