Serialize StackTraceElement as part of exception.
PiperOrigin-RevId: 244064776
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java
index 1db398c..5824bfa 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java
@@ -52,6 +52,7 @@
ImmutableList.of(
"java.io.FileNotFoundException",
"java.io.IOException",
+ "java.lang.StackTraceElement",
"java.lang.invoke.SerializedLambda",
"com.google.common.base.Predicates$InPredicate",
// Sadly, these builders are serialized as part of SkylarkCustomCommandLine$Builder, which
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java
index ab50b89..32f77d1 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java
@@ -228,4 +228,18 @@
assertThat((String) underTest.deserialize(underTest.serialize("hello"))).isEqualTo("hello");
assertThat(underTest.deserialize(underTest.serialize(null))).isNull();
}
+
+ private static class MyException extends Exception {}
+
+ @Test
+ public void exception() throws SerializationException {
+ MyException exception = new MyException();
+ // Force initialization of stack trace.
+ StackTraceElement[] stackTrace = exception.getStackTrace();
+ ObjectCodecs underTest = new ObjectCodecs(AutoRegistry.get(), ImmutableMap.of());
+ assertThat(
+ ((MyException) underTest.deserializeMemoized(underTest.serializeMemoized(exception)))
+ .getStackTrace())
+ .isEqualTo(stackTrace);
+ }
}