diff --git a/CHANGELOG.md b/CHANGELOG.md index 71abe457e8..6dfe3d431f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ SentryUserFeedbackDialog.Builder(context).create().show() ``` +- Serialize `preContext` and `postContext` in `SentryStackFrame` ([#4482](https://github.com/getsentry/sentry-java/pull/4482)) ## 8.13.3 diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 10d7d04a04..2449e93b87 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -5903,6 +5903,8 @@ public final class io/sentry/protocol/SentryStackFrame$JsonKeys { public static final field NATIVE Ljava/lang/String; public static final field PACKAGE Ljava/lang/String; public static final field PLATFORM Ljava/lang/String; + public static final field POST_CONTEXT Ljava/lang/String; + public static final field PRE_CONTEXT Ljava/lang/String; public static final field RAW_FUNCTION Ljava/lang/String; public static final field SYMBOL Ljava/lang/String; public static final field SYMBOL_ADDR Ljava/lang/String; diff --git a/sentry/src/main/java/io/sentry/protocol/SentryStackFrame.java b/sentry/src/main/java/io/sentry/protocol/SentryStackFrame.java index 667938d8da..bf0746157c 100644 --- a/sentry/src/main/java/io/sentry/protocol/SentryStackFrame.java +++ b/sentry/src/main/java/io/sentry/protocol/SentryStackFrame.java @@ -351,6 +351,8 @@ public static final class JsonKeys { public static final String RAW_FUNCTION = "raw_function"; public static final String SYMBOL = "symbol"; public static final String LOCK = "lock"; + public static final String PRE_CONTEXT = "pre_context"; + public static final String POST_CONTEXT = "post_context"; } @Override @@ -411,6 +413,12 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger if (lock != null) { writer.name(JsonKeys.LOCK).value(logger, lock); } + if (preContext != null && !preContext.isEmpty()) { + writer.name(JsonKeys.PRE_CONTEXT).value(logger, preContext); + } + if (postContext != null && !postContext.isEmpty()) { + writer.name(JsonKeys.POST_CONTEXT).value(logger, postContext); + } if (unknown != null) { for (String key : unknown.keySet()) { Object value = unknown.get(key); @@ -421,6 +429,7 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger writer.endObject(); } + @SuppressWarnings("unchecked") public static final class Deserializer implements JsonDeserializer { @Override public @NotNull SentryStackFrame deserialize( @@ -485,6 +494,12 @@ public static final class Deserializer implements JsonDeserializer) reader.nextObjectOrNull(); + break; + case JsonKeys.POST_CONTEXT: + sentryStackFrame.postContext = (List) reader.nextObjectOrNull(); + break; default: if (unknown == null) { unknown = new ConcurrentHashMap<>(); diff --git a/sentry/src/test/java/io/sentry/protocol/SentryStackFrameSerializationTest.kt b/sentry/src/test/java/io/sentry/protocol/SentryStackFrameSerializationTest.kt index fa0e037321..cb1b101e46 100644 --- a/sentry/src/test/java/io/sentry/protocol/SentryStackFrameSerializationTest.kt +++ b/sentry/src/test/java/io/sentry/protocol/SentryStackFrameSerializationTest.kt @@ -42,6 +42,15 @@ class SentryStackFrameSerializationTest { type = SentryLockReason.BLOCKED threadId = 11 } + preContext = listOf( + "f46ad4c7-a286-4936-a56c-825088227c88", + "feeda7f3-1530-45c2-b8d8-5d201aaf6ce0" + ) + postContext = listOf( + "2153c99d-2f17-45f1-a173-69e08cc6a219", + "0a959b53-6bdf-45d1-93ca-936281d7897a", + "4e6085a3-1e44-4aa2-b3d9-9b79dca970ed" + ) } } private val fixture = Fixture() diff --git a/sentry/src/test/resources/json/sentry_stack_frame.json b/sentry/src/test/resources/json/sentry_stack_frame.json index 50bb42e4ca..0cd739be87 100644 --- a/sentry/src/test/resources/json/sentry_stack_frame.json +++ b/sentry/src/test/resources/json/sentry_stack_frame.json @@ -22,5 +22,14 @@ "package_name": "java.lang", "class_name": "Object", "thread_id": 11 - } + }, + "pre_context": [ + "f46ad4c7-a286-4936-a56c-825088227c88", + "feeda7f3-1530-45c2-b8d8-5d201aaf6ce0" + ], + "post_context": [ + "2153c99d-2f17-45f1-a173-69e08cc6a219", + "0a959b53-6bdf-45d1-93ca-936281d7897a", + "4e6085a3-1e44-4aa2-b3d9-9b79dca970ed" + ] }