Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit f8efbe8

Browse files
rmtmckenziecollinjackson
authored andcommitted
[firebase_crashlytics] Handle case where function isn't in class for stack (#1831)
* Handle case where no class in dart and android (ios is fine)
1 parent c1136f0 commit f8efbe8

File tree

5 files changed

+38
-11
lines changed

5 files changed

+38
-11
lines changed

packages/firebase_crashlytics/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.0.4+11
2+
3+
* Fixed an issue where `Crashlytics#getStackTraceElements` didn't handle functions without classes.
4+
15
## 0.0.4+10
26

37
* Update README.

packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ private StackTraceElement generateStackTraceElement(Map<String, String> errorEle
103103
String className = errorElement.get("class");
104104
String methodName = errorElement.get("method");
105105

106-
return new StackTraceElement(className, methodName, fileName, Integer.parseInt(lineNumber));
106+
return new StackTraceElement(
107+
className == null ? "" : className, methodName, fileName, Integer.parseInt(lineNumber));
107108
} catch (Exception e) {
108109
Log.e(TAG, "Unable to generate stack trace element from Dart side error.");
109110
return null;

packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,17 +171,25 @@ class Crashlytics {
171171
final String lineNumber = lineParts[1].contains(":")
172172
? lineParts[1].substring(0, lineParts[1].indexOf(":")).trim()
173173
: lineParts[1];
174-
final String className =
175-
lineParts[2].substring(0, lineParts[2].indexOf(".")).trim();
176-
final String methodName =
177-
lineParts[2].substring(lineParts[2].indexOf(".") + 1).trim();
178-
179-
elements.add(<String, String>{
180-
'class': className,
181-
'method': methodName,
174+
175+
final Map<String, String> element = <String, String>{
182176
'file': fileName,
183177
'line': lineNumber,
184-
});
178+
};
179+
180+
if (lineParts[2].contains(".")) {
181+
final String className =
182+
lineParts[2].substring(0, lineParts[2].indexOf(".")).trim();
183+
final String methodName =
184+
lineParts[2].substring(lineParts[2].indexOf(".") + 1).trim();
185+
186+
element['class'] = className;
187+
element['method'] = methodName;
188+
} else {
189+
element['method'] = lineParts[2];
190+
}
191+
192+
elements.add(element);
185193
} catch (e) {
186194
print(e.toString());
187195
}

packages/firebase_crashlytics/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: firebase_crashlytics
22
description: Flutter plugin for Firebase Crashlytics. It reports uncaught errors to the
33
Firebase console.
4-
version: 0.0.4+10
4+
version: 0.0.4+11
55
author: Flutter Team <flutter-dev@google.com>
66
homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_crashlytics
77

packages/firebase_crashlytics/test/firebase_crashlytics_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,19 @@ void main() {
142142
'line': '3825',
143143
});
144144
});
145+
146+
test('getStackTraceElements without class', () async {
147+
final List<String> lines = <String>[
148+
'package:firebase_crashlytics/test/main.dart 12 main'
149+
];
150+
final List<Map<String, String>> elements =
151+
crashlytics.getStackTraceElements(lines);
152+
expect(elements.length, 1);
153+
expect(elements.first, <String, String>{
154+
'method': 'main',
155+
'file': 'package:firebase_crashlytics/test/main.dart',
156+
'line': '12',
157+
});
158+
});
145159
});
146160
}

0 commit comments

Comments
 (0)