From b827c3db4d7312f80adf1cf442689fae9e8dde4d Mon Sep 17 00:00:00 2001 From: Jaden Peterson Date: Wed, 22 Jan 2025 16:20:43 -0500 Subject: [PATCH] fixup! Catch `ClassFormatError`s in ScalacInvoker --- .../bazel/rulesscala/scalac/ScalacWorker.java | 17 ++--------------- .../scalac/scala_2/ScalacInvoker.java | 16 ++++++++++++---- test/shell/test_macros.sh | 2 +- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/java/io/bazel/rulesscala/scalac/ScalacWorker.java b/src/java/io/bazel/rulesscala/scalac/ScalacWorker.java index dfc944de9..6a6679762 100644 --- a/src/java/io/bazel/rulesscala/scalac/ScalacWorker.java +++ b/src/java/io/bazel/rulesscala/scalac/ScalacWorker.java @@ -237,7 +237,7 @@ private static String[] getPluginParamsFrom(CompileOptions ops) { } if (ops.directTargets.length > 0) { pluginParams.add( - "-P:dependency-analyzer:direct-targets:" + encodeStringSeqPluginParam(ops.directTargets)); + "-P:dependency-analyzer:direct-targets:" + encodeStringSeqPluginParam(ops.directTargets)); } if (ops.indirectJars.length > 0) { pluginParams.add( @@ -269,20 +269,7 @@ private static void compileScalaSources(CompileOptions ops, String[] scalaSource String[] compilerArgs = merge(ops.scalaOpts, pluginArgs, constParams, pluginParams, scalaSources); - ScalacInvokerResults compilerResults; - - try { - compilerResults = ScalacInvoker.invokeCompiler(ops, compilerArgs); - } catch (CompilationFailed exception) { - if (exception.getCause() instanceof ClassFormatError) { - throw new Exception( - "You may have declared a target containing a macro as a `scala_library` target instead of a `scala_macro_library` target.", - exception - ); - } - - throw exception; - } + ScalacInvokerResults compilerResults = ScalacInvoker.invokeCompiler(ops, compilerArgs); if (ops.printCompileTime) { System.err.println("Compiler runtime: " + (compilerResults.stopTime - compilerResults.startTime) + "ms."); diff --git a/src/java/io/bazel/rulesscala/scalac/scala_2/ScalacInvoker.java b/src/java/io/bazel/rulesscala/scalac/scala_2/ScalacInvoker.java index 4f1e17501..3b6fd319e 100644 --- a/src/java/io/bazel/rulesscala/scalac/scala_2/ScalacInvoker.java +++ b/src/java/io/bazel/rulesscala/scalac/scala_2/ScalacInvoker.java @@ -11,14 +11,14 @@ //Invokes Scala 2 compiler class ScalacInvoker{ - + public static ScalacInvokerResults invokeCompiler(CompileOptions ops, String[] compilerArgs) throws IOException, Exception{ ReportableMainClass comp = new ReportableMainClass(ops); ScalacInvokerResults results = new ScalacInvokerResults(); - + results.startTime = System.currentTimeMillis(); try { comp.process(compilerArgs); @@ -28,7 +28,15 @@ public static ScalacInvokerResults invokeCompiler(CompileOptions ops, String[] c } else if (ex.toString().contains("java.lang.StackOverflowError")) { throw new ScalacWorker.CompilationFailed("with StackOverflowError", ex); } else if (isMacroException(ex)) { - throw new ScalacWorker.CompilationFailed("during macro expansion", ex); + String reason; + + if (ex instanceof ClassFormatError) { + reason = "during macro expansion. You may have declared a target containing a macro as a `scala_library` target instead of a `scala_macro_library` target"; + } else { + reason = "during macro expansion"; + } + + throw new ScalacWorker.CompilationFailed(reason, ex); } else { throw ex; } @@ -37,7 +45,7 @@ public static ScalacInvokerResults invokeCompiler(CompileOptions ops, String[] c } results.stopTime = System.currentTimeMillis(); - + ConsoleReporter reporter = (ConsoleReporter) comp.getReporter(); if (reporter == null) { // Can happen only when `ReportableMainClass::newCompiler` was not invoked, diff --git a/test/shell/test_macros.sh b/test/shell/test_macros.sh index 05ef82490..468c87bca 100755 --- a/test/shell/test_macros.sh +++ b/test/shell/test_macros.sh @@ -6,7 +6,7 @@ runner=$(get_test_runner "${1:-local}") incorrect_macro_user_does_not_build() { (! bazel build //test/macros:incorrect-macro-user) |& - grep --fixed-strings 'java.lang.Exception: You may have declared a target containing a macro as a `scala_library` target instead of a `scala_macro_library` target.' + grep --fixed-strings 'Build failure during macro expansion. You may have declared a target containing a macro as a `scala_library` target instead of a `scala_macro_library` target' } correct_macro_user_builds() {