Skip to content

Commit 07fe695

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Elements. LibraryElementImpl extends ElementImpl2, not FragmentImpl.
Change-Id: Ibdadbd13238551b8ec70061bc0c24615831b1973 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/427305 Reviewed-by: Paul Berry <paulberry@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
1 parent aa5f130 commit 07fe695

File tree

9 files changed

+60
-66
lines changed

9 files changed

+60
-66
lines changed

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

+34-28
Original file line numberDiff line numberDiff line change
@@ -5619,13 +5619,15 @@ class LabelFragmentImpl extends FragmentImpl implements LabelFragment {
56195619
}
56205620

56215621
/// A concrete implementation of [LibraryElement].
5622-
class LibraryElementImpl extends FragmentImpl
5623-
with _HasLibraryMixin
5624-
implements LibraryElement {
5625-
/// The analysis context in which this library is defined.
5626-
@override
5622+
class LibraryElementImpl extends ElementImpl2 implements LibraryElement {
56275623
final AnalysisContext context;
56285624

5625+
@override
5626+
Reference? reference;
5627+
5628+
@override
5629+
String? documentationComment;
5630+
56295631
@override
56305632
AnalysisSessionImpl session;
56315633

@@ -5637,6 +5639,8 @@ class LibraryElementImpl extends FragmentImpl
56375639

56385640
bool hasTypeProviderSystemSet = false;
56395641

5642+
List<ElementAnnotationImpl> _annotations = [];
5643+
56405644
@override
56415645
late TypeProviderImpl typeProvider;
56425646

@@ -5661,9 +5665,18 @@ class LibraryElementImpl extends FragmentImpl
56615665
/// for this library.
56625666
late final LoadLibraryFunctionProvider loadLibraryProvider;
56635667

5664-
@override
5668+
// TODO(scheglov): replace with `LibraryName` or something.
5669+
String name;
5670+
5671+
// TODO(scheglov): replace with `LibraryName` or something.
5672+
int nameOffset;
5673+
5674+
// TODO(scheglov): replace with `LibraryName` or something.
56655675
int nameLength;
56665676

5677+
@override
5678+
bool isSynthetic = false;
5679+
56675680
@override
56685681
List<ClassElementImpl2> classes = [];
56695682

@@ -5713,12 +5726,20 @@ class LibraryElementImpl extends FragmentImpl
57135726
LibraryElementImpl(
57145727
this.context,
57155728
this.session,
5716-
String name,
5717-
int offset,
5729+
this.name,
5730+
this.nameOffset,
57185731
this.nameLength,
57195732
this.featureSet,
5720-
) : linkedData = null,
5721-
super(name, offset);
5733+
);
5734+
5735+
List<ElementAnnotationImpl> get annotations {
5736+
linkedData?.read(this);
5737+
return _annotations;
5738+
}
5739+
5740+
set annotations(List<ElementAnnotationImpl> value) {
5741+
_annotations = value;
5742+
}
57225743

57235744
@override
57245745
LibraryElementImpl get baseElement => this;
@@ -5746,14 +5767,6 @@ class LibraryElementImpl extends FragmentImpl
57465767
@override
57475768
Null get enclosingElement2 => enclosingElement;
57485769

5749-
@override
5750-
Null get enclosingElement3 => null;
5751-
5752-
@override
5753-
LibraryFragmentImpl get enclosingUnit {
5754-
return definingCompilationUnit;
5755-
}
5756-
57575770
@override
57585771
TopLevelFunctionElementImpl? get entryPoint2 {
57595772
linkedData?.read(this);
@@ -5876,9 +5889,6 @@ class LibraryElementImpl extends FragmentImpl
58765889
_languageVersion = languageVersion;
58775890
}
58785891

5879-
@override
5880-
LibraryElementImpl get library => this;
5881-
58825892
@override
58835893
LibraryElementImpl get library2 => this;
58845894

@@ -5895,14 +5905,10 @@ class LibraryElementImpl extends FragmentImpl
58955905
String? get lookupName => null;
58965906

58975907
@override
5898-
List<ElementAnnotationImpl> get metadata {
5899-
linkedData?.read(this);
5900-
return super.metadata;
5908+
MetadataImpl get metadata2 {
5909+
return MetadataImpl(annotations);
59015910
}
59025911

5903-
@override
5904-
String get name => super.name!;
5905-
59065912
@override
59075913
String? get name3 => name;
59085914

@@ -5937,7 +5943,7 @@ class LibraryElementImpl extends FragmentImpl
59375943
return SinceSdkVersionComputer().compute(this);
59385944
}
59395945

5940-
@override
5946+
// TODO(scheglov): replace with `firstFragment.source`
59415947
Source get source {
59425948
return definingCompilationUnit.source;
59435949
}

pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -1020,7 +1020,7 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
10201020
++_libraryDirectiveIndex;
10211021
var element = node.element2;
10221022
if (element is LibraryElementImpl && _libraryDirectiveIndex == 1) {
1023-
_setOrCreateMetadataElements(element, node.metadata);
1023+
_setElementAnnotations(node.metadata, element.metadata2.annotations);
10241024
}
10251025

10261026
_withElementWalker(null, () {

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

+5-6
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ class ConstructorElementLinkedData
229229
}
230230

231231
/// Lazy reader of resolution information.
232-
abstract class ElementLinkedData<E extends FragmentImpl> {
232+
abstract class ElementLinkedData<E> {
233233
final Reference reference;
234234
final LibraryReader _libraryReader;
235235
final LibraryFragmentImpl unitElement;
@@ -247,8 +247,8 @@ abstract class ElementLinkedData<E extends FragmentImpl> {
247247
) : _libraryReader = libraryReader,
248248
_offset = offset;
249249

250-
void read(FragmentImpl element) {
251-
_clearLinkedDataOnRead(element as E);
250+
void read(E element) {
251+
_clearLinkedDataOnRead(element);
252252
if (_offset == -1) {
253253
return;
254254
}
@@ -508,7 +508,7 @@ class LibraryElementLinkedData extends ElementLinkedData<LibraryElementImpl> {
508508
}
509509

510510
@override
511-
void read(FragmentImpl element) {
511+
void read(LibraryElementImpl element) {
512512
if (!_isLocked) {
513513
super.read(element);
514514
}
@@ -526,7 +526,7 @@ class LibraryElementLinkedData extends ElementLinkedData<LibraryElementImpl> {
526526

527527
@override
528528
void _read(element, reader) {
529-
element.metadata = reader._readAnnotationList(unitElement: unitElement);
529+
element.annotations = reader._readAnnotationList(unitElement: unitElement);
530530

531531
element.entryPoint2 = reader.readElement2() as TopLevelFunctionElementImpl?;
532532

@@ -622,7 +622,6 @@ class LibraryReader {
622622
0,
623623
featureSet,
624624
);
625-
_reference.element = _libraryElement;
626625
_reference.element2 = _libraryElement;
627626
_libraryElement.reference = _reference;
628627

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
7575
libraryElement.documentationComment = getCommentNodeRawText(
7676
libraryDirective.documentationComment,
7777
);
78-
libraryElement.metadata = _buildAnnotations(libraryDirective.metadata);
78+
libraryElement.annotations = _buildAnnotations(libraryDirective.metadata);
7979
return;
8080
}
8181

@@ -105,7 +105,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
105105
break;
106106
}
107107
if (firstDirectiveMetadata != null) {
108-
libraryElement.metadata = firstDirectiveMetadata;
108+
libraryElement.annotations = firstDirectiveMetadata;
109109
}
110110
}
111111
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ class InformativeDataApplier {
597597
var applyOffsets = ApplyConstantOffsets(info.libraryConstantOffsets, (
598598
applier,
599599
) {
600-
applier.applyToMetadata(element);
600+
applier.applyToMetadataList(element.annotations);
601601
});
602602

603603
var linkedData = element.linkedData;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ class LibraryBuilder {
757757
);
758758
libraryElement.isSynthetic = !libraryFile.exists;
759759
libraryElement.languageVersion = libraryUnitNode.languageVersion;
760-
_bindReference(libraryReference, libraryElement);
760+
libraryElement.reference = libraryReference;
761761
libraryReference.element2 = libraryElement;
762762

763763
var unitContainerRef = libraryReference.getChild('@fragment');

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

+10-6
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ class LinkedElementFactory {
6363
@visibleForTesting
6464
List<Uri> get uriListWithLibraryElements {
6565
return rootReference.children
66-
.map((reference) => reference.element)
66+
.map((reference) => reference.element2)
6767
.whereType<LibraryElementImpl>()
68-
.map((e) => e.source.uri)
68+
.map((e) => e.uri)
6969
.toList();
7070
}
7171

@@ -158,7 +158,7 @@ class LinkedElementFactory {
158158
// During linking we create libraries when typeProvider is not ready.
159159
// Update these libraries now, when typeProvider is ready.
160160
for (var reference in rootReference.children) {
161-
var libraryElement = reference.element as LibraryElementImpl?;
161+
var libraryElement = reference.element2 as LibraryElementImpl?;
162162
if (libraryElement != null && !libraryElement.hasTypeProviderSystemSet) {
163163
setLibraryTypeSystem(libraryElement);
164164
}
@@ -182,7 +182,8 @@ class LinkedElementFactory {
182182

183183
if (reference.isLibrary) {
184184
var uri = uriCache.parse(reference.name);
185-
return createLibraryElementForReading(uri);
185+
createLibraryElementForReading(uri);
186+
return null;
186187
}
187188

188189
var parentRef = reference.parentNotContainer;
@@ -216,7 +217,10 @@ class LinkedElementFactory {
216217

217218
LibraryElementImpl? libraryOfUri(Uri uri) {
218219
var reference = rootReference.getChild('$uri');
219-
return elementOfReference(reference) as LibraryElementImpl?;
220+
if (reference.element2 case LibraryElementImpl element) {
221+
return element;
222+
}
223+
return createLibraryElementForReading(uri);
220224
}
221225

222226
LibraryElementImpl libraryOfUri2(Uri uri) {
@@ -270,7 +274,7 @@ class LinkedElementFactory {
270274
void replaceAnalysisSession(AnalysisSessionImpl newSession) {
271275
analysisSession = newSession;
272276
for (var libraryReference in rootReference.children) {
273-
var libraryElement = libraryReference.element;
277+
var libraryElement = libraryReference.element2;
274278
if (libraryElement is LibraryElementImpl) {
275279
libraryElement.session = newSession;
276280
}

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

-2
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,6 @@ extension ElementOrNullExtension on FragmentImpl? {
201201
return self.element;
202202
} else if (self is LabelFragmentImpl) {
203203
return self.element2;
204-
} else if (self is LibraryElementImpl) {
205-
return self;
206204
} else if (self is LocalVariableFragmentImpl) {
207205
return self.element;
208206
} else if (self is NeverFragmentImpl) {

pkg/analyzer/test/src/summary/element_text.dart

+6-19
Original file line numberDiff line numberDiff line change
@@ -213,20 +213,7 @@ abstract class _AbstractElementWriter {
213213
node.accept(_createAstPrinter());
214214
}
215215

216-
void _writeReference(FragmentImpl e) {
217-
if (!configuration.withReferences) {
218-
return;
219-
}
220-
221-
if (e.reference case var reference?) {
222-
_sink.writeIndentedLine(() {
223-
_sink.write('reference: ');
224-
_elementPrinter.writeReference(reference);
225-
});
226-
}
227-
}
228-
229-
void _writeReference2(ElementImpl2 e) {
216+
void _writeReference(ElementImpl2 e) {
230217
if (!configuration.withReferences) {
231218
return;
232219
}
@@ -254,7 +241,7 @@ class _Element2Writer extends _AbstractElementWriter {
254241

255242
_sink.writelnWithIndent('library');
256243
_sink.withIndent(() {
257-
_writeReference(e as FragmentImpl);
244+
_writeReference(e);
258245

259246
var name = e.name;
260247
if (name.isNotEmpty) {
@@ -1129,7 +1116,7 @@ class _Element2Writer extends _AbstractElementWriter {
11291116
});
11301117

11311118
_sink.withIndent(() {
1132-
_writeReference2(e);
1119+
_writeReference(e);
11331120
_writeFragmentReference('firstFragment', e.firstFragment);
11341121
_writeDocumentation(e.documentationComment);
11351122
// _writeMetadata(e.metadata);
@@ -1412,7 +1399,7 @@ class _Element2Writer extends _AbstractElementWriter {
14121399
});
14131400

14141401
_sink.withIndent(() {
1415-
_writeReference2(e);
1402+
_writeReference(e);
14161403
_writeFragmentReference('firstFragment', e.firstFragment);
14171404
// _writeElementReference(e.enclosingElement2, label: 'enclosingElement2');
14181405
if (e.hasEnclosingTypeParameterReference) {
@@ -1702,7 +1689,7 @@ class _Element2Writer extends _AbstractElementWriter {
17021689
});
17031690

17041691
_sink.withIndent(() {
1705-
_writeReference2(e);
1692+
_writeReference(e);
17061693
_writeFragmentReference('firstFragment', e.firstFragment);
17071694
_writeDocumentation(e.documentationComment);
17081695
_writeMetadata(e.metadata2);
@@ -1800,7 +1787,7 @@ class _Element2Writer extends _AbstractElementWriter {
18001787
// }
18011788

18021789
_sink.withIndent(() {
1803-
_writeReference2(e);
1790+
_writeReference(e);
18041791
_writeFragmentReference('firstFragment', e.firstFragment);
18051792
_writeDocumentation(e.documentationComment);
18061793
_writeMetadata(e.metadata2);

0 commit comments

Comments
 (0)