Skip to content

Commit b1321b8

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Add a few tracking annotations for LibraryElementImpl, firstFragment, fragments.
Change-Id: I50378fad69b151204a432e4bf524100c764ce980 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449384 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent e43e28a commit b1321b8

File tree

7 files changed

+48
-14
lines changed

7 files changed

+48
-14
lines changed

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

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5901,6 +5901,7 @@ class LibraryElementImpl extends ElementImpl
59015901
/// The language version for the library.
59025902
LibraryLanguageVersion? _languageVersion;
59035903

5904+
@trackedInternal
59045905
bool hasTypeProviderSystemSet = false;
59055906

59065907
@override
@@ -5965,8 +5966,14 @@ class LibraryElementImpl extends ElementImpl
59655966
LibraryDeclarations? _libraryDeclarations;
59665967

59675968
/// With fine-grained dependencies, the manifest of the library.
5969+
@trackedInternal
59685970
LibraryManifest? manifest;
59695971

5972+
@trackedInternal
5973+
late final LibraryElementImplInternal internal = LibraryElementImplInternal(
5974+
this,
5975+
);
5976+
59705977
/// Initialize a newly created library element in the given [context] to have
59715978
/// the given [name] and [offset].
59725979
LibraryElementImpl(
@@ -6066,6 +6073,7 @@ class LibraryElementImpl extends ElementImpl
60666073

60676074
@Deprecated('Use exportedLibraries instead')
60686075
@override
6076+
@trackedIndirectly
60696077
List<LibraryElementImpl> get exportedLibraries2 {
60706078
return exportedLibraries;
60716079
}
@@ -6136,15 +6144,21 @@ class LibraryElementImpl extends ElementImpl
61366144
}
61376145

61386146
@override
6139-
LibraryFragmentImpl get firstFragment => _firstFragment;
6147+
@trackedDirectlyOpaque
6148+
LibraryFragmentImpl get firstFragment {
6149+
globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
6150+
return _firstFragment;
6151+
}
61406152

61416153
set firstFragment(LibraryFragmentImpl value) {
61426154
_firstFragment = value;
61436155
}
61446156

61456157
@override
6158+
@trackedDirectlyOpaque
61466159
List<LibraryFragmentImpl> get fragments {
6147-
return [_firstFragment, ..._partUnits];
6160+
globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
6161+
return _fragments;
61486162
}
61496163

61506164
@override
@@ -6342,6 +6356,10 @@ class LibraryElementImpl extends ElementImpl
63426356
@trackedIncludedInId
63436357
Uri get uri => _firstFragment.source.uri;
63446358

6359+
List<LibraryFragmentImpl> get _fragments {
6360+
return [_firstFragment, ..._partUnits];
6361+
}
6362+
63456363
List<LibraryFragmentImpl> get _partUnits {
63466364
var result = <LibraryFragmentImpl>[];
63476365

@@ -6360,12 +6378,15 @@ class LibraryElementImpl extends ElementImpl
63606378
}
63616379

63626380
@override
6381+
@trackedDirectlyOpaque
63636382
T? accept<T>(ElementVisitor2<T> visitor) {
6383+
globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
63646384
return visitor.visitLibraryElement(this);
63656385
}
63666386

63676387
@Deprecated('Use accept instead')
63686388
@override
6389+
@trackedIndirectly
63696390
T? accept2<T>(ElementVisitor2<T> visitor) => accept(visitor);
63706391

63716392
@trackedInternal
@@ -6447,6 +6468,7 @@ class LibraryElementImpl extends ElementImpl
64476468

