From dcc3f0acc5b3dc24fdae1abd72009f2d3f0add0e Mon Sep 17 00:00:00 2001 From: fractalwrench Date: Tue, 19 Jun 2018 14:52:57 +0100 Subject: [PATCH] feat: add public accessors to error class --- .../java/com/bugsnag/android/ErrorTest.java | 6 +- .../main/java/com/bugsnag/android/Client.java | 3 + .../main/java/com/bugsnag/android/Error.java | 90 +++++++++++++++---- 3 files changed, 80 insertions(+), 19 deletions(-) diff --git a/sdk/src/androidTest/java/com/bugsnag/android/ErrorTest.java b/sdk/src/androidTest/java/com/bugsnag/android/ErrorTest.java index 9be8c5a8f8..598cfce1fb 100644 --- a/sdk/src/androidTest/java/com/bugsnag/android/ErrorTest.java +++ b/sdk/src/androidTest/java/com/bugsnag/android/ErrorTest.java @@ -216,6 +216,7 @@ public void testSetContext() throws JSONException, IOException { public void testSetGroupingHash() throws JSONException, IOException { String groupingHash = "herpderp"; error.setGroupingHash(groupingHash); + assertEquals(groupingHash, error.getGroupingHash()); JSONObject errorJson = streamableToJson(error); assertEquals(groupingHash, errorJson.get("groupingHash")); @@ -313,7 +314,9 @@ public void testAppDataContext() throws Exception { String expectedContext = "FooActivity"; sessionTracker.updateForegroundTracker(expectedContext, true, System.currentTimeMillis()); - error.setAppData(new AppData(context, config, sessionTracker)); + AppData appData = new AppData(context, config, sessionTracker); + error.setAppData(appData); + assertEquals(appData, error.getAppData()); assertEquals(expectedContext, error.getContext()); } @@ -375,6 +378,7 @@ public void testSetDeviceId() throws Throwable { Context context = InstrumentationRegistry.getContext(); DeviceData deviceData = new DeviceData(context, BugsnagTestUtils.getSharedPrefs(context)); error.setDeviceData(deviceData); + assertEquals(deviceData, error.getDeviceData()); JSONObject errorJson = streamableToJson(error); JSONObject device = errorJson.getJSONObject("device"); diff --git a/sdk/src/main/java/com/bugsnag/android/Client.java b/sdk/src/main/java/com/bugsnag/android/Client.java index 63eb4e73c3..91374563fc 100644 --- a/sdk/src/main/java/com/bugsnag/android/Client.java +++ b/sdk/src/main/java/com/bugsnag/android/Client.java @@ -68,7 +68,10 @@ public class Client extends Observable implements Observer { protected final DeviceData deviceData; @NonNull final Breadcrumbs breadcrumbs; + + @NonNull protected final User user = new User(); + @NonNull protected final ErrorStore errorStore; diff --git a/sdk/src/main/java/com/bugsnag/android/Error.java b/sdk/src/main/java/com/bugsnag/android/Error.java index 16027546be..95406c5727 100644 --- a/sdk/src/main/java/com/bugsnag/android/Error.java +++ b/sdk/src/main/java/com/bugsnag/android/Error.java @@ -2,7 +2,6 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.text.TextUtils; import java.io.IOException; @@ -17,29 +16,52 @@ */ public class Error implements JsonStream.Streamable { + @SuppressWarnings("NullableProblems") // set after construction @NonNull - final Configuration config; private AppData appData; + + @SuppressWarnings("NullableProblems") // set after construction + @NonNull private DeviceData deviceData; - private Breadcrumbs breadcrumbs; + + @SuppressWarnings("NullableProblems") // set after construction + @NonNull private User user; - private final Throwable exception; - private Severity severity = Severity.WARNING; - @NonNull private MetaData metaData = new MetaData(); + + @Nullable + private Severity severity; + + @NonNull + private MetaData metaData = new MetaData(); + + @Nullable private String groupingHash; + + @Nullable private String context; + + @NonNull + final Configuration config; + private final String[] projectPackages; + private final Exceptions exceptions; + private Breadcrumbs breadcrumbs; + private final Throwable exception; private final HandledState handledState; private final Session session; private final ThreadState threadState; Error(@NonNull Configuration config, @NonNull Throwable exception, - HandledState handledState, Severity severity, Session session, ThreadState threadState) { + HandledState handledState, @NonNull Severity severity, + Session session, ThreadState threadState) { this.threadState = threadState; this.config = config; this.exception = exception; this.handledState = handledState; this.severity = severity; this.session = session; + + projectPackages = config.getProjectPackages(); + exceptions = new Exceptions(config, exception); } @Override @@ -56,16 +78,16 @@ public void toStream(@NonNull JsonStream writer) throws IOException { writer.name("severityReason").value(handledState); writer.name("unhandled").value(handledState.isUnhandled()); - if (config.getProjectPackages() != null) { + if (projectPackages != null) { writer.name("projectPackages").beginArray(); - for (String projectPackage : config.getProjectPackages()) { + for (String projectPackage : projectPackages) { writer.value(projectPackage); } writer.endArray(); } // Write exception info - writer.name("exceptions").value(new Exceptions(config, exception)); + writer.name("exceptions").value(exceptions); // Write user info writer.name("user").value(user); @@ -103,7 +125,7 @@ public void toStream(@NonNull JsonStream writer) throws IOException { * * @param context what was happening at the time of a crash */ - public void setContext(String context) { + public void setContext(@Nullable String context) { this.context = context; } @@ -112,7 +134,7 @@ public void setContext(String context) { */ @Nullable public String getContext() { - if (!TextUtils.isEmpty(context)) { + if (context != null) { return context; } else if (config.getContext() != null) { return config.getContext(); @@ -131,10 +153,20 @@ public String getContext() { * * @param groupingHash a string to use when grouping errors */ - public void setGroupingHash(String groupingHash) { + public void setGroupingHash(@Nullable String groupingHash) { this.groupingHash = groupingHash; } + /** + * Get the grouping hash associated with this Error. + * + * @return the grouping hash, if set + */ + @Nullable + public String getGroupingHash() { + return groupingHash; + } + /** * Set the Severity of this Error. *

@@ -172,13 +204,14 @@ public void setUser(String id, String email, String name) { this.user = new User(id, email, name); } - void setUser(User user) { + void setUser(@NonNull User user) { this.user = user; } /** * @return user information associated with this Error */ + @NonNull public User getUser() { return user; } @@ -286,7 +319,8 @@ public String getExceptionName() { /** * Get the message from the exception contained in this Error report. */ - @NonNull public String getExceptionMessage() { + @NonNull + public String getExceptionMessage() { String localizedMessage = exception.getLocalizedMessage(); return localizedMessage != null ? localizedMessage : ""; } @@ -307,11 +341,31 @@ public void setDeviceId(@Nullable String id) { deviceData.id = id; } - void setAppData(AppData appData) { + /** + * Retrieves the {@link AppData} associated with this error + * + * @return the app metadata + */ + @NonNull + public AppData getAppData() { + return appData; + } + /** + * Retrieves the {@link DeviceData} associated with this error + * + * @return the device metadata + */ + + @NonNull + public DeviceData getDeviceData() { + return deviceData; + } + + void setAppData(@NonNull AppData appData) { this.appData = appData; } - void setDeviceData(DeviceData deviceData) { + void setDeviceData(@NonNull DeviceData deviceData) { this.deviceData = deviceData; } @@ -354,7 +408,7 @@ static class Builder { } Builder(@NonNull Configuration config, @NonNull String name, - @NonNull String message, @NonNull StackTraceElement[] frames, Session session) { + @NonNull String message, @NonNull StackTraceElement[] frames, Session session) { this(config, new BugsnagException(name, message, frames), session); }