Skip to content

Commit

Permalink
#612: Fixes java.lang.ClassNotFoundException: scala.reflect.api.Trees (
Browse files Browse the repository at this point in the history
…#613)

sbt detaches the classloader early while lazy initialization of AirSpecLogger is running
  • Loading branch information
xerial committed Aug 17, 2019
1 parent 44b84d3 commit 06b70d8
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 11 deletions.
7 changes: 2 additions & 5 deletions airspec/src/main/scala/wvlet/airspec/AirSpec.scala
Expand Up @@ -16,6 +16,7 @@ package wvlet.airspec
import wvlet.airframe.Design
import wvlet.airspec.spi.{Asserts, RichAsserts}
import wvlet.airframe.surface.MethodSurface
import wvlet.airspec

import scala.language.experimental.macros
import scala.reflect.macros.{blackbox => sm}
Expand Down Expand Up @@ -84,7 +85,7 @@ private[airspec] trait AirSpecSpi {
protected def afterAll: Unit = {}

// Returns true if this is running in TravisCI
protected def inTravisCI: Boolean = AirSpecSpi.inTravisCI
protected def inTravisCI: Boolean = airspec.inTravisCI

protected def isScalaJS: Boolean = compat.isScalaJs
}
Expand Down Expand Up @@ -113,10 +114,6 @@ private[airspec] object AirSpecSpi {
q"if(wvlet.airspec.compat.isScalaJs) { ${c.prefix}._methodSurfaces = wvlet.airframe.surface.Surface.methodsOf[${t}] }"
}

private[airspec] def inTravisCI: Boolean = {
sys.env.get("TRAVIS").map(_.toBoolean).getOrElse(false)
}

private[airspec] def decodeClassName(clsName: String): String = {
// the full class name
val decodedClassName = scala.reflect.NameTransformer.decode(clsName)
Expand Down
4 changes: 4 additions & 0 deletions airspec/src/main/scala/wvlet/airspec/package.scala
Expand Up @@ -19,4 +19,8 @@ package wvlet
package object airspec {
// For Scala, Scala.js compatibility
val compat: CompatApi = wvlet.airspec.Compat

private[airspec] lazy val inTravisCI: Boolean = {
sys.env.get("TRAVIS").map(_.toBoolean).getOrElse(false)
}
}
Expand Up @@ -18,9 +18,8 @@ import java.util.concurrent.TimeUnit
import sbt.testing._
import wvlet.airframe.log.AnsiColorPalette
import wvlet.airframe.metrics.ElapsedTime
import wvlet.airspec.AirSpecSpi
import wvlet.airspec.spi.AirSpecFailureBase
import wvlet.log.{ConsoleLogHandler, LogFormatter, Logger}
import wvlet.log.{LogFormatter, Logger}

private[airspec] case class AirSpecEvent(taskDef: TaskDef,
override val fullyQualifiedName: String,
Expand All @@ -38,9 +37,7 @@ private[airspec] case class AirSpecEvent(taskDef: TaskDef,
*/
private[airspec] class AirSpecLogger() extends AnsiColorPalette {
// Always use ANSI color log for Travis because sbt's ansiCodeSupported() returns false even though it can show ANSI colors
private val useAnciColor = {
AirSpecSpi.inTravisCI || true //|| sbtLoggers.forall(_.ansiCodesSupported())
}
private val useAnciColor = true

private val airSpecLogger = {
val l = Logger("wvlet.airspec.runner.AirSpecLogger")
Expand Down
Expand Up @@ -25,7 +25,7 @@ import scala.util.matching.Regex
private[airspec] class AirSpecRunner(config: AirSpecConfig, val remoteArgs: Array[String], classLoader: ClassLoader)
extends sbt.testing.Runner {

private val taskLogger = new AirSpecLogger()
private lazy val taskLogger = new AirSpecLogger()

override def args: Array[String] = config.args

Expand Down

0 comments on commit 06b70d8

Please sign in to comment.