Skip to content

Commit 62de927

Browse files
authored
Deprecate extra in favor of contexts (#1435)
1 parent 1314516 commit 62de927

20 files changed

+55
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
### Breaking Changes
1212

1313
- Android `minSdkVersion` is now 19 (Flutter already defines 19-20 as best effort)
14+
- Deprecate `extra` in favor of `contexts` ([#1435](https://github.com/getsentry/sentry-dart/pull/1435))
1415

1516
## 7.5.2
1617

dart/example/bin/event_example.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ final event = SentryEvent(
77
environment: 'Test',
88
message: SentryMessage('This is an example Dart event.'),
99
tags: const <String, String>{'project-id': '7371'},
10+
// ignore: deprecated_member_use
1011
extra: const <String, String>{'section': '1'},
1112
// fingerprint: const <String>['example-dart'], fingerprint forces events to group together
1213
user: SentryUser(
1314
id: '800',
1415
username: 'first-user',
1516
1617
// ipAddress: '127.0.0.1', sendDefaultPii feature is enabled
18+
// ignore: deprecated_member_use
1719
extras: <String, String>{'first-sign-in': '2020-01-01'},
1820
),
1921
breadcrumbs: [

dart/example/bin/example.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ Future<void> runApp() async {
4545
username: 'first-user',
4646
4747
// ipAddress: '127.0.0.1', sendDefaultPii feature is enabled
48+
// ignore: deprecated_member_use
4849
extras: <String, String>{'first-sign-in': '2020-01-01'},
4950
));
5051
scope

dart/example_web/web/event.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ final event = SentryEvent(
77
environment: 'Test',
88
message: SentryMessage('This is an example Dart event.'),
99
tags: const <String, String>{'project-id': '7371'},
10+
// ignore: deprecated_member_use, deprecated_member_use_from_same_package
1011
extra: const <String, String>{'section': '1'},
1112
// fingerprint: const <String>['example-dart'],
1213
user: SentryUser(

dart/lib/src/protocol/sentry_event.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ class SentryEvent with SentryEventLike<SentryEvent> {
1313
DateTime? timestamp,
1414
Map<String, String>? modules,
1515
Map<String, String>? tags,
16-
Map<String, dynamic>? extra,
16+
@Deprecated('Additional Data is deprecated in favor of structured [Contexts] and should be avoided when possible')
17+
Map<String, dynamic>? extra,
1718
List<String>? fingerprint,
1819
List<Breadcrumb>? breadcrumbs,
1920
List<SentryException>? exceptions,
@@ -40,6 +41,7 @@ class SentryEvent with SentryEventLike<SentryEvent> {
4041
contexts = contexts ?? Contexts(),
4142
modules = modules != null ? Map.from(modules) : null,
4243
tags = tags != null ? Map.from(tags) : null,
44+
// ignore: deprecated_member_use_from_same_package
4345
extra = extra != null ? Map.from(extra) : null,
4446
fingerprint = fingerprint != null ? List.from(fingerprint) : null,
4547
breadcrumbs = breadcrumbs != null ? List.from(breadcrumbs) : null,
@@ -128,6 +130,8 @@ class SentryEvent with SentryEventLike<SentryEvent> {
128130
///
129131
/// Sentry.io docs do not talk about restrictions on the values, other than
130132
/// they must be JSON-serializable.
133+
@Deprecated(
134+
'Additional Data is deprecated in favor of structured [Contexts] and should be avoided when possible')
131135
final Map<String, dynamic>? extra;
132136

133137
/// List of breadcrumbs for this event.
@@ -201,7 +205,8 @@ class SentryEvent with SentryEventLike<SentryEvent> {
201205
SentryLevel? level,
202206
String? culprit,
203207
Map<String, String>? tags,
204-
Map<String, dynamic>? extra,
208+
@Deprecated('Additional Data is deprecated in favor of structured [Contexts] and should be avoided when possible')
209+
Map<String, dynamic>? extra,
205210
List<String>? fingerprint,
206211
SentryUser? user,
207212
Contexts? contexts,
@@ -229,6 +234,7 @@ class SentryEvent with SentryEventLike<SentryEvent> {
229234
level: level ?? this.level,
230235
culprit: culprit ?? this.culprit,
231236
tags: (tags != null ? Map.from(tags) : null) ?? this.tags,
237+
// ignore: deprecated_member_use_from_same_package
232238
extra: (extra != null ? Map.from(extra) : null) ?? this.extra,
233239
fingerprint: (fingerprint != null ? List.from(fingerprint) : null) ??
234240
this.fingerprint,
@@ -286,6 +292,7 @@ class SentryEvent with SentryEventLike<SentryEvent> {
286292
timestampJson != null ? DateTime.tryParse(timestampJson) : null,
287293
modules: modules,
288294
tags: tags,
295+
// ignore: deprecated_member_use_from_same_package
289296
extra: extra,
290297
fingerprint:
291298
fingerprintJson?.map((e) => e as String).toList(growable: false),
@@ -374,6 +381,7 @@ class SentryEvent with SentryEventLike<SentryEvent> {
374381
if (level != null) 'level': level!.name,
375382
if (culprit != null) 'culprit': culprit,
376383
if (tags?.isNotEmpty ?? false) 'tags': tags,
384+
// ignore: deprecated_member_use_from_same_package
377385
if (extra?.isNotEmpty ?? false) 'extra': extra,
378386
if (type != null) 'type': type,
379387
if (fingerprint?.isNotEmpty ?? false) 'fingerprint': fingerprint,

dart/lib/src/protocol/sentry_transaction.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ class SentryTransaction extends SentryEvent {
2626
String? transaction,
2727
dynamic throwable,
2828
Map<String, String>? tags,
29-
Map<String, dynamic>? extra,
29+
@Deprecated('Additional Data is deprecated in favor of structured [Contexts] and should be avoided when possible')
30+
Map<String, dynamic>? extra,
3031
SentryUser? user,
3132
Contexts? contexts,
3233
List<Breadcrumb>? breadcrumbs,
@@ -46,6 +47,7 @@ class SentryTransaction extends SentryEvent {
4647
transaction: transaction ?? _tracer.name,
4748
throwable: throwable ?? _tracer.throwable,
4849
tags: tags ?? _tracer.tags,
50+
// ignore: deprecated_member_use_from_same_package
4951
extra: extra ?? _tracer.data,
5052
user: user,
5153
contexts: contexts,
@@ -116,7 +118,8 @@ class SentryTransaction extends SentryEvent {
116118
SentryLevel? level,
117119
String? culprit,
118120
Map<String, String>? tags,
119-
Map<String, dynamic>? extra,
121+
@Deprecated('Additional Data is deprecated in favor of structured [Contexts] and should be avoided when possible')
122+
Map<String, dynamic>? extra,
120123
List<String>? fingerprint,
121124
SentryUser? user,
122125
Contexts? contexts,
@@ -142,6 +145,7 @@ class SentryTransaction extends SentryEvent {
142145
transaction: transaction ?? this.transaction,
143146
throwable: throwable ?? this.throwable,
144147
tags: (tags != null ? Map.from(tags) : null) ?? this.tags,
148+
// ignore: deprecated_member_use_from_same_package
145149
extra: (extra != null ? Map.from(extra) : null) ?? this.extra,
146150
user: user ?? this.user,
147151
contexts: contexts ?? this.contexts,

dart/lib/src/scope.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ class Scope {
285285
? event.breadcrumbs
286286
: List.from(_breadcrumbs),
287287
tags: tags.isNotEmpty ? _mergeEventTags(event) : event.tags,
288+
// ignore: deprecated_member_use_from_same_package
288289
extra: extra.isNotEmpty ? _mergeEventExtra(event) : event.extra,
289290
);
290291

@@ -362,6 +363,7 @@ class Scope {
362363
/// the event extra will be kept.
363364
Map<String, dynamic> _mergeEventExtra(SentryEvent event) =>
364365
extra.map((key, value) => MapEntry(key, value))
366+
// ignore: deprecated_member_use_from_same_package
365367
..addAll(event.extra ?? {});
366368

367369
/// If scope and event have a user, the user of the event takes

dart/test/mocks.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ final fakeEvent = SentryEvent(
2222
transaction: '/example/app',
2323
level: SentryLevel.warning,
2424
tags: const <String, String>{'project-id': '7371'},
25+
// ignore: deprecated_member_use_from_same_package
2526
extra: const <String, String>{'company-name': 'Dart Inc'},
2627
fingerprint: const <String>['example-dart'],
2728
modules: const {'module1': 'factory'},

dart/test/scope_test.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ void main() {
389389
test('apply context to event', () async {
390390
final event = SentryEvent(
391391
tags: const {'etag': '987'},
392+
// ignore: deprecated_member_use_from_same_package
392393
extra: const {'e-infos': 'abc'},
393394
);
394395
final scope = Scope(SentryOptions(dsn: fakeDsn))
@@ -413,7 +414,9 @@ void main() {
413414
expect(updatedEvent?.tags,
414415
{'etag': '987', 'build': '579', 'page-locale': 'en-us'});
415416
expect(
416-
updatedEvent?.extra, {'e-infos': 'abc', 'company-name': 'Dart Inc'});
417+
// ignore: deprecated_member_use_from_same_package
418+
updatedEvent?.extra,
419+
{'e-infos': 'abc', 'company-name': 'Dart Inc'});
417420
expect(updatedEvent?.contexts['theme'], {'value': 'material'});
418421
});
419422

dart/test/sentry_client_test.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,7 @@ void main() {
672672

673673
final event = SentryEvent(
674674
tags: const {eventTagKey: eventTagValue},
675+
// ignore: deprecated_member_use_from_same_package
675676
extra: const {eventExtraKey: eventExtraValue},
676677
modules: const {eventExtraKey: eventExtraValue},
677678
level: SentryLevel.warning,
@@ -709,6 +710,7 @@ void main() {
709710
scopeTagKey: scopeTagValue,
710711
eventTagKey: eventTagValue,
711712
});
713+
// ignore: deprecated_member_use_from_same_package
712714
expect(capturedEvent.extra, {
713715
scopeExtraKey: scopeExtraValue,
714716
eventExtraKey: eventExtraValue,
@@ -1018,6 +1020,7 @@ void main() {
10181020
final event = await eventFromEnvelope(capturedEnvelope);
10191021

10201022
expect(event.tags!.containsKey('theme'), true);
1023+
// ignore: deprecated_member_use_from_same_package
10211024
expect(event.extra!.containsKey('host'), true);
10221025
expect(event.modules!.containsKey('core'), true);
10231026
expect(event.sdk!.integrations.contains('testIntegration'), true);
@@ -1057,6 +1060,7 @@ void main() {
10571060
fixture.options.addEventProcessor(FunctionEventProcessor(
10581061
(event, {hint}) => event
10591062
..tags!.addAll({'theme': 'material'})
1063+
// ignore: deprecated_member_use_from_same_package
10601064
..extra!['host'] = '0.0.0.1'
10611065
..modules!.addAll({'core': '1.0'})
10621066
..breadcrumbs!.add(Breadcrumb(message: 'processor crumb'))
@@ -1074,6 +1078,7 @@ void main() {
10741078
final event = await eventFromEnvelope(capturedEnvelope);
10751079

10761080
expect(event.tags!.containsKey('theme'), true);
1081+
// ignore: deprecated_member_use_from_same_package
10771082
expect(event.extra!.containsKey('host'), true);
10781083
expect(event.modules!.containsKey('core'), true);
10791084
expect(event.sdk!.integrations.contains('testIntegration'), true);
@@ -1620,6 +1625,7 @@ Future<SentryTransaction?> asyncBeforeSendTransactionCallbackDropEvent(
16201625
SentryEvent? beforeSendCallback(SentryEvent event, {Hint? hint}) {
16211626
return event
16221627
..tags!.addAll({'theme': 'material'})
1628+
// ignore: deprecated_member_use_from_same_package
16231629
..extra!['host'] = '0.0.0.1'
16241630
..modules!.addAll({'core': '1.0'})
16251631
..breadcrumbs!.add(Breadcrumb(message: 'processor crumb'))
@@ -1632,6 +1638,7 @@ SentryTransaction? beforeSendTransactionCallback(
16321638
SentryTransaction transaction) {
16331639
return transaction
16341640
..tags!.addAll({'theme': 'material'})
1641+
// ignore: deprecated_member_use_from_same_package
16351642
..extra!['host'] = '0.0.0.1'
16361643
..sdk!.addIntegration('testIntegration')
16371644
..sdk!.addPackage('test-pkg', '1.0')

dart/test/sentry_envelope_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ void main() {
171171
// This test passes if no exceptions are thrown, thus no asserts.
172172
// This is a test for https://github.com/getsentry/sentry-dart/issues/523
173173
test('serialize with non-serializable class', () async {
174+
// ignore: deprecated_member_use_from_same_package
174175
final event = SentryEvent(extra: {'non-ecodable': NonEncodable()});
175176
final sut = SentryEnvelope.fromEvent(
176177
event,

dart/test/sentry_event_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ void main() {
9797
expect(sentryEvent.level, isNull);
9898
expect(sentryEvent.culprit, isNull);
9999
expect(sentryEvent.tags, isNull);
100+
// ignore: deprecated_member_use_from_same_package
100101
expect(sentryEvent.extra, isNull);
101102
expect(sentryEvent.breadcrumbs, isNull);
102103
expect(sentryEvent.user, isNull);
@@ -199,6 +200,7 @@ void main() {
199200
'a': 'b',
200201
'c': 'd',
201202
},
203+
// ignore: deprecated_member_use_from_same_package
202204
extra: const <String, dynamic>{
203205
'e': 'f',
204206
'g': 2,
@@ -441,6 +443,7 @@ void main() {
441443
exceptions: [SentryException(type: null, value: null)],
442444
threads: [SentryThread(stacktrace: SentryStackTrace(frames: []))],
443445
tags: {},
446+
// ignore: deprecated_member_use_from_same_package
444447
extra: {},
445448
contexts: Contexts(),
446449
fingerprint: [],

dart/test/sentry_tracer_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ void main() {
101101

102102
final tr = fixture.hub.captureTransactionCalls.first;
103103

104+
// ignore: deprecated_member_use_from_same_package
104105
expect(tr.transaction.extra?['test'], 'test');
105106
});
106107

@@ -114,6 +115,7 @@ void main() {
114115

115116
final tr = fixture.hub.captureTransactionCalls.first;
116117

118+
// ignore: deprecated_member_use_from_same_package
117119
expect(tr.transaction.extra?['test'], isNull);
118120
});
119121

@@ -126,6 +128,7 @@ void main() {
126128

127129
final tr = fixture.hub.captureTransactionCalls.first;
128130

131+
// ignore: deprecated_member_use_from_same_package
129132
expect(tr.transaction.extra?['test'], {'key': 'value'});
130133
});
131134

dio/test/mocks.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ final fakeEvent = SentryEvent(
2222
transaction: '/example/app',
2323
level: SentryLevel.warning,
2424
tags: const <String, String>{'project-id': '7371'},
25+
// ignore: deprecated_member_use
2526
extra: const <String, String>{'company-name': 'Dart Inc'},
2627
fingerprint: const <String>['example-dart'],
2728
modules: const {'module1': 'factory'},

flutter/lib/src/event_processor/flutter_enricher_event_processor.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ class FlutterEnricherEventProcessor implements EventProcessor {
121121
final defaultRouteName = _window?.defaultRouteName;
122122
// A FlutterEngine has no renderViewElement if it was started or is
123123
// accessed from an isolate different to the main isolate.
124+
125+
// to keep compatibility with older versions
124126
// ignore: deprecated_member_use
125127
final hasRenderView = _widgetsBinding?.renderViewElement != null;
126128

flutter/lib/src/integrations/load_contexts_integration.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ class _LoadContextsIntegrationEventProcessor implements EventProcessor {
100100

101101
final extraMap = infos['extra'] as Map?;
102102
if (extraMap != null && extraMap.isNotEmpty) {
103+
// ignore: deprecated_member_use
103104
final extras = event.extra ?? {};
104105
final newExtras = Map<String, dynamic>.from(extraMap);
105106

@@ -108,6 +109,8 @@ class _LoadContextsIntegrationEventProcessor implements EventProcessor {
108109
extras[extra.key] = extra.value;
109110
}
110111
}
112+
113+
// ignore: deprecated_member_use
111114
event = event.copyWith(extra: extras);
112115
}
113116

flutter/lib/src/view_hierarchy/sentry_tree_walker.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ class _TreeWalker {
293293
}
294294

295295
SentryViewHierarchy? walkWidgetTree(WidgetsBinding instance) {
296+
// to keep compatibility with older versions
296297
// ignore: deprecated_member_use
297298
final rootElement = instance.renderViewElement;
298299
if (rootElement == null) {

flutter/test/integrations/load_contexts_integrations_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ void main() {
5050
packages: packages,
5151
),
5252
tags: tags,
53+
// ignore: deprecated_member_use
5354
extra: extra,
5455
user: user,
5556
dist: dist,
@@ -312,8 +313,11 @@ void main() {
312313
final e = getEvent(extra: {'key': 'flutter', 'key-a': 'flutter'});
313314
final event = await fixture.options.eventProcessors.first.apply(e);
314315

316+
// ignore: deprecated_member_use
315317
expect(event?.extra?['key'], 'flutter');
318+
// ignore: deprecated_member_use
316319
expect(event?.extra?['key-a'], 'flutter');
320+
// ignore: deprecated_member_use
317321
expect(event?.extra?['key-b'], 'native');
318322
});
319323

logging/lib/src/extension.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ extension LogRecordX on LogRecord {
2828
level: level.toSentryLevel(),
2929
message: SentryMessage(message),
3030
throwable: error,
31+
// ignore: deprecated_member_use
3132
extra: <String, Object>{
3233
if (object != null) 'LogRecord.object': object!,
3334
'LogRecord.sequenceNumber': sequenceNumber,

logging/test/logging_integration_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ void main() {
144144
expect(event.level, SentryLevel.warning);
145145
expect(event.logger, 'FooBarLogger');
146146
expect(event.throwable, exception);
147+
// ignore: deprecated_member_use
147148
expect(event.extra?['LogRecord.sequenceNumber'], isNotNull);
148149
expect(fixture.hub.events.first.stackTrace, stackTrace);
149150
});

0 commit comments

Comments
 (0)