Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion sentry/api/sentry.api
Original file line number Diff line number Diff line change
Expand Up @@ -1313,7 +1313,6 @@ public final class io/sentry/JsonObjectReader : io/sentry/ObjectReader {

public final class io/sentry/JsonObjectSerializer {
public static final field OBJECT_PLACEHOLDER Ljava/lang/String;
public final field jsonReflectionObjectSerializer Lio/sentry/JsonReflectionObjectSerializer;
public fun <init> (I)V
public fun serialize (Lio/sentry/ObjectWriter;Lio/sentry/ILogger;Ljava/lang/Object;)V
}
Expand Down
14 changes: 11 additions & 3 deletions sentry/src/main/java/io/sentry/JsonObjectSerializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@ public final class JsonObjectSerializer {

public static final String OBJECT_PLACEHOLDER = "[OBJECT]";

public final JsonReflectionObjectSerializer jsonReflectionObjectSerializer;
private final int maxDepth;
private @Nullable JsonReflectionObjectSerializer jsonReflectionObjectSerializer;

public JsonObjectSerializer(int maxDepth) {
jsonReflectionObjectSerializer = new JsonReflectionObjectSerializer(maxDepth);
this.maxDepth = maxDepth;
}

public void serialize(
Expand Down Expand Up @@ -127,7 +128,7 @@ public void serialize(
writer.value(object.toString());
} else {
try {
Object serializableObject = jsonReflectionObjectSerializer.serialize(object, logger);
Object serializableObject = getJsonReflectionObjectSerializer().serialize(object, logger);
serialize(writer, logger, serializableObject);
} catch (Exception exception) {
logger.log(SentryLevel.ERROR, "Failed serializing unknown object.", exception);
Expand All @@ -138,6 +139,13 @@ public void serialize(

// Helper

private @NotNull JsonReflectionObjectSerializer getJsonReflectionObjectSerializer() {
if (jsonReflectionObjectSerializer == null) {
jsonReflectionObjectSerializer = new JsonReflectionObjectSerializer(maxDepth);
}
return jsonReflectionObjectSerializer;
}

private void serializeDate(
@NotNull ObjectWriter writer, @NotNull ILogger logger, @NotNull Date date)
throws IOException {
Expand Down
24 changes: 24 additions & 0 deletions sentry/src/test/java/io/sentry/JsonObjectSerializerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import java.util.Locale
import java.util.TimeZone
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicIntegerArray
import kotlin.test.assertNotNull
import kotlin.test.assertNull
import org.junit.Test
import org.mockito.kotlin.inOrder
import org.mockito.kotlin.mock
Expand Down Expand Up @@ -192,6 +194,21 @@ internal class JsonObjectSerializerTest {
verify(jsonSerializable).serialize(fixture.writer, fixture.logger)
}

@Test
fun `serialize json serializable does not create reflection serializer`() {
val serializer = fixture.getSUT()
val jsonSerializable: JsonSerializable = mock()
serializer.serialize(fixture.writer, fixture.logger, jsonSerializable)
assertNull(serializer.reflectionObjectSerializer)
}

@Test
fun `serialize unknown object creates reflection serializer`() {
val serializer = fixture.getSUT()
serializer.serialize(fixture.writer, fixture.logger, object {})
assertNotNull(serializer.reflectionObjectSerializer)
}

@Test
fun `serialize unknown object without data`() {
val value = object {}
Expand Down Expand Up @@ -355,3 +372,10 @@ internal class JsonObjectSerializerTest {
data class ClassWithEnumProperty(val enumProperty: DataCategory)

data class ClassWithLocaleProperty(val localeProperty: Locale)

private val JsonObjectSerializer.reflectionObjectSerializer: JsonReflectionObjectSerializer?
get() {
val field = JsonObjectSerializer::class.java.getDeclaredField("jsonReflectionObjectSerializer")
field.isAccessible = true
return field.get(this) as JsonReflectionObjectSerializer?
}
Loading