@@ -211,12 +211,13 @@ class SentryClient {
211
211
212
212
SentryEvent _prepareEvent (SentryEvent event, Hint hint,
213
213
{dynamic stackTrace}) {
214
- event.serverName = event.serverName ?? _options.serverName;
215
- event.dist = event.dist ?? _options.dist;
216
- event.environment = event.environment ?? _options.environment;
217
- event.release = event.release ?? _options.release;
218
- event.sdk = event.sdk ?? _options.sdk;
219
- event.platform = event.platform ?? sdkPlatform (_options.platform.isWeb);
214
+ event
215
+ ..serverName = event.serverName ?? _options.serverName
216
+ ..dist = event.dist ?? _options.dist
217
+ ..environment = event.environment ?? _options.environment
218
+ ..release = event.release ?? _options.release
219
+ ..sdk = event.sdk ?? _options.sdk
220
+ ..platform = event.platform ?? sdkPlatform (_options.platform.isWeb);
220
221
221
222
if (event is SentryTransaction ) {
222
223
return event;
@@ -235,18 +236,26 @@ class SentryClient {
235
236
final isolateId = isolateName? .hashCode;
236
237
237
238
if (event.throwableMechanism != null ) {
238
- final extractedExceptions = _exceptionFactory.extractor
239
+ final extractedExceptionCauses = _exceptionFactory.extractor
239
240
.flatten (event.throwableMechanism, stackTrace);
240
241
241
- final sentryExceptions = < SentryException > [];
242
+ SentryException ? rootException;
243
+ SentryException ? currentException;
242
244
final sentryThreads = < SentryThread > [];
243
245
244
- for (final extractedException in extractedExceptions ) {
246
+ for (final extractedExceptionCause in extractedExceptionCauses ) {
245
247
var sentryException = _exceptionFactory.getSentryException (
246
- extractedException .exception,
247
- stackTrace: extractedException .stackTrace,
248
+ extractedExceptionCause .exception,
249
+ stackTrace: extractedExceptionCause .stackTrace,
248
250
removeSentryFrames: hint.get (TypeCheckHint .currentStackTrace),
249
251
);
252
+ if (extractedExceptionCause.source != null ) {
253
+ var mechanism =
254
+ sentryException.mechanism ?? Mechanism (type: "generic" );
255
+
256
+ mechanism.source = extractedExceptionCause.source;
257
+ sentryException.mechanism = mechanism;
258
+ }
250
259
251
260
SentryThread ? sentryThread;
252
261
@@ -262,21 +271,25 @@ class SentryClient {
262
271
);
263
272
}
264
273
265
- sentryExceptions.add (sentryException);
274
+ rootException ?? = sentryException;
275
+ currentException? .addException (sentryException);
276
+ currentException = sentryException;
277
+
266
278
if (sentryThread != null ) {
267
279
sentryThreads.add (sentryThread);
268
280
}
269
281
}
270
282
271
- event.exceptions = [
272
- ...? event.exceptions,
273
- ...sentryExceptions,
274
- ];
275
- event.threads = [
276
- ...? event.threads,
277
- ...sentryThreads,
278
- ];
279
- return event;
283
+ final exceptions = [...? event.exceptions];
284
+ if (rootException != null ) {
285
+ exceptions.add (rootException);
286
+ }
287
+ return event
288
+ ..exceptions = exceptions
289
+ ..threads = [
290
+ ...? event.threads,
291
+ ...sentryThreads,
292
+ ];
280
293
}
281
294
282
295
// The stacktrace is not part of an exception,
0 commit comments