diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 05bdda9c1..134299a51 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -44,6 +44,14 @@ final class xMain extends xsbti.AppMain { val instance = clazz.getField("MODULE$").get(null) val runMethod = clazz.getMethod("run", classOf[xsbti.AppConfiguration]) try { + new Thread("sbt-load-global-instance") { + setDaemon(true) + override def run(): Unit = { + // This preloads the scala.tools.nsc.Global as a performance optimization" + loader.loadClass("sbt.internal.parser.SbtParser$").getField("MODULE$").get(null) + () + } + }.start() runMethod.invoke(instance, modifiedConfiguration).asInstanceOf[xsbti.MainResult] } catch { case e: InvocationTargetException => diff --git a/main/src/main/scala/sbt/internal/parser/SbtParser.scala b/main/src/main/scala/sbt/internal/parser/SbtParser.scala index 22020d30d..c6d0ac2ca 100644 --- a/main/src/main/scala/sbt/internal/parser/SbtParser.scala +++ b/main/src/main/scala/sbt/internal/parser/SbtParser.scala @@ -108,7 +108,7 @@ private[sbt] object SbtParser { private[sbt] final val globalReporter = new UniqueParserReporter private[sbt] var scalacGlobalInitReporter: Option[ConsoleReporter] = None - private[sbt] final lazy val defaultGlobalForParser = { + private[sbt] final val defaultGlobalForParser = { val options = "-cp" :: s"$defaultClasspath" :: "-Yrangepos" :: Nil val reportError = (msg: String) => System.err.println(msg) val command = new CompilerCommand(options, reportError)