64486469
@Deprecated('Use getClass instead')
64496470
@override
6471+
@trackedIndirectly
64506472
ClassElementImpl? getClass2(String name) {
64516473
return getClass(name);
64526474
}
@@ -6612,7 +6634,8 @@ class LibraryElementImpl extends ElementImpl
66126634
bool isFromDeprecatedExport(ExportedReference reference) {
66136635
if (reference is ExportedReferenceExported) {
66146636
for (var location in reference.locations) {
6615-
var export = location.exportOf(this);
6637+
var fragment = _fragments[location.fragmentIndex];
6638+
var export = fragment.libraryExports[location.exportIndex];
66166639
if (!export.metadata.hasDeprecated) {
66176640
return false;
66186641
}
@@ -6675,6 +6698,19 @@ class LibraryElementImpl extends ElementImpl
66756698
}
66766699
}
66776700

6701+
/// Exposes [LibraryElementImpl] properties that normally are not intended
6702+
/// to be used during resolution, and would cause opaque API requirement
6703+
/// recorded, but necessary during the element model building or loading.
6704+
class LibraryElementImplInternal {
6705+
final LibraryElementImpl _library;
6706+
6707+
LibraryElementImplInternal(this._library);
6708+
6709+
LibraryFragmentImpl get firstFragment => _library._firstFragment;
6710+
6711+
List<LibraryFragmentImpl> get fragments => _library._fragments;
6712+
}
6713+
66786714
class LibraryExportImpl extends ElementDirectiveImpl implements LibraryExport {
66796715
@override
66806716
final List<NamespaceCombinator> combinators;

pkg/analyzer/lib/src/error/best_practices_verifier.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2116,7 +2116,8 @@ class _InvalidAccessVerifier {
21162116
// if we were unable to determine what package [_currentLibrary] is in.
21172117
return false;
21182118
}
2119-
return _workspacePackage.contains(library.firstFragment.source);
2119+
library as LibraryElementImpl;
2120+
return _workspacePackage.contains(library.internal.firstFragment.source);
21202121
}
21212122

21222123
/// Check if @visibleForTemplate is applied to the given [Element].

pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:analyzer/dart/element/element.dart';
77
import 'package:analyzer/dart/element/type.dart';
88
import 'package:analyzer/error/listener.dart';
99
import 'package:analyzer/src/dart/ast/ast.dart';
10+
import 'package:analyzer/src/dart/element/element.dart';
1011
import 'package:analyzer/src/dart/element/extensions.dart';
1112
import 'package:analyzer/src/dart/error/hint_codes.dart';
1213
import 'package:analyzer/src/workspace/workspace.dart';
@@ -366,6 +367,7 @@ class DeprecatedMemberUseVerifier extends BaseDeprecatedMemberUseVerifier {
366367
if (_workspacePackage == null || library == null) {
367368
return false;
368369
}
369-
return _workspacePackage.contains(library.firstFragment.source);
370+
library as LibraryElementImpl;
371+
return _workspacePackage.contains(library.internal.firstFragment.source);
370372
}
371373
}

pkg/analyzer/lib/src/summary2/bundle_reader.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ class LibraryReader {
179179

180180
var resolutionOffset = _baseResolutionOffset + _reader.readUint30();
181181
_libraryElement.deferReadResolution(() {
182-
var unitElement = _libraryElement.firstFragment;
182+
var unitElement = _libraryElement.internal.firstFragment;
183183
var reader = ResolutionReader(
184184
_elementFactory,
185185
_referenceReader,

pkg/analyzer/lib/src/summary2/export.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,6 @@ class ExportLocation {
8989
other.exportIndex == exportIndex;
9090
}
9191

92-
LibraryExportImpl exportOf(LibraryElementImpl library) {
93-
var fragment = library.fragments[fragmentIndex];
94-
return fragment.libraryExports[exportIndex];
95-
}
96-
9792
@override
9893
String toString() {
9994
return '($fragmentIndex, $exportIndex)';

pkg/analyzer/lib/src/summary2/informative_data.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class InformativeDataApplier {
4444
}
4545
elementFactory.isApplyingInformativeData = true;
4646

47-
for (var unitElement in libraryElement.fragments) {
47+
for (var unitElement in libraryElement.internal.fragments) {
4848
var uri = unitElement.source.uri;
4949
if (unitsInformativeBytes[uri] case var infoBytes?) {
5050
_applyFromBytes(unitElement, infoBytes);
@@ -62,7 +62,7 @@ class InformativeDataApplier {
6262

6363
void _applyFromInfo(LibraryFragmentImpl unitElement, _InfoUnit unitInfo) {
6464
var libraryElement = unitElement.library;
65-
if (identical(libraryElement.firstFragment, unitElement)) {
65+
if (identical(libraryElement.internal.firstFragment, unitElement)) {
6666
_applyToLibrary(libraryElement, unitInfo);
6767
}
6868

pkg/analyzer/lib/src/summary2/library_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class LibraryBuilder {
106106
}
107107

108108
void addExporters() {
109-
for (var (fragmentIndex, fragment) in element.fragments.indexed) {
109+
for (var (fragmentIndex, fragment) in element.internal.fragments.indexed) {
110110
for (var (exportIndex, exportElement)
111111
in fragment.libraryExports.indexed) {
112112
var exportedLibrary = exportElement.exportedLibrary;

0 commit comments

Comments
 (0)