Skip to content
Merged
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
61 changes: 58 additions & 3 deletions sentry/api/sentry.api
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,7 @@ public final class io/sentry/JsonObjectReader : io/sentry/vendor/gson/stream/Jso
public fun nextDoubleOrNull ()Ljava/lang/Double;
public fun nextFloatOrNull ()Ljava/lang/Float;
public fun nextIntegerOrNull ()Ljava/lang/Integer;
public fun nextList (Lio/sentry/ILogger;Lio/sentry/JsonDeserializer;)Ljava/util/List;
public fun nextLongOrNull ()Ljava/lang/Long;
public fun nextObjectOrNull ()Ljava/lang/Object;
public fun nextStringOrNull ()Ljava/lang/String;
Expand Down Expand Up @@ -1512,7 +1513,7 @@ public final class io/sentry/protocol/Contexts : java/util/concurrent/Concurrent
public fun setTrace (Lio/sentry/SpanContext;)V
}

public final class io/sentry/protocol/DebugImage : io/sentry/IUnknownPropertiesConsumer {
public final class io/sentry/protocol/DebugImage : io/sentry/IUnknownPropertiesConsumer, io/sentry/JsonSerializable, io/sentry/JsonUnknown {
public fun <init> ()V
public fun acceptUnknownProperties (Ljava/util/Map;)V
public fun getArch ()Ljava/lang/String;
Expand All @@ -1523,7 +1524,9 @@ public final class io/sentry/protocol/DebugImage : io/sentry/IUnknownPropertiesC
public fun getImageAddr ()Ljava/lang/String;
public fun getImageSize ()Ljava/lang/Long;
public fun getType ()Ljava/lang/String;
public fun getUnknown ()Ljava/util/Map;
public fun getUuid ()Ljava/lang/String;
public fun serialize (Lio/sentry/JsonObjectWriter;Lio/sentry/ILogger;)V
public fun setArch (Ljava/lang/String;)V
public fun setCodeFile (Ljava/lang/String;)V
public fun setCodeId (Ljava/lang/String;)V
Expand All @@ -1533,16 +1536,51 @@ public final class io/sentry/protocol/DebugImage : io/sentry/IUnknownPropertiesC
public fun setImageSize (J)V
public fun setImageSize (Ljava/lang/Long;)V
public fun setType (Ljava/lang/String;)V
public fun setUnknown (Ljava/util/Map;)V
public fun setUuid (Ljava/lang/String;)V
}

public final class io/sentry/protocol/DebugMeta : io/sentry/IUnknownPropertiesConsumer {
public final class io/sentry/protocol/DebugImage$Deserializer : io/sentry/JsonDeserializer {
public fun <init> ()V
public fun deserialize (Lio/sentry/JsonObjectReader;Lio/sentry/ILogger;)Lio/sentry/protocol/DebugImage;
public synthetic fun deserialize (Lio/sentry/JsonObjectReader;Lio/sentry/ILogger;)Ljava/lang/Object;
}

public final class io/sentry/protocol/DebugImage$JsonKeys {
public static final field ARCH Ljava/lang/String;
public static final field CODE_FILE Ljava/lang/String;
public static final field CODE_ID Ljava/lang/String;
public static final field DEBUG_FILE Ljava/lang/String;
public static final field DEBUG_ID Ljava/lang/String;
public static final field IMAGE_ADDR Ljava/lang/String;
public static final field IMAGE_SIZE Ljava/lang/String;
public static final field TYPE Ljava/lang/String;
public static final field UUID Ljava/lang/String;
public fun <init> ()V
}

public final class io/sentry/protocol/DebugMeta : io/sentry/IUnknownPropertiesConsumer, io/sentry/JsonSerializable, io/sentry/JsonUnknown {
public fun <init> ()V
public fun acceptUnknownProperties (Ljava/util/Map;)V
public fun getImages ()Ljava/util/List;
public fun getSdkInfo ()Lio/sentry/protocol/SdkInfo;
public fun getUnknown ()Ljava/util/Map;
public fun serialize (Lio/sentry/JsonObjectWriter;Lio/sentry/ILogger;)V
public fun setImages (Ljava/util/List;)V
public fun setSdkInfo (Lio/sentry/protocol/SdkInfo;)V
public fun setUnknown (Ljava/util/Map;)V
}

public final class io/sentry/protocol/DebugMeta$Deserializer : io/sentry/JsonDeserializer {
public fun <init> ()V
public fun deserialize (Lio/sentry/JsonObjectReader;Lio/sentry/ILogger;)Lio/sentry/protocol/DebugMeta;
public synthetic fun deserialize (Lio/sentry/JsonObjectReader;Lio/sentry/ILogger;)Ljava/lang/Object;
}

public final class io/sentry/protocol/DebugMeta$JsonKeys {
public static final field IMAGES Ljava/lang/String;
public static final field SDK_INFO Ljava/lang/String;
public fun <init> ()V
}

public final class io/sentry/protocol/Device : io/sentry/IUnknownPropertiesConsumer, io/sentry/JsonSerializable, io/sentry/JsonUnknown {
Expand Down Expand Up @@ -1808,19 +1846,36 @@ public final class io/sentry/protocol/Request : io/sentry/IUnknownPropertiesCons
public fun setUrl (Ljava/lang/String;)V
}

public final class io/sentry/protocol/SdkInfo : io/sentry/IUnknownPropertiesConsumer {
public final class io/sentry/protocol/SdkInfo : io/sentry/IUnknownPropertiesConsumer, io/sentry/JsonSerializable, io/sentry/JsonUnknown {
public fun <init> ()V
public fun acceptUnknownProperties (Ljava/util/Map;)V
public fun getSdkName ()Ljava/lang/String;
public fun getUnknown ()Ljava/util/Map;
public fun getVersionMajor ()Ljava/lang/Integer;
public fun getVersionMinor ()Ljava/lang/Integer;
public fun getVersionPatchlevel ()Ljava/lang/Integer;
public fun serialize (Lio/sentry/JsonObjectWriter;Lio/sentry/ILogger;)V
public fun setSdkName (Ljava/lang/String;)V
public fun setUnknown (Ljava/util/Map;)V
public fun setVersionMajor (Ljava/lang/Integer;)V
public fun setVersionMinor (Ljava/lang/Integer;)V
public fun setVersionPatchlevel (Ljava/lang/Integer;)V
}

public final class io/sentry/protocol/SdkInfo$Deserializer : io/sentry/JsonDeserializer {
public fun <init> ()V
public fun deserialize (Lio/sentry/JsonObjectReader;Lio/sentry/ILogger;)Lio/sentry/protocol/SdkInfo;
public synthetic fun deserialize (Lio/sentry/JsonObjectReader;Lio/sentry/ILogger;)Ljava/lang/Object;
}

public final class io/sentry/protocol/SdkInfo$JsonKeys {
public static final field SDK_NAME Ljava/lang/String;
public static final field VERSION_MAJOR Ljava/lang/String;
public static final field VERSION_MINOR Ljava/lang/String;
public static final field VERSION_PATCHLEVEL Ljava/lang/String;
public fun <init> ()V
}

public final class io/sentry/protocol/SdkVersion : io/sentry/IUnknownPropertiesConsumer {
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
Expand Down
22 changes: 22 additions & 0 deletions sentry/src/main/java/io/sentry/JsonObjectReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
import io.sentry.vendor.gson.stream.JsonToken;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

@ApiStatus.Internal
Expand Down Expand Up @@ -49,6 +52,25 @@ public void nextUnknown(ILogger logger, Map<String, Object> unknown, String name
}
}

public <T> @Nullable List<T> nextList(
@NotNull ILogger logger, @NotNull JsonDeserializer<T> deserializer) throws IOException {
if (peek() == JsonToken.NULL) {
return null;
}
beginArray();
List<T> list = new ArrayList<>();
do {
try {
list.add(deserializer.deserialize(this, logger));
} catch (Exception e) {
logger.log(SentryLevel.ERROR, "Failed to deserialize object in list.", e);
e.printStackTrace();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd remove that

}
} while (peek() == JsonToken.BEGIN_OBJECT);
endArray();
return list;
}

public @Nullable Date nextDateOrNull(ILogger logger) throws IOException {
if (peek() == JsonToken.NULL) {
return null;
Expand Down
134 changes: 133 additions & 1 deletion sentry/src/main/java/io/sentry/protocol/DebugImage.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
package io.sentry.protocol;

import io.sentry.ILogger;
import io.sentry.IUnknownPropertiesConsumer;
import io.sentry.JsonDeserializer;
import io.sentry.JsonObjectReader;
import io.sentry.JsonObjectWriter;
import io.sentry.JsonSerializable;
import io.sentry.JsonUnknown;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -41,7 +49,7 @@
* names. The Java SDK integrations assign this file a unique identifier, which has to be included
* in the list of images.
*/
public final class DebugImage implements IUnknownPropertiesConsumer {
public final class DebugImage implements IUnknownPropertiesConsumer, JsonUnknown, JsonSerializable {

/**
* The unique UUID of the image.
Expand Down Expand Up @@ -238,4 +246,128 @@ public void setCodeId(final @Nullable String codeId) {
public void acceptUnknownProperties(final @NotNull Map<String, Object> unknown) {
this.unknown = unknown;
}

// JsonKeys

public static final class JsonKeys {
public static final String UUID = "uuid";
public static final String TYPE = "type";
public static final String DEBUG_ID = "debug_id";
public static final String DEBUG_FILE = "debug_file";
public static final String CODE_ID = "code_id";
public static final String CODE_FILE = "code_file";
public static final String IMAGE_ADDR = "image_addr";
public static final String IMAGE_SIZE = "image_size";
public static final String ARCH = "arch";
}

// JsonUnknown

@Override
public @Nullable Map<String, Object> getUnknown() {
return unknown;
}

@Override
public void setUnknown(@Nullable Map<String, Object> unknown) {
this.unknown = unknown;
}

// JsonSerializable

@Override
public void serialize(@NotNull JsonObjectWriter writer, @NotNull ILogger logger)
throws IOException {
writer.beginObject();
if (uuid != null) {
writer.name(JsonKeys.UUID).value(uuid);
}
if (type != null) {
writer.name(JsonKeys.TYPE).value(type);
}
if (debugId != null) {
writer.name(JsonKeys.DEBUG_ID).value(debugId);
}
if (debugFile != null) {
writer.name(JsonKeys.DEBUG_FILE).value(debugFile);
}
if (codeId != null) {
writer.name(JsonKeys.CODE_ID).value(codeId);
}
if (codeFile != null) {
writer.name(JsonKeys.CODE_FILE).value(codeFile);
}
if (imageAddr != null) {
writer.name(JsonKeys.IMAGE_ADDR).value(imageAddr);
}
if (imageSize != null) {
writer.name(JsonKeys.IMAGE_SIZE).value(imageSize);
}
if (arch != null) {
writer.name(JsonKeys.ARCH).value(arch);
}
if (unknown != null) {
for (String key : unknown.keySet()) {
Object value = unknown.get(key);
writer.name(key).value(logger, value);
}
}
writer.endObject();
}

// JsonDeserializer

public static final class Deserializer implements JsonDeserializer<DebugImage> {
@Override
public @NotNull DebugImage deserialize(
@NotNull JsonObjectReader reader, @NotNull ILogger logger) throws Exception {

DebugImage debugImage = new DebugImage();
Map<String, Object> unknown = null;

reader.beginObject();
do {
final String nextName = reader.nextName();
switch (nextName) {
case JsonKeys.UUID:
debugImage.uuid = reader.nextStringOrNull();
break;
case JsonKeys.TYPE:
debugImage.type = reader.nextStringOrNull();
break;
case JsonKeys.DEBUG_ID:
debugImage.debugId = reader.nextStringOrNull();
break;
case JsonKeys.DEBUG_FILE:
debugImage.debugFile = reader.nextStringOrNull();
break;
case JsonKeys.CODE_ID:
debugImage.codeId = reader.nextStringOrNull();
break;
case JsonKeys.CODE_FILE:
debugImage.codeFile = reader.nextStringOrNull();
break;
case JsonKeys.IMAGE_ADDR:
debugImage.imageAddr = reader.nextStringOrNull();
break;
case JsonKeys.IMAGE_SIZE:
debugImage.imageSize = reader.nextLongOrNull();
break;
case JsonKeys.ARCH:
debugImage.arch = reader.nextStringOrNull();
break;
default:
if (unknown == null) {
unknown = new HashMap<>();
}
reader.nextUnknown(logger, unknown, nextName);
break;
}
} while (reader.hasNext());
reader.endObject();

debugImage.setUnknown(unknown);
return debugImage;
}
}
}
Loading