Skip to content

Commit 4855d84

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Put declared fields into manifest.
Because there is separate getField(name). And we remove the constant initializer from the getter ID, so if the code uses only the type of a constant, probably quite often for the analyzer, we don't re-analyze when the initializer changes, because we depend only on the getter (type). Change-Id: I585d45d4b392772842723e20e35e87ba2a88ee47 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/427600 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent c2985d6 commit 4855d84

File tree

6 files changed

+4128
-2517
lines changed

6 files changed

+4128
-2517
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2913,7 +2913,7 @@ class FieldElementImpl2 extends PropertyInducingElementImpl2
29132913
FragmentedAnnotatableElementMixin<FieldFragmentImpl>,
29142914
FragmentedElementMixin<FieldFragmentImpl>,
29152915
_HasSinceSdkVersionMixin
2916-
implements FieldElement2OrMember {
2916+
implements FieldElement2OrMember, AnnotatableElementImpl {
29172917
@override
29182918
final FieldFragmentImpl firstFragment;
29192919

pkg/analyzer/lib/src/fine/library_manifest.dart

Lines changed: 88 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ class LibraryManifestBuilder {
137137
typeParameters,
138138
) {
139139
classItem.declaredMembers.clear();
140-
_addInterfaceElementExecutables(
140+
_addInterfaceElementMembers(
141141
encodingContext: encodingContext,
142142
instanceElement: element,
143143
interfaceItem: classItem,
@@ -205,34 +205,25 @@ class LibraryManifestBuilder {
205205
}
206206
}
207207

208-
void _addInstanceElementExecutables({
208+
void _addInstanceElementField({
209209
required EncodeContext encodingContext,
210-
required InstanceElementImpl2 instanceElement,
211210
required InstanceItem instanceItem,
211+
required FieldElementImpl2 element,
212212
}) {
213-
for (var method in instanceElement.methods2) {
214-
_addInstanceElementMethod(
215-
encodingContext: encodingContext,
216-
instanceItem: instanceItem,
217-
element: method,
218-
);
213+
var lookupName = element.lookupName?.asLookupName;
214+
if (lookupName == null) {
215+
return;
219216
}
220217

221-
for (var getter in instanceElement.getters2) {
222-
_addInstanceElementGetter(
223-
encodingContext: encodingContext,
224-
instanceItem: instanceItem,
225-
element: getter,
218+
var item = _getOrBuildElementItem(element, () {
219+
return InstanceItemFieldItem.fromElement(
220+
id: ManifestItemId.generate(),
221+
context: encodingContext,
222+
element: element,
226223
);
227-
}
224+
});
228225

229-
for (var setter in instanceElement.setters2) {
230-
_addInstanceElementSetter(
231-
encodingContext: encodingContext,
232-
instanceItem: instanceItem,
233-
element: setter,
234-
);
235-
}
226+
instanceItem.declaredFields[lookupName] = item;
236227
}
237228

238229
void _addInstanceElementGetter({
@@ -257,6 +248,44 @@ class LibraryManifestBuilder {
257248
instanceItem.declaredMembers.addDeclaredGetter(baseName, item);
258249
}
259250

251+
void _addInstanceElementMembers({
252+
required EncodeContext encodingContext,
253+
required InstanceElementImpl2 instanceElement,
254+
required InstanceItem instanceItem,
255+
}) {
256+
for (var field in instanceElement.fields2) {
257+
_addInstanceElementField(
258+
encodingContext: encodingContext,
259+
instanceItem: instanceItem,
260+
element: field,
261+
);
262+
}
263+
264+
for (var method in instanceElement.methods2) {
265+
_addInstanceElementMethod(
266+
encodingContext: encodingContext,
267+
instanceItem: instanceItem,
268+
element: method,
269+
);
270+
}
271+
272+
for (var getter in instanceElement.getters2) {
273+
_addInstanceElementGetter(
274+
encodingContext: encodingContext,
275+
instanceItem: instanceItem,
276+
element: getter,
277+
);
278+
}
279+
280+
for (var setter in instanceElement.setters2) {
281+
_addInstanceElementSetter(
282+
encodingContext: encodingContext,
283+
instanceItem: instanceItem,
284+
element: setter,
285+
);
286+
}
287+
}
288+
260289
void _addInstanceElementMethod({
261290
required EncodeContext encodingContext,
262291
required InstanceItem instanceItem,
@@ -327,7 +356,7 @@ class LibraryManifestBuilder {
327356
interfaceItem.declaredMembers.addDeclaredConstructor(baseName, item);
328357
}
329358

330-
void _addInterfaceElementExecutables({
359+
void _addInterfaceElementMembers({
331360
required EncodeContext encodingContext,
332361
required InterfaceElementImpl2 instanceElement,
333362
required InterfaceItem interfaceItem,
@@ -347,7 +376,7 @@ class LibraryManifestBuilder {
347376
);
348377
}
349378

350-
_addInstanceElementExecutables(
379+
_addInstanceElementMembers(
351380
encodingContext: encodingContext,
352381
instanceElement: instanceElement,
353382
instanceItem: interfaceItem,
@@ -373,7 +402,7 @@ class LibraryManifestBuilder {
373402
typeParameters,
374403
) {
375404
mixinItem.declaredMembers.clear();
376-
_addInterfaceElementExecutables(
405+
_addInterfaceElementMembers(
377406
encodingContext: encodingContext,
378407
instanceElement: element,
379408
interfaceItem: mixinItem,
@@ -907,11 +936,45 @@ class _LibraryMatch {
907936
}
908937
}
909938

939+
bool _matchInstanceElementField({
940+
required InstanceItem instanceItem,
941+
required MatchContext instanceMatchContext,
942+
required FieldElementImpl2 field,
943+
}) {
944+
var lookupName = field.lookupName?.asLookupName;
945+
if (lookupName == null) {
946+
return true;
947+
}
948+
949+
var item = instanceItem.declaredFields[lookupName];
950+
if (item == null) {
951+
return false;
952+
}
953+
954+
var matchContext = MatchContext(parent: instanceMatchContext);
955+
if (!item.match(matchContext, field)) {
956+
return false;
957+
}
958+
959+
_addMatchingElementItem(field, item, matchContext);
960+
return true;
961+
}
962+
910963
void _matchInstanceElementStaticExecutables({
911964
required MatchContext matchContext,
912965
required InstanceElementImpl2 element,
913966
required InstanceItem item,
914967
}) {
968+
for (var field in element.fields2) {
969+
if (!_matchInstanceElementField(
970+
instanceItem: item,
971+
instanceMatchContext: matchContext,
972+
field: field,
973+
)) {
974+
structureMismatched.add(field);
975+
}
976+
}
977+
915978
var executables = [
916979
...element.getters2,
917980
...element.methods2,

0 commit comments

Comments
 (0)