Skip to content

Commit c959e91

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Tracking for LibraryElementImpl.typeProvider and typeSystem.
Change-Id: I69a224990780a8a6ce244b7ffdd84092db64738e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449386 Reviewed-by: Johnni Winther <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent dd2a347 commit c959e91

File tree

5 files changed

+102
-0
lines changed

5 files changed

+102
-0
lines changed

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5906,9 +5906,11 @@ class LibraryElementImpl extends ElementImpl
59065906
bool hasTypeProviderSystemSet = false;
59075907

59085908
@override
5909+
@trackedIndirectly
59095910
late TypeProviderImpl typeProvider;
59105911

59115912
@override
5913+
@trackedIndirectly
59125914
late TypeSystemImpl typeSystem;
59135915

59145916
@trackedInternal
@@ -6709,6 +6711,14 @@ class LibraryElementImpl extends ElementImpl
67096711
return false;
67106712
}
67116713

6714+
@trackedInternal
6715+
void recordGetDeclaredClass(String name) {
6716+
globalResultRequirements?.record_library_getClass(
6717+
element: this,
6718+
name: name,
6719+
);
6720+
}
6721+
67126722
@trackedInternal
67136723
void resetScope() {
67146724
_libraryDeclarations = null;

pkg/analyzer/lib/src/dart/element/type_provider.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ class TypeProviderImpl extends TypeProviderBase {
159159

160160
@override
161161
ClassElementImpl get boolElement {
162+
_coreLibrary.recordGetDeclaredClass('bool');
162163
return _boolElement ??= _getClassElement(_coreLibrary, 'bool');
163164
}
164165

@@ -182,6 +183,7 @@ class TypeProviderImpl extends TypeProviderBase {
182183
}
183184

184185
ClassElementImpl get deprecatedElement {
186+
_coreLibrary.recordGetDeclaredClass('Deprecated');
185187
return _deprecatedElement ??= _getClassElement(_coreLibrary, 'Deprecated');
186188
}
187189

@@ -195,6 +197,7 @@ class TypeProviderImpl extends TypeProviderBase {
195197

196198
@override
197199
ClassElementImpl get doubleElement {
200+
_coreLibrary.recordGetDeclaredClass('double');
198201
return _doubleElement ??= _getClassElement(_coreLibrary, "double");
199202
}
200203

@@ -222,6 +225,7 @@ class TypeProviderImpl extends TypeProviderBase {
222225
ClassElementImpl? get enumElement {
223226
if (!_hasEnumElement) {
224227
_hasEnumElement = true;
228+
_coreLibrary.recordGetDeclaredClass('Enum');
225229
_enumElement = _getClassElement(_coreLibrary, 'Enum');
226230
}
227231
return _enumElement;
@@ -249,6 +253,7 @@ class TypeProviderImpl extends TypeProviderBase {
249253
}
250254

251255
ClassElementImpl get functionElement {
256+
_coreLibrary.recordGetDeclaredClass('Function');
252257
return _functionElement ??= _getClassElement(_coreLibrary, 'Function');
253258
}
254259

@@ -270,6 +275,7 @@ class TypeProviderImpl extends TypeProviderBase {
270275

271276
@override
272277
ClassElementImpl get futureElement {
278+
_asyncLibrary.recordGetDeclaredClass('Future');
273279
return _futureElement ??= _getClassElement(_asyncLibrary, 'Future');
274280
}
275281

@@ -289,6 +295,7 @@ class TypeProviderImpl extends TypeProviderBase {
289295

290296
@override
291297
ClassElementImpl get futureOrElement {
298+
_asyncLibrary.recordGetDeclaredClass('FutureOr');
292299
return _futureOrElement ??= _getClassElement(_asyncLibrary, 'FutureOr');
293300
}
294301

@@ -308,6 +315,7 @@ class TypeProviderImpl extends TypeProviderBase {
308315

309316
@override
310317
ClassElementImpl get intElement {
318+
_coreLibrary.recordGetDeclaredClass('int');
311319
return _intElement ??= _getClassElement(_coreLibrary, "int");
312320
}
313321

@@ -338,6 +346,7 @@ class TypeProviderImpl extends TypeProviderBase {
338346

339347
@override
340348
ClassElementImpl get iterableElement {
349+
_coreLibrary.recordGetDeclaredClass('Iterable');
341350
return _iterableElement ??= _getClassElement(_coreLibrary, 'Iterable');
342351
}
343352

@@ -357,6 +366,7 @@ class TypeProviderImpl extends TypeProviderBase {
357366

358367
@override
359368
ClassElementImpl get listElement {
369+
_coreLibrary.recordGetDeclaredClass('List');
360370
return _listElement ??= _getClassElement(_coreLibrary, 'List');
361371
}
362372

@@ -368,6 +378,7 @@ class TypeProviderImpl extends TypeProviderBase {
368378

369379
@override
370380
ClassElementImpl get mapElement {
381+
_coreLibrary.recordGetDeclaredClass('Map');
371382
return _mapElement ??= _getClassElement(_coreLibrary, 'Map');
372383
}
373384

@@ -390,6 +401,7 @@ class TypeProviderImpl extends TypeProviderBase {
390401

391402
@override
392403
ClassElementImpl get nullElement {
404+
_coreLibrary.recordGetDeclaredClass('Null');
393405
return _nullElement ??= _getClassElement(_coreLibrary, 'Null');
394406
}
395407

@@ -409,6 +421,7 @@ class TypeProviderImpl extends TypeProviderBase {
409421

410422
@override
411423
ClassElementImpl get numElement {
424+
_coreLibrary.recordGetDeclaredClass('num');
412425
return _numElement ??= _getClassElement(_coreLibrary, 'num');
413426
}
414427

@@ -431,6 +444,7 @@ class TypeProviderImpl extends TypeProviderBase {
431444

432445
@override
433446
ClassElementImpl get objectElement {
447+
_coreLibrary.recordGetDeclaredClass('Object');
434448
return _objectElement ??= _getClassElement(_coreLibrary, 'Object');
435449
}
436450

@@ -458,6 +472,7 @@ class TypeProviderImpl extends TypeProviderBase {
458472

459473
@override
460474
ClassElementImpl get recordElement {
475+
_coreLibrary.recordGetDeclaredClass('Record');
461476
return _recordElement ??= _getClassElement(_coreLibrary, 'Record');
462477
}
463478

@@ -477,6 +492,7 @@ class TypeProviderImpl extends TypeProviderBase {
477492

478493
@override
479494
ClassElementImpl get setElement {
495+
_coreLibrary.recordGetDeclaredClass('Set');
480496
return _setElement ??= _getClassElement(_coreLibrary, 'Set');
481497
}
482498

@@ -487,6 +503,7 @@ class TypeProviderImpl extends TypeProviderBase {
487503
}
488504

489505
ClassElementImpl get stackTraceElement {
506+
_coreLibrary.recordGetDeclaredClass('StackTrace');
490507
return _stackTraceElement ??= _getClassElement(_coreLibrary, 'StackTrace');
491508
}
492509

@@ -508,6 +525,7 @@ class TypeProviderImpl extends TypeProviderBase {
508525

509526
@override
510527
ClassElementImpl get streamElement {
528+
_asyncLibrary.recordGetDeclaredClass('Stream');
511529
return _streamElement ??= _getClassElement(_asyncLibrary, 'Stream');
512530
}
513531

@@ -519,6 +537,7 @@ class TypeProviderImpl extends TypeProviderBase {
519537

520538
@override
521539
ClassElementImpl get stringElement {
540+
_coreLibrary.recordGetDeclaredClass('String');
522541
return _stringElement ??= _getClassElement(_coreLibrary, 'String');
523542
}
524543

@@ -538,6 +557,7 @@ class TypeProviderImpl extends TypeProviderBase {
538557

539558
@override
540559
ClassElementImpl get symbolElement {
560+
_coreLibrary.recordGetDeclaredClass('Symbol');
541561
return _symbolElement ??= _getClassElement(_coreLibrary, 'Symbol');
542562
}
543563

@@ -556,6 +576,7 @@ class TypeProviderImpl extends TypeProviderBase {
556576
}
557577

558578
ClassElementImpl get typeElement {
579+
_coreLibrary.recordGetDeclaredClass('Type');
559580
return _typeElement ??= _getClassElement(_coreLibrary, 'Type');
560581
}
561582

pkg/analyzer/test/src/dart/analysis/driver_test.dart

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31215,6 +31215,64 @@ typedef C = int;
3121531215
);
3121631216
}
3121731217

31218+
test_dependency_libraryElement_typeProvider_changeDartCore() async {
31219+
configuration
31220+
..withGetErrorsEvents = false
31221+
..withStreamResolvedUnitResults = false;
31222+
31223+
_ManualRequirements.install((state) {
31224+
var library = state.singleUnit.libraryElement;
31225+
library.typeProvider.intElement;
31226+
});
31227+
31228+
await _runChangeScenario(
31229+
operation: _FineOperationTestFileGetErrors(),
31230+
expectedInitialEvents: r'''
31231+
[status] working
31232+
[operation] linkLibraryCycle SDK
31233+
[operation] linkLibraryCycle
31234+
package:test/test.dart
31235+
requirements
31236+
[operation] analyzeFile
31237+
file: /home/test/lib/test.dart
31238+
library: /home/test/lib/test.dart
31239+
[operation] analyzedLibrary
31240+
file: /home/test/lib/test.dart
31241+
requirements
31242+
[status] idle
31243+
''',
31244+
updateFiles: () {
31245+
var core = sdkRoot.getChildAssumingFile('lib/core/core.dart');
31246+
var newCode = core.readAsStringSync().replaceFirst(
31247+
'abstract final class int extends num {',
31248+
'@deprecated abstract final class int extends num {',
31249+
);
31250+
modifyFile2(core, newCode);
31251+
return [core];
31252+
},
31253+
expectedUpdatedEvents: r'''
31254+
[status] working
31255+
[operation] linkLibraryCycle SDK
31256+
[operation] reuseLinkedBundle
31257+
package:test/test.dart
31258+
[operation] checkLibraryDiagnosticsRequirements
31259+
library: /home/test/lib/test.dart
31260+
topLevelIdMismatch
31261+
libraryUri: dart:core
31262+
name: int
31263+
expectedId: #M0
31264+
actualId: #M1
31265+
[operation] analyzeFile
31266+
file: /home/test/lib/test.dart
31267+
library: /home/test/lib/test.dart
31268+
[operation] analyzedLibrary
31269+
file: /home/test/lib/test.dart
31270+
requirements
31271+
[status] idle
31272+
''',
31273+
);
31274+
}
31275+
3121831276
test_dependency_mixin_instanceField_add_hasNonFinalField() async {
3121931277
configuration
3122031278
..withGetErrorsEvents = false

pkg/linter/lib/src/rules/analyzer_element_model_tracking.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class _Visitor extends SimpleAstVisitor<void> {
7676
var hasRequired = false;
7777
for (var annotation in trackingAnnotations) {
7878
if (annotation.element.isTrackedIncludedInId ||
79+
annotation.element.isTrackedIndirectly ||
7980
annotation.element.isTrackedInternal) {
8081
if (hasRequired) {
8182
_reportMoreThanOne(annotation);

pkg/linter/test/rules/analyzer_element_model_tracking_test.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,18 @@ class A {
161161
);
162162
}
163163

164+
test_public_instancePublic_field_trackedIndirectly() async {
165+
await assertNoDiagnostics(r'''
166+
import 'package:analyzer/src/fine/annotations.dart';
167+
168+
@elementClass
169+
class A {
170+
@trackedIndirectly
171+
final int foo = 0;
172+
}
173+
''');
174+
}
175+
164176
test_public_instancePublic_field_trackedInternal() async {
165177
await assertNoDiagnostics(r'''
166178
import 'package:analyzer/src/fine/annotations.dart';

0 commit comments

Comments
 (0)