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);
+  }
 }