Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
8 changes: 4 additions & 4 deletions sentry/src/main/java/io/sentry/MonitorContexts.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
import io.sentry.util.Objects;
import io.sentry.vendor.gson.stream.JsonToken;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.ConcurrentHashMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public final class MonitorContexts extends ConcurrentHashMap<String, Object>
implements JsonSerializable {
private static final long serialVersionUID = 3987329379811822556L;
private static final String[] EMPTY_KEYS = new String[0];

public MonitorContexts() {}

Expand Down Expand Up @@ -49,8 +49,8 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger
throws IOException {
writer.beginObject();
// Serialize in alphabetical order to keep determinism.
final List<String> sortedKeys = Collections.list(keys());
Collections.sort(sortedKeys);
final String[] sortedKeys = keySet().toArray(EMPTY_KEYS);
Arrays.sort(sortedKeys);
for (final String key : sortedKeys) {
final Object value = get(key);
if (value != null) {
Expand Down
8 changes: 4 additions & 4 deletions sentry/src/main/java/io/sentry/protocol/Contexts.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@
import io.sentry.util.Objects;
import io.sentry.vendor.gson.stream.JsonToken;
import java.io.IOException;
import java.util.Collections;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
Expand All @@ -28,6 +27,7 @@
public class Contexts implements JsonSerializable {
private static final long serialVersionUID = 252445813254943011L;
public static final String REPLAY_ID = "replay_id";
private static final String[] EMPTY_KEYS = new String[0];

private final @NotNull ConcurrentHashMap<String, Object> internalStorage =
new ConcurrentHashMap<>();
Expand Down Expand Up @@ -302,8 +302,8 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger
throws IOException {
writer.beginObject();
// Serialize in alphabetical order to keep determinism.
final List<String> sortedKeys = Collections.list(keys());
Collections.sort(sortedKeys);
final String[] sortedKeys = internalStorage.keySet().toArray(EMPTY_KEYS);
Arrays.sort(sortedKeys);
for (final String key : sortedKeys) {
final Object value = get(key);
if (value != null) {
Expand Down
19 changes: 19 additions & 0 deletions sentry/src/test/java/io/sentry/MonitorContextsTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.sentry

import io.sentry.protocol.SerializationUtils
import kotlin.test.Test
import kotlin.test.assertEquals
import org.mockito.kotlin.mock

class MonitorContextsTest {
@Test
fun `serializes entries in alphabetical order`() {
val contexts =
MonitorContexts().apply {
put("b", 2)
put("a", 1)
}

assertEquals("{\"a\":1,\"b\":2}", SerializationUtils.serializeToString(contexts, mock()))
}
}
Loading