From 5988296e5bca4c2c7cae8e291c724b22d2adb35f Mon Sep 17 00:00:00 2001 From: Donald Duo Zhao Date: Thu, 11 Jun 2026 16:26:58 -0700 Subject: [PATCH] Handle `RuntimeException`s in `DaggerSuperficialValidation` getMessage / trace generation RELNOTES=N/A PiperOrigin-RevId: 930799820 --- .../base/DaggerSuperficialValidation.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/dagger-compiler/main/java/dagger/internal/codegen/base/DaggerSuperficialValidation.java b/dagger-compiler/main/java/dagger/internal/codegen/base/DaggerSuperficialValidation.java index acdbc81cb14..2efa17b88d8 100644 --- a/dagger-compiler/main/java/dagger/internal/codegen/base/DaggerSuperficialValidation.java +++ b/dagger-compiler/main/java/dagger/internal/codegen/base/DaggerSuperficialValidation.java @@ -68,6 +68,8 @@ import dagger.internal.codegen.xprocessing.XExecutableTypes; import dagger.internal.codegen.xprocessing.XTypeNames; import dagger.internal.codegen.xprocessing.XTypes; +import java.io.PrintWriter; +import java.io.StringWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -646,7 +648,23 @@ private ValidationException append(XAnnotationValue value) { @Override public String getMessage() { - return String.format("\n Validation trace:\n => %s", getTrace()); + try { + return String.format("\n Validation trace:\n => %s", getTrace()); + } catch (RuntimeException e) { + // TODO(b/522448305): Remove this workaround once the underlying KSP bug is fixed. + // Note: This block (if executed) will be loaded from a different class loader, and + // therefore Guava dependency is avoided in the implementation. + StringWriter stringWriter = new StringWriter(); + try (PrintWriter printWriter = new PrintWriter(stringWriter)) { + e.printStackTrace(printWriter); + } + return String.format( + "\n Validation trace (incomplete due to %s):\n\n" + + "// Stack trace in message (start)\n" + + "%s" + + "// Stack trace in message (end)\n", + e.getClass().getSimpleName(), stringWriter.toString()); + } } public String getTrace() {