From 7d250f21af877a10b83331f6aad0c198bf6713ff Mon Sep 17 00:00:00 2001 From: Morgan McKenzie Date: Wed, 10 Jul 2019 13:05:05 -0700 Subject: [PATCH 1/6] Handle case where no class in dart and android (ios is fine) --- .../FirebaseCrashlyticsPlugin.java | 2 +- .../lib/src/firebase_crashlytics.dart | 26 ++++++++++++------- .../test/firebase_crashlytics_test.dart | 14 ++++++++++ 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java index 9b23a2306308..803923c7f884 100644 --- a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java +++ b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java @@ -103,7 +103,7 @@ private StackTraceElement generateStackTraceElement(Map errorEle String className = errorElement.get("class"); String methodName = errorElement.get("method"); - return new StackTraceElement(className, methodName, fileName, Integer.parseInt(lineNumber)); + return new StackTraceElement(className == null ? "" : className, methodName, fileName, Integer.parseInt(lineNumber)); } catch (Exception e) { Log.e(TAG, "Unable to generate stack trace element from Dart side error."); return null; diff --git a/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart b/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart index dd43f7fd02f7..c26d9658f68d 100644 --- a/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart +++ b/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart @@ -171,17 +171,25 @@ class Crashlytics { final String lineNumber = lineParts[1].contains(":") ? lineParts[1].substring(0, lineParts[1].indexOf(":")).trim() : lineParts[1]; - final String className = - lineParts[2].substring(0, lineParts[2].indexOf(".")).trim(); - final String methodName = - lineParts[2].substring(lineParts[2].indexOf(".") + 1).trim(); - - elements.add({ - 'class': className, - 'method': methodName, + + final Map element = { 'file': fileName, 'line': lineNumber, - }); + }; + + if (lineParts[2].contains(".")) { + final String className = + lineParts[2].substring(0, lineParts[2].indexOf(".")).trim(); + final String methodName = + lineParts[2].substring(lineParts[2].indexOf(".") + 1).trim(); + + element['class'] = className; + element['method'] = methodName; + } else { + element['method'] = lineParts[2]; + } + + elements.add(element); } catch (e) { print(e.toString()); } diff --git a/packages/firebase_crashlytics/test/firebase_crashlytics_test.dart b/packages/firebase_crashlytics/test/firebase_crashlytics_test.dart index 8eb771ee2707..22319891bcf1 100644 --- a/packages/firebase_crashlytics/test/firebase_crashlytics_test.dart +++ b/packages/firebase_crashlytics/test/firebase_crashlytics_test.dart @@ -142,5 +142,19 @@ void main() { 'line': '3825', }); }); + + test('getStackTraceElements without class', () async { + final List lines = [ + 'package:firebase_crashlytics/test/main.dart 12 main' + ]; + final List> elements = + crashlytics.getStackTraceElements(lines); + expect(elements.length, 1); + expect(elements.first, { + 'method': 'main', + 'file': 'package:firebase_crashlytics/test/main.dart', + 'line': '12', + }); + }); }); } From 7fc494777cbb61377f6297e5fcbb175118efd2c1 Mon Sep 17 00:00:00 2001 From: Morgan McKenzie Date: Wed, 10 Jul 2019 13:21:59 -0700 Subject: [PATCH 2/6] Bump version and update changlog --- packages/firebase_crashlytics/CHANGELOG.md | 4 ++++ packages/firebase_crashlytics/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/firebase_crashlytics/CHANGELOG.md b/packages/firebase_crashlytics/CHANGELOG.md index 124b410f9881..f0feb192864b 100644 --- a/packages/firebase_crashlytics/CHANGELOG.md +++ b/packages/firebase_crashlytics/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.4+11 + +* Fixed an issue where `Crashlytics#getStackTraceElements` didn't handle functions without classes. + ## 0.0.4+10 * Update README. diff --git a/packages/firebase_crashlytics/pubspec.yaml b/packages/firebase_crashlytics/pubspec.yaml index 7510f37b167a..4ca07da6f6c0 100644 --- a/packages/firebase_crashlytics/pubspec.yaml +++ b/packages/firebase_crashlytics/pubspec.yaml @@ -1,7 +1,7 @@ name: firebase_crashlytics description: Flutter plugin for Firebase Crashlytics. It reports uncaught errors to the Firebase console. -version: 0.0.4+10 +version: 0.0.4+11 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_crashlytics From c5cf63e47fe3718187b325871747c7c280c4ba0b Mon Sep 17 00:00:00 2001 From: Morgan McKenzie Date: Wed, 10 Jul 2019 13:32:34 -0700 Subject: [PATCH 3/6] Fix formatting of long line in FirebaseCrashlyticsPlugin.java --- .../firebasecrashlytics/FirebaseCrashlyticsPlugin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java index 803923c7f884..b3b04c6f37c3 100644 --- a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java +++ b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java @@ -103,7 +103,8 @@ private StackTraceElement generateStackTraceElement(Map errorEle String className = errorElement.get("class"); String methodName = errorElement.get("method"); - return new StackTraceElement(className == null ? "" : className, methodName, fileName, Integer.parseInt(lineNumber)); + return new StackTraceElement( + className == null ? "" : className, methodName, fileName, Integer.parseInt(lineNumber)); } catch (Exception e) { Log.e(TAG, "Unable to generate stack trace element from Dart side error."); return null; From d15165f1208564e99068938cc4afdb49343840e0 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Wed, 10 Jul 2019 13:48:18 -0700 Subject: [PATCH 4/6] Update firebase_crashlytics.dart --- packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart b/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart index c26d9658f68d..aa5a67ef99e7 100644 --- a/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart +++ b/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart @@ -172,7 +172,7 @@ class Crashlytics { ? lineParts[1].substring(0, lineParts[1].indexOf(":")).trim() : lineParts[1]; - final Map element = { + final Map element = { 'file': fileName, 'line': lineNumber, }; From 142aaa37e5c632f770fbed08209f431449e7d979 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Wed, 10 Jul 2019 13:49:13 -0700 Subject: [PATCH 5/6] Update FirebaseCrashlyticsPlugin.java --- .../firebasecrashlytics/FirebaseCrashlyticsPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java index b3b04c6f37c3..3f852a6ce472 100644 --- a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java +++ b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java @@ -104,7 +104,7 @@ private StackTraceElement generateStackTraceElement(Map errorEle String methodName = errorElement.get("method"); return new StackTraceElement( - className == null ? "" : className, methodName, fileName, Integer.parseInt(lineNumber)); + className ?? "", methodName, fileName, Integer.parseInt(lineNumber)); } catch (Exception e) { Log.e(TAG, "Unable to generate stack trace element from Dart side error."); return null; From b0fa819587c98b40ad9e5c350b39ec1293b3d7de Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Wed, 10 Jul 2019 13:54:27 -0700 Subject: [PATCH 6/6] Revert "Update FirebaseCrashlyticsPlugin.java" This reverts commit 142aaa37e5c632f770fbed08209f431449e7d979. --- .../firebasecrashlytics/FirebaseCrashlyticsPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java index 3f852a6ce472..b3b04c6f37c3 100644 --- a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java +++ b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java @@ -104,7 +104,7 @@ private StackTraceElement generateStackTraceElement(Map errorEle String methodName = errorElement.get("method"); return new StackTraceElement( - className ?? "", methodName, fileName, Integer.parseInt(lineNumber)); + className == null ? "" : className, methodName, fileName, Integer.parseInt(lineNumber)); } catch (Exception e) { Log.e(TAG, "Unable to generate stack trace element from Dart side error."); return null;