Skip to content

Commit d83aa00

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Consistently read ClassElement members.
With the changes to storing / reading of fragments and elements that I have in mind, not reading members significantly complicates the implementation. Change-Id: I134b961f4e4d1515700e9d535ddb7742cb070fcf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/392181 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 106489a commit d83aa00

File tree

5 files changed

+15
-96
lines changed

5 files changed

+15
-96
lines changed

pkg/analyzer/lib/src/dart/analysis/driver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ import 'package:meta/meta.dart';
9898
// TODO(scheglov): Clean up the list of implicitly analyzed files.
9999
class AnalysisDriver {
100100
/// The version of data format, should be incremented on every format change.
101-
static const int DATA_VERSION = 405;
101+
static const int DATA_VERSION = 407;
102102

103103
/// The number of exception contexts allowed to write. Once this field is
104104
/// zero, we stop writing any new exception contexts in this process.

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5086,11 +5086,6 @@ abstract class InstanceElementImpl extends _ExistingElementImpl
50865086

50875087
@override
50885088
List<PropertyAccessorElementImpl> get accessors {
5089-
if (!identical(_accessors, _Sentinel.propertyAccessorElement)) {
5090-
return _accessors;
5091-
}
5092-
5093-
linkedData?.readMembers(this);
50945089
return _accessors;
50955090
}
50965091

@@ -5120,11 +5115,6 @@ abstract class InstanceElementImpl extends _ExistingElementImpl
51205115

51215116
@override
51225117
List<FieldElementImpl> get fields {
5123-
if (!identical(_fields, _Sentinel.fieldElement)) {
5124-
return _fields;
5125-
}
5126-
5127-
linkedData?.readMembers(this);
51285118
return _fields;
51295119
}
51305120

@@ -5153,11 +5143,6 @@ abstract class InstanceElementImpl extends _ExistingElementImpl
51535143

51545144
@override
51555145
List<MethodElementImpl> get methods {
5156-
if (!identical(_methods, _Sentinel.methodElement)) {
5157-
return _methods;
5158-
}
5159-
5160-
linkedData?.readMembers(this);
51615146
return _methods;
51625147
}
51635148

@@ -5258,7 +5243,6 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
52585243
}
52595244

52605245
_buildMixinAppConstructors();
5261-
linkedData?.readMembers(this);
52625246
return _constructors;
52635247
}
52645248

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

Lines changed: 10 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ class BundleReader {
7474
return _LibraryHeader(
7575
uri: uriCache.parse(_reader.readStringReference()),
7676
offset: _reader.readUInt30(),
77-
classMembersLengths: _reader.readUInt30List(),
7877
macroGeneratedCode: _reader.readOptionalObject((reader) {
7978
return _reader.readStringUtf8();
8079
}),
@@ -93,7 +92,6 @@ class BundleReader {
9392
referenceReader: referenceReader,
9493
reference: reference,
9594
offset: libraryHeader.offset,
96-
classMembersLengths: libraryHeader.classMembersLengths,
9795
infoDeclarationStore: _infoDeclarationStore,
9896
macroGeneratedCode: libraryHeader.macroGeneratedCode,
9997
);
@@ -103,8 +101,6 @@ class BundleReader {
103101

104102
class ClassElementLinkedData extends ElementLinkedData<ClassElementImpl> {
105103
ApplyConstantOffsets? applyConstantOffsets;
106-
void Function()? _readMembers;
107-
void Function()? applyInformativeDataToMembers;
108104

109105
ClassElementLinkedData({
110106
required Reference reference,
@@ -125,12 +121,6 @@ class ClassElementLinkedData extends ElementLinkedData<ClassElementImpl> {
125121

126122
if (element.isMixinApplication) {
127123
element.constructors;
128-
} else {
129-
_readMembers?.call();
130-
_readMembers = null;
131-
132-
applyInformativeDataToMembers?.call();
133-
applyInformativeDataToMembers = null;
134124
}
135125
}
136126

@@ -655,9 +645,6 @@ class LibraryReader {
655645
final InfoDeclarationStore _deserializedDataStore;
656646
final String? macroGeneratedCode;
657647

658-
final Uint32List _classMembersLengths;
659-
int _classMembersLengthsIndex = 0;
660-
661648
LibraryReader._({
662649
required LinkedElementFactory elementFactory,
663650
required SummaryDataReader reader,
@@ -667,7 +654,6 @@ class LibraryReader {
667654
required _ReferenceReader referenceReader,
668655
required Reference reference,
669656
required int offset,
670-
required Uint32List classMembersLengths,
671657
required InfoDeclarationStore infoDeclarationStore,
672658
required this.macroGeneratedCode,
673659
}) : _elementFactory = elementFactory,
@@ -677,7 +663,6 @@ class LibraryReader {
677663
_referenceReader = referenceReader,
678664
_reference = reference,
679665
_offset = offset,
680-
_classMembersLengths = classMembersLengths,
681666
_deserializedDataStore = infoDeclarationStore;
682667

683668
LibraryElementImpl readElement({required Source librarySource}) {
@@ -686,11 +671,6 @@ class LibraryReader {
686671

687672
_reader.offset = _offset;
688673

689-
// TODO(scheglov): https://github.com/dart-lang/sdk/issues/51855
690-
// This should not be needed.
691-
// But I have a suspicion that we attempt to read the library twice.
692-
_classMembersLengthsIndex = 0;
693-
694674
// Read enough data to create the library.
695675
var name = _reader.readStringReference();
696676
var featureSet = _readFeatureSet();
@@ -786,43 +766,21 @@ class LibraryReader {
786766
element.typeParameters = _readTypeParameters();
787767

788768
if (!element.isMixinApplication) {
789-
var membersOffset = _reader.offset;
790-
linkedData._readMembers = () {
791-
_reader.offset = membersOffset;
792-
_readClassElementMembers(unitElement, element, reference);
793-
};
794-
if (_classMembersLengthsIndex >= _classMembersLengths.length) {
795-
// TODO(scheglov): https://github.com/dart-lang/sdk/issues/51855
796-
throw StateError(
797-
'[libraryReference: $_reference]'
798-
'[classReference: $reference]'
799-
'[_classMembersLengthsIndex: $_classMembersLengthsIndex]'
800-
'[_classMembersLengths: $_classMembersLengths]',
801-
);
802-
}
803-
_reader.offset += _classMembersLengths[_classMembersLengthsIndex++];
769+
var accessors = <PropertyAccessorElementImpl>[];
770+
var fields = <FieldElementImpl>[];
771+
_readFields(unitElement, element, reference, accessors, fields);
772+
_readPropertyAccessors(
773+
unitElement, element, reference, accessors, fields, '@field');
774+
element.fields = fields.toFixedList();
775+
element.accessors = accessors.toFixedList();
776+
777+
element.constructors = _readConstructors(unitElement, element, reference);
778+
element.methods = _readMethods(unitElement, element, reference);
804779
}
805780

806781
return element;
807782
}
808783

809-
void _readClassElementMembers(
810-
CompilationUnitElementImpl unitElement,
811-
ClassElementImpl element,
812-
Reference reference,
813-
) {
814-
var accessors = <PropertyAccessorElementImpl>[];
815-
var fields = <FieldElementImpl>[];
816-
_readFields(unitElement, element, reference, accessors, fields);
817-
_readPropertyAccessors(
818-
unitElement, element, reference, accessors, fields, '@field');
819-
element.fields = fields.toFixedList();
820-
element.accessors = accessors.toFixedList();
821-
822-
element.constructors = _readConstructors(unitElement, element, reference);
823-
element.methods = _readMethods(unitElement, element, reference);
824-
}
825-
826784
void _readClasses(
827785
CompilationUnitElementImpl unitElement,
828786
Reference unitReference,
@@ -2721,18 +2679,12 @@ class _LibraryHeader {
27212679
final Uri uri;
27222680
final int offset;
27232681

2724-
/// We don't read class members when reading libraries, by performance
2725-
/// reasons - in many cases only some classes of a library are used. But
2726-
/// we need to know how much data to skip for each class.
2727-
final Uint32List classMembersLengths;
2728-
27292682
/// The only (if any) macro generated augmentation code.
27302683
final String? macroGeneratedCode;
27312684

27322685
_LibraryHeader({
27332686
required this.uri,
27342687
required this.offset,
2735-
required this.classMembersLengths,
27362688
required this.macroGeneratedCode,
27372689
});
27382690
}

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,6 @@ class BundleWriter {
5454
references: _references,
5555
);
5656

57-
/// [_writeClassElement] remembers the length of data written into [_sink]
58-
/// while writing members. So, when we read, we can skip members initially,
59-
/// and read them later on demand.
60-
List<int> _classMembersLengths = [];
61-
6257
/// [_writePropertyAccessorElement] adds augmentations here, so that after
6358
/// reading the library we can read them, and while doing this, update
6459
/// `getter` and `setter` of augmented variables.
@@ -86,7 +81,6 @@ class BundleWriter {
8681
_sink.writeList<_Library>(_libraries, (library) {
8782
_sink._writeStringReference(library.uriStr);
8883
_sink.writeUInt30(library.offset);
89-
_sink.writeUint30List(library.classMembersOffsets);
9084
_sink.writeOptionalObject(library.macroGenerated, (it) {
9185
_sink.writeStringUtf8(it.code);
9286
});
@@ -113,7 +107,6 @@ class BundleWriter {
113107

114108
void writeLibraryElement(LibraryElementImpl libraryElement) {
115109
var libraryOffset = _sink.offset;
116-
_classMembersLengths = [];
117110
_accessorAugmentations = [];
118111
_propertyAugmentations = [];
119112

@@ -146,7 +139,6 @@ class BundleWriter {
146139
_Library(
147140
uriStr: '${libraryElement.source.uri}',
148141
offset: libraryOffset,
149-
classMembersOffsets: _classMembersLengths,
150142
macroGenerated: macroGenerated,
151143
),
152144
);
@@ -185,7 +177,6 @@ class BundleWriter {
185177
}
186178

187179
if (!element.isMixinApplication) {
188-
var membersOffset = _sink.offset;
189180
_writeList(
190181
element.fields.where((e) => !e.isSynthetic).toList(),
191182
_writeFieldElement,
@@ -196,7 +187,6 @@ class BundleWriter {
196187
);
197188
_writeList(element.constructors, _writeConstructorElement);
198189
_writeList(element.methods, _writeMethodElement);
199-
_classMembersLengths.add(_sink.offset - membersOffset);
200190
}
201191
});
202192
}
@@ -1338,15 +1328,13 @@ class _BundleWriterReferences {
13381328
class _Library {
13391329
final String uriStr;
13401330
final int offset;
1341-
final List<int> classMembersOffsets;
13421331

13431332
/// The only (if any) macro generated fragment.
13441333
final MacroGeneratedLibraryFragment? macroGenerated;
13451334

13461335
_Library({
13471336
required this.uriStr,
13481337
required this.offset,
1349-
required this.classMembersOffsets,
13501338
required this.macroGenerated,
13511339
});
13521340
}

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

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,10 @@ class InformativeDataApplier {
225225
element.typeParameters_unresolved,
226226
info.typeParameters,
227227
);
228+
_applyToConstructors(element.constructors, info.constructors);
229+
_applyToFields(element.fields, info.fields);
230+
_applyToAccessors(element.accessors, info.accessors);
231+
_applyToMethods(element.methods, info.methods);
228232

229233
var applyOffsets = ApplyConstantOffsets(
230234
info.constantOffsets,
@@ -234,20 +238,11 @@ class InformativeDataApplier {
234238
},
235239
);
236240

237-
void applyToMembers() {
238-
_applyToConstructors(element.constructors, info.constructors);
239-
_applyToFields(element.fields, info.fields);
240-
_applyToAccessors(element.accessors, info.accessors);
241-
_applyToMethods(element.methods, info.methods);
242-
}
243-
244241
var linkedData = element.linkedData;
245242
if (linkedData is ClassElementLinkedData) {
246243
linkedData.applyConstantOffsets = applyOffsets;
247-
linkedData.applyInformativeDataToMembers = applyToMembers;
248244
} else {
249245
applyOffsets.perform();
250-
applyToMembers();
251246
}
252247
}
253248

0 commit comments

Comments
 (0)