Skip to content

Commit 9fc86d9

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Store MetadataImpl in ElementDirectiveImpl.
Change-Id: Id2fcb0a343f69a92762bba350f715730e3e1e499 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/432321 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent a5520d0 commit 9fc86d9

File tree

5 files changed

+31
-41
lines changed

5 files changed

+31
-41
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2004,18 +2004,14 @@ sealed class ElementDirectiveImpl implements ElementDirective {
20042004
@override
20052005
final DirectiveUri uri;
20062006

2007-
List<ElementAnnotationImpl> annotations = [];
2007+
@override
2008+
MetadataImpl metadata = MetadataImpl(const []);
20082009

20092010
ElementDirectiveImpl({required this.uri});
20102011

20112012
@override
20122013
Null get documentationComment => null;
20132014

2014-
@override
2015-
MetadataImpl get metadata {
2016-
return MetadataImpl(annotations);
2017-
}
2018-
20192015
@Deprecated('Use metadata instead')
20202016
@override
20212017
MetadataImpl get metadata2 => metadata;
@@ -7480,6 +7476,10 @@ final class MetadataImpl implements Metadata {
74807476
return false;
74817477
}
74827478

7479+
void resetCache() {
7480+
_metadataFlags2 = 0;
7481+
}
7482+
74837483
/// Return flags that denote presence of a few specific annotations.
74847484
int _getMetadataFlags() {
74857485
var result = _metadataFlags2;

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

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -174,23 +174,23 @@ class CompilationUnitElementLinkedData
174174
@override
175175
void _read(element, reader) {
176176
for (var import in element.libraryImports) {
177-
import.annotations = reader._readAnnotationList(unitElement: unitElement);
177+
import.metadata = reader._readMetadata(unitElement: unitElement);
178178
var uri = import.uri;
179179
if (uri is DirectiveUriWithLibraryImpl) {
180180
uri.library2 = reader.libraryOfUri(uri.source.uri);
181181
}
182182
}
183183

184184
for (var export in element.libraryExports) {
185-
export.annotations = reader._readAnnotationList(unitElement: unitElement);
185+
export.metadata = reader._readMetadata(unitElement: unitElement);
186186
var uri = export.uri;
187187
if (uri is DirectiveUriWithLibraryImpl) {
188188
uri.library2 = reader.libraryOfUri(uri.source.uri);
189189
}
190190
}
191191

192192
for (var part in element.parts) {
193-
part.annotations = reader._readAnnotationList(unitElement: unitElement);
193+
part.metadata = reader._readMetadata(unitElement: unitElement);
194194
}
195195

196196
applyConstantOffsets?.perform();
@@ -2261,17 +2261,6 @@ class ResolutionReader {
22612261
return type;
22622262
}
22632263

2264-
List<ElementAnnotationImpl> _readAnnotationList({
2265-
required LibraryFragmentImpl unitElement,
2266-
}) {
2267-
return readTypedList(() {
2268-
var ast = _readRequiredNode() as AnnotationImpl;
2269-
return ElementAnnotationImpl(unitElement)
2270-
..annotationAst = ast
2271-
..element2 = ast.element2;
2272-
});
2273-
}
2274-
22752264
List<FormalParameterFragmentImpl> _readFormalParameters(
22762265
LibraryFragmentImpl? unitElement,
22772266
) {
@@ -2378,7 +2367,13 @@ class ResolutionReader {
23782367
}
23792368

23802369
MetadataImpl _readMetadata({required LibraryFragmentImpl unitElement}) {
2381-
var annotations = _readAnnotationList(unitElement: unitElement);
2370+
var annotations = readTypedList(() {
2371+
var ast = _readRequiredNode() as AnnotationImpl;
2372+
return ElementAnnotationImpl(unitElement)
2373+
..annotationAst = ast
2374+
..element2 = ast.element2;
2375+
});
2376+
23822377
return MetadataImpl(annotations);
23832378
}
23842379

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

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class BundleWriter {
110110

111111
// Write resolution data for the library.
112112
_sink.writeUInt30(_resolutionSink.offset);
113-
_resolutionSink._writeAnnotationList(libraryElement.metadata.annotations);
113+
_resolutionSink._writeMetadata(libraryElement.metadata);
114114
_resolutionSink.writeElement(libraryElement.entryPoint2);
115115
_writeFieldNameNonPromotabilityInfo(
116116
libraryElement.fieldNameNonPromotabilityInfo,
@@ -387,13 +387,13 @@ class BundleWriter {
387387
}
388388

389389
void _writeLibraryExport(LibraryExportImpl element) {
390-
_resolutionSink._writeAnnotationList(element.annotations);
390+
_resolutionSink._writeMetadata(element.metadata);
391391
_sink.writeList(element.combinators, _writeNamespaceCombinator);
392392
_writeDirectiveUri(element.uri);
393393
}
394394

395395
void _writeLibraryImport(LibraryImportImpl element) {
396-
_resolutionSink._writeAnnotationList(element.annotations);
396+
_resolutionSink._writeMetadata(element.metadata);
397397
_sink.writeBool(element.isSynthetic);
398398
_sink.writeList(element.combinators, _writeNamespaceCombinator);
399399
_writeLibraryImportPrefixFragment(element.prefix2);
@@ -521,7 +521,7 @@ class BundleWriter {
521521
/// sequentially.
522522
void _writePartElementsMetadata(LibraryFragmentImpl unitElement) {
523523
for (var element in unitElement.parts) {
524-
_resolutionSink._writeAnnotationList(element.annotations);
524+
_resolutionSink._writeMetadata(element.metadata);
525525
}
526526
}
527527

@@ -859,14 +859,6 @@ class ResolutionSink extends _SummaryDataWriter {
859859
}
860860
}
861861

862-
void _writeAnnotationList(List<ElementAnnotation> annotations) {
863-
writeUInt30(annotations.length);
864-
for (var annotation in annotations) {
865-
annotation as ElementAnnotationImpl;
866-
_writeNode(annotation.annotationAst);
867-
}
868-
}
869-
870862
void _writeElement(Element? element) {
871863
switch (element) {
872864
case null:
@@ -951,7 +943,9 @@ class ResolutionSink extends _SummaryDataWriter {
951943
}
952944

953945
void _writeMetadata(MetadataImpl metadata) {
954-
_writeAnnotationList(metadata.annotations);
946+
writeList(metadata.annotations, (annotation) {
947+
_writeNode(annotation.annotationAst);
948+
});
955949
}
956950

957951
void _writeNode(AstNode node) {

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
512512
void visitExportDirective(covariant ExportDirectiveImpl node) {
513513
var index = _exportDirectiveIndex++;
514514
var exportElement = _unitElement.libraryExports[index];
515-
exportElement.annotations = _buildAnnotations(node.metadata);
515+
exportElement.metadata = _buildMetadata(node.metadata);
516516
node.libraryExport = exportElement;
517517
}
518518

@@ -1177,7 +1177,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
11771177
void visitImportDirective(covariant ImportDirectiveImpl node) {
11781178
var index = _importDirectiveIndex++;
11791179
var importElement = _unitElement.libraryImports[index];
1180-
importElement.annotations = _buildAnnotations(node.metadata);
1180+
importElement.metadata = _buildMetadata(node.metadata);
11811181
node.libraryImport = importElement;
11821182
}
11831183

@@ -1370,7 +1370,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
13701370
void visitPartDirective(covariant PartDirectiveImpl node) {
13711371
var index = _partDirectiveIndex++;
13721372
var partElement = _unitElement.parts[index];
1373-
partElement.annotations = _buildAnnotations(node.metadata);
1373+
partElement.metadata = _buildMetadata(node.metadata);
13741374
node.partInclude = partElement;
13751375
}
13761376

@@ -1652,10 +1652,6 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
16521652
node.mixinTypes.accept(this);
16531653
}
16541654

1655-
List<ElementAnnotationImpl> _buildAnnotations(List<Annotation> nodeList) {
1656-
return _buildAnnotationsWithUnit(_unitElement, nodeList);
1657-
}
1658-
16591655
void _buildExecutableElementChildren({
16601656
required Reference reference,
16611657
required ExecutableFragmentImpl fragment,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ class MetadataResolver extends ThrowingAstVisitor<void> {
9797
@override
9898
void visitExportDirective(covariant ExportDirectiveImpl node) {
9999
node.metadata.accept(this);
100+
101+
// We access export directive metadata while building scopes.
102+
// But for the current library cycle the metadata was not resolved yet.
103+
// Now that we resolved it, reset the cache.
104+
node.libraryExport!.metadata.resetCache();
100105
}
101106

102107
@override

0 commit comments

Comments
 (0)