Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
88e39d2
sample on how to recursiveley extract errors
denrase Dec 19, 2022
ba00651
Merge branch 'v7.0.0' into feat/exception-extractor
denrase Jan 10, 2023
81394d1
introduce exception cause with exception and stacktrace
denrase Jan 10, 2023
620e917
move extractors to options
denrase Jan 10, 2023
1c7d835
extract exceptions and attach as sentry exceptions to sentry event
denrase Jan 10, 2023
2584bad
Merge branch 'v7.0.0' into feat/exception-extractor
denrase Jan 16, 2023
e8384ca
make internal field private
denrase Jan 16, 2023
b4fb217
make var final
denrase Jan 16, 2023
077aff4
make var final
denrase Jan 16, 2023
a1acbf3
add tests covering stacktrace attachments
denrase Jan 16, 2023
fcd1a38
check if correct stacktrace was captured
denrase Jan 16, 2023
34e9e8a
break circularity
denrase Jan 16, 2023
84f1104
add changelog entry
denrase Jan 16, 2023
0c15cd2
Merge branch 'v7.0.0' into feat/exception-extractor
denrase Jan 17, 2023
413ddd0
expose type in extractor
denrase Jan 17, 2023
4af4d07
export classes
denrase Jan 17, 2023
5159821
move recursivce extractor to exception factory
denrase Jan 17, 2023
983bdf3
format
denrase Jan 17, 2023
bde4df0
remove todo
denrase Jan 17, 2023
4bd8ad4
add throwable to sentry exception
denrase Jan 17, 2023
406e493
Merge branch 'v7.0.0' into feat/exception-extractor
denrase Jan 17, 2023
61900d4
apply new approach in dio event processor
denrase Jan 17, 2023
5d78242
update changelog
denrase Jan 17, 2023
b2abac7
dont remove stacktrace from DioError
denrase Jan 17, 2023
2e65a9e
preserve throwable mechanism
denrase Jan 17, 2023
4f37d19
search for first in list
denrase Jan 23, 2023
72cfb5b
search for dioexception in list
denrase Jan 23, 2023
db64952
Merge branch 'v7.0.0' into feat/exception-extractor
denrase Jan 23, 2023
dcbc09f
format changelog
denrase Jan 23, 2023
4938f3a
Merge branch 'v7.0.0' into feat/exception-extractor
denrase Jan 23, 2023
cce32de
format changelog
denrase Jan 23, 2023
22196e6
format
denrase Jan 23, 2023
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
Next Next commit
sample on how to recursiveley extract errors
  • Loading branch information
denrase committed Dec 19, 2022
commit 88e39d2523347c3fd7932d7b9aacd64d5078c0de
21 changes: 21 additions & 0 deletions dart/lib/src/error_cause_extractor.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class CauseExtractor<T> {
Object? cause(T error) { return null; }
}

class ErrorCauseExtractor {
ErrorCauseExtractor(this.causeExtractorsByType);

final Map<Type, CauseExtractor> causeExtractorsByType;

List<Object> flatten(errorWithCause) {
var allErrors = <Object>[];
var current = errorWithCause;

while (current != null) {
allErrors.add(current);
final causeExtractor = causeExtractorsByType[current.runtimeType];
current = causeExtractor?.cause(current);
}
return allErrors;
}
}
46 changes: 46 additions & 0 deletions dart/test/error_cause_extractor_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import 'package:sentry/src/error_cause_extractor.dart';
import 'package:test/test.dart';

void main() {
test('flatten', () {
final errorC = ErrorC();
final errorB = ErrorB(errorC);
final errorA = ErrorA(errorB);

final sut = ErrorCauseExtractor({
ErrorA: ErrorACauseExtractor(),
ErrorB: ErrorBCauseExtractor()
});

final flattened = sut.flatten(errorA);
expect(flattened, [errorA, errorB, errorC]);
});
}

class ErrorA {
ErrorA(this.other);
final ErrorB? other;
}

class ErrorB {
ErrorB(this.anotherOther);
final ErrorC? anotherOther;
}

class ErrorC {
// I am empty inside
}

class ErrorACauseExtractor implements CauseExtractor<ErrorA> {
@override
Object? cause(ErrorA error) {
return error.other;
}
}

class ErrorBCauseExtractor implements CauseExtractor<ErrorB> {
@override
Object? cause(ErrorB error) {
return error.anotherOther;
}
}