From 74927af356d0ed9da0158ca2eb624bdfa6f63c25 Mon Sep 17 00:00:00 2001 From: Grzegorz Slowikowski Date: Sun, 28 Apr 2019 20:00:11 +0200 Subject: [PATCH 1/3] Fix some of the warnings reported by compilation with Scala 2.13.x There are two remaining kinds of warnings, which cannot be fixed simply: 1. [warn] .../scalac-scoverage-plugin/src/main/scala/scoverage/coverage.scala:39:80: object DeprecatedDoubleOrdering in object Ordering is deprecated (since 2.13.0): There are multiple ways to order Doubles (Ordering.Double.TotalOrdering, Ordering.Double.IeeeOrdering). Specify one by using a local import, assigning an implicit val, or passing it explicitly. See the documentation for details. [warn] def risks(limit: Int) = classes.toSeq.sortBy(_.statementCount).reverse.sortBy(_.statementCoverage).take(limit) [warn] ^ There are no Ordering.Double.TotalOrdering and Ordering.Double.IeeeOrdering classes in previous Scala versions. 2. [warn] .../scalac-scoverage-plugin/src/test/scala/scoverage/ScoverageCompiler.scala:71:97: class Reporter in package reporters is deprecated (since 2.13.0): Use reflect.internal.Reporter [warn] class ScoverageCompiler(settings: scala.tools.nsc.Settings, reporter: scala.tools.nsc.reporters.Reporter) 'reflect.internal.Reporter' class cannot be used because 'scoverage.ScoverageCompiler' class extends 'scala.tools.nsc.Global' class, and it requires 'scala.tools.nsc.reporters.Reporter' as a constructor parameter. --- .../src/main/scala/scoverage/report/CoverageAggregator.scala | 2 +- .../src/test/scala/scoverage/CoverageMetricsTest.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scalac-scoverage-plugin/src/main/scala/scoverage/report/CoverageAggregator.scala b/scalac-scoverage-plugin/src/main/scala/scoverage/report/CoverageAggregator.scala index cbd70dbc..91500271 100644 --- a/scalac-scoverage-plugin/src/main/scala/scoverage/report/CoverageAggregator.scala +++ b/scalac-scoverage-plugin/src/main/scala/scoverage/report/CoverageAggregator.scala @@ -28,7 +28,7 @@ object CoverageAggregator { if (coverageFile.exists) { val subcoverage: Coverage = Serializer.deserialize(coverageFile) val measurementFiles: Array[File] = IOUtils.findMeasurementFiles(dataDir) - val measurements = IOUtils.invoked(measurementFiles) + val measurements = IOUtils.invoked(measurementFiles.toIndexedSeq) subcoverage.apply(measurements) subcoverage.statements foreach { stmt => // need to ensure all the ids are unique otherwise the coverage object will have stmt collisions diff --git a/scalac-scoverage-plugin/src/test/scala/scoverage/CoverageMetricsTest.scala b/scalac-scoverage-plugin/src/test/scala/scoverage/CoverageMetricsTest.scala index 2992ae1b..a2453b0a 100644 --- a/scalac-scoverage-plugin/src/test/scala/scoverage/CoverageMetricsTest.scala +++ b/scalac-scoverage-plugin/src/test/scala/scoverage/CoverageMetricsTest.scala @@ -21,7 +21,7 @@ class CoverageMetricsTest extends FreeSpec with Matchers { override def ignoredStatements: Iterable[Statement] = Seq() } metrics.branchCount shouldBe 0 - metrics.branchCoverage - 1 shouldBe < (0.0001) + metrics.branchCoverage shouldBe 1.0 +- 0.0001 } "no branches with no invoked statements should have 0% branch coverage" in { From f8e707d75cc48b6b56ccea6b84f070a4d7ba8afb Mon Sep 17 00:00:00 2001 From: Grzegorz Slowikowski Date: Sun, 28 Apr 2019 21:30:30 +0200 Subject: [PATCH 2/3] Add '-deprecation' option to ScoverageCompiler and fix reported deprecation warnings All warning are macro-related and reported when Scala version is >= 2.11. There were three kinds: 1. scoverage_snippet6266375223143133247.scala:5: warning: macro defs must have explicitly specified return types (inference of Unit from macro impl's c.Expr[Unit] is deprecated and is going to stop working in 2.12) def test = macro testImpl ^ 2. scoverage_snippet6266375223143133247.scala:6: warning: type Context in package macros is deprecated: Use blackbox.Context or whitebox.Context instead def testImpl(c: Context): c.Expr[Unit] = { ^ 3. scoverage_snippet6689360552943102771.scala:6: warning: method literal in trait ExprUtils is deprecated: Use quasiquotes instead def poly[T: c.WeakTypeTag] = c.literal(c.weakTypeOf[T].toString) ^ --- .../src/test/scala/scoverage/MacroSupport.scala | 7 +++++++ .../scala/scoverage/PluginASTSupportTest.scala | 14 +++++++------- .../scala/scoverage/PluginCoverageTest.scala | 16 ++++++++-------- .../test/scala/scoverage/ScoverageCompiler.scala | 1 + 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/scalac-scoverage-plugin/src/test/scala/scoverage/MacroSupport.scala b/scalac-scoverage-plugin/src/test/scala/scoverage/MacroSupport.scala index acce0290..4e963fc9 100644 --- a/scalac-scoverage-plugin/src/test/scala/scoverage/MacroSupport.scala +++ b/scalac-scoverage-plugin/src/test/scala/scoverage/MacroSupport.scala @@ -4,6 +4,13 @@ import java.io.File trait MacroSupport { + val macroContextPackageName: String = if (ScoverageCompiler.ShortScalaVersion == "2.10") { + "scala.reflect.macros" + } + else { + "scala.reflect.macros.blackbox" + } + val macroSupportDeps = Seq(testClasses) private def testClasses: File = new File(s"./scalac-scoverage-plugin/target/scala-${ScoverageCompiler.ShortScalaVersion}/test-classes") diff --git a/scalac-scoverage-plugin/src/test/scala/scoverage/PluginASTSupportTest.scala b/scalac-scoverage-plugin/src/test/scala/scoverage/PluginASTSupportTest.scala index 7f2c6ffd..22356e5e 100644 --- a/scalac-scoverage-plugin/src/test/scala/scoverage/PluginASTSupportTest.scala +++ b/scalac-scoverage-plugin/src/test/scala/scoverage/PluginASTSupportTest.scala @@ -83,11 +83,11 @@ class PluginASTSupportTest test("scoverage component should ignore basic macros") { val compiler = ScoverageCompiler.default - compiler.compileCodeSnippet( """ + compiler.compileCodeSnippet( s""" | object MyMacro { | import scala.language.experimental.macros - | import scala.reflect.macros.Context - | def test = macro testImpl + | import ${macroContextPackageName}.Context + | def test: Unit = macro testImpl | def testImpl(c: Context): c.Expr[Unit] = { | import c.universe._ | reify { @@ -100,12 +100,12 @@ class PluginASTSupportTest test("scoverage component should ignore complex macros #11") { val compiler = ScoverageCompiler.default - compiler.compileCodeSnippet( """ object ComplexMacro { + compiler.compileCodeSnippet( s""" object ComplexMacro { | | import scala.language.experimental.macros - | import scala.reflect.macros.Context + | import ${macroContextPackageName}.Context | - | def debug(params: Any*) = macro debugImpl + | def debug(params: Any*): Unit = macro debugImpl | | def debugImpl(c: Context)(params: c.Expr[Any]*) = { | import c.universe._ @@ -114,7 +114,7 @@ class PluginASTSupportTest | case Literal(Constant(_)) => reify { print(param.splice) } | case _ => reify { | val variable = c.Expr[String](Literal(Constant(show(param.tree)))).splice - | print(s"$variable = ${param.splice}") + | print(s"$$variable = $${param.splice}") | } | }).tree | } diff --git a/scalac-scoverage-plugin/src/test/scala/scoverage/PluginCoverageTest.scala b/scalac-scoverage-plugin/src/test/scala/scoverage/PluginCoverageTest.scala index 8e328e23..3682b14f 100644 --- a/scalac-scoverage-plugin/src/test/scala/scoverage/PluginCoverageTest.scala +++ b/scalac-scoverage-plugin/src/test/scala/scoverage/PluginCoverageTest.scala @@ -35,18 +35,18 @@ class PluginCoverageTest } object Macros { - def poly[T] = macro Impl.poly[T] + def poly[T]: String = macro Impl.poly[T] }""" else - """ + s""" import scala.language.experimental.macros - import scala.reflect.macros.Context + import scala.reflect.macros.blackbox.Context class Impl(val c: Context) { import c.universe._ - def poly[T: c.WeakTypeTag] = c.literal(c.weakTypeOf[T].toString) + def poly[T: c.WeakTypeTag] = q"$${c.weakTypeOf[T].toString}" } object Macros { - def poly[T] = macro Impl.poly[T] + def poly[T]: String = macro Impl.poly[T] }""" compiler.compileCodeSnippet(code) assert(!compiler.reporter.hasErrors) @@ -269,11 +269,11 @@ class PluginCoverageTest test("plugin should not instrument local macro implementation") { val compiler = ScoverageCompiler.default - compiler.compileCodeSnippet( """ + compiler.compileCodeSnippet( s""" | object MyMacro { | import scala.language.experimental.macros - | import scala.reflect.macros.Context - | def test = macro testImpl + | import ${macroContextPackageName}.Context + | def test: Unit = macro testImpl | def testImpl(c: Context): c.Expr[Unit] = { | import c.universe._ | reify { diff --git a/scalac-scoverage-plugin/src/test/scala/scoverage/ScoverageCompiler.scala b/scalac-scoverage-plugin/src/test/scala/scoverage/ScoverageCompiler.scala index 16c3f31a..62349c20 100644 --- a/scalac-scoverage-plugin/src/test/scala/scoverage/ScoverageCompiler.scala +++ b/scalac-scoverage-plugin/src/test/scala/scoverage/ScoverageCompiler.scala @@ -22,6 +22,7 @@ object ScoverageCompiler { def settings: Settings = { val s = new scala.tools.nsc.Settings s.Xprint.value = List("all") + s.deprecation.value = true s.Yrangepos.value = true s.Yposdebug.value = true s.classpath.value = classPath.mkString(File.pathSeparator) From 88fc212687d7279b56dbc2fc9a29320424bf0d07 Mon Sep 17 00:00:00 2001 From: Grzegorz Slowikowski Date: Sun, 28 Apr 2019 21:52:06 +0200 Subject: [PATCH 3/3] Remove unneeded 'println' statements --- .../src/test/scala/scoverage/LocationTest.scala | 2 -- 1 file changed, 2 deletions(-) diff --git a/scalac-scoverage-plugin/src/test/scala/scoverage/LocationTest.scala b/scalac-scoverage-plugin/src/test/scala/scoverage/LocationTest.scala index 7e5f8d30..64b37a0d 100644 --- a/scalac-scoverage-plugin/src/test/scala/scoverage/LocationTest.scala +++ b/scalac-scoverage-plugin/src/test/scala/scoverage/LocationTest.scala @@ -187,8 +187,6 @@ class LocationTest extends FreeSpec with Matchers { compiler .compile( "package com.a; object A { def foo(b : B) : Unit = b.invoke }; trait B { def invoke : Unit }; class C { A.foo(new B { def invoke = () }) }") - println() - println(compiler.locations.result().mkString("\n")) val loc = compiler.locations.result().filter(_._1 == "Template").last._2 loc.packageName shouldBe "com.a" loc.className shouldBe "C"