From 4263195436228ab5e4e781c1b1ec3090add59e35 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Mon, 19 Mar 2018 21:05:34 -0700 Subject: avoid showing a stack trace if the ScalaJSModule gives a linking error, since the stdout will have the necessary information for debugging anyway --- .../0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala | 15 +++++++++++++-- .../1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala | 18 +++++++++++++++--- scalajslib/src/mill/scalajslib/ScalaJSBridge.scala | 7 ++++--- scalajslib/src/mill/scalajslib/ScalaJSModule.scala | 5 ++--- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala b/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala index 80f84c3d..6f14db19 100644 --- a/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala +++ b/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala @@ -4,6 +4,7 @@ package bridge import java.io.File +import mill.eval.Result import org.scalajs.core.tools.io.IRFileCache.IRContainer import org.scalajs.core.tools.io._ import org.scalajs.core.tools.jsdep.ResolvedJSDependency @@ -14,7 +15,12 @@ import org.scalajs.jsenv.nodejs._ import org.scalajs.testadapter.TestAdapter class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { - def link(sources: Array[File], libraries: Array[File], dest: File, main: String, fullOpt: Boolean, moduleKind: ModuleKind): Unit = { + def link(sources: Array[File], + libraries: Array[File], + dest: File, + main: String, + fullOpt: Boolean, + moduleKind: ModuleKind) = { val semantics = fullOpt match { case true => Semantics.Defaults.optimized case false => Semantics.Defaults @@ -35,7 +41,12 @@ class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { val destFile = AtomicWritableFileVirtualJSFile(dest) val logger = new ScalaConsoleLogger val initializer = Option(main).map { cls => ModuleInitializer.mainMethodWithArgs(cls, "main") } - linker.link(sourceSJSIRs ++ jarSJSIRs, initializer.toSeq, destFile, logger) + try { + linker.link(sourceSJSIRs ++ jarSJSIRs, initializer.toSeq, destFile, logger) + Result.Success(dest) + }catch {case e: org.scalajs.core.tools.linker.LinkingException => + Result.Failure(e.getMessage) + } } def run(config: NodeJSConfig, linkedFile: File): Unit = { diff --git a/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala b/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala index 796fe212..534d45bf 100644 --- a/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala +++ b/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala @@ -4,15 +4,21 @@ package bridge import java.io.File +import mill.eval.Result import org.scalajs.core.tools.io._ -import org.scalajs.core.tools.linker.{ModuleInitializer, StandardLinker, Semantics, ModuleKind => ScalaJSModuleKind} +import org.scalajs.core.tools.linker.{ModuleInitializer, Semantics, StandardLinker, ModuleKind => ScalaJSModuleKind} import org.scalajs.core.tools.logging.ScalaConsoleLogger import org.scalajs.jsenv.ConsoleJSConsole import org.scalajs.jsenv.nodejs._ import org.scalajs.testadapter.TestAdapter class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { - def link(sources: Array[File], libraries: Array[File], dest: File, main: String, fullOpt: Boolean, moduleKind: ModuleKind): Unit = { + def link(sources: Array[File], + libraries: Array[File], + dest: File, + main: String, + fullOpt: Boolean, + moduleKind: ModuleKind) = { val semantics = fullOpt match { case true => Semantics.Defaults.optimized case false => Semantics.Defaults @@ -34,7 +40,13 @@ class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { val destFile = AtomicWritableFileVirtualJSFile(dest) val logger = new ScalaConsoleLogger val initializer = Option(main).map { cls => ModuleInitializer.mainMethodWithArgs(cls, "main") } - linker.link(sourceIRs ++ libraryIRs, initializer.toSeq, destFile, logger) + + try { + linker.link(sourceIRs ++ libraryIRs, initializer.toSeq, destFile, logger) + Result.Success(dest) + }catch {case e: org.scalajs.core.tools.linker.LinkingException => + Result.Failure(e.getMessage) + } } def run(config: NodeJSConfig, linkedFile: File): Unit = { diff --git a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala index 59ed6450..c9947e88 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala @@ -5,6 +5,7 @@ import java.net.URLClassLoader import ammonite.ops.Path import mill.define.Discover +import mill.eval.Result import mill.util.Ctx import mill.{Agg, T} @@ -50,7 +51,7 @@ class ScalaJSWorker { main: Option[String], fullOpt: Boolean, moduleKind: ModuleKind) - (implicit ctx: Ctx.Home): Unit = { + (implicit ctx: Ctx.Home): Result[Path] = { bridge(toolsClasspath).link( sources.items.map(_.toIO).toArray, libraries.items.map(_.toIO).toArray, @@ -58,7 +59,7 @@ class ScalaJSWorker { main.orNull, fullOpt, moduleKind - ) + ).map(Path(_)) } def run(toolsClasspath: Agg[Path], config: NodeJSConfig, linkedFile: File) @@ -82,7 +83,7 @@ trait ScalaJSBridge { dest: File, main: String, fullOpt: Boolean, - moduleKind: ModuleKind): Unit + moduleKind: ModuleKind): Result[File] def run(config: NodeJSConfig, linkedFile: File): Unit diff --git a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala index 099b8bc2..3b566e13 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala @@ -117,7 +117,7 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => runClasspath: Agg[PathRef], mainClass: Option[String], mode: OptimizeMode, - moduleKind: ModuleKind)(implicit ctx: Ctx): PathRef = { + moduleKind: ModuleKind)(implicit ctx: Ctx): Result[PathRef] = { val outputPath = ctx.dest / "out.js" mkdir(ctx.dest) @@ -137,8 +137,7 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => mainClass, mode == FullOpt, moduleKind - ) - PathRef(outputPath) + ).map(PathRef(_)) } override def scalacPluginIvyDeps = T{ -- cgit v1.2.3