Skip to content

Commit 061b883

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Clean up deferred applying members offsets.
Change-Id: I4c73bc084dfa586e285471a73d3c1b1c2013cd42 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/441420 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent c0bcfc0 commit 061b883

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,12 @@ class ConstructorFragmentImpl extends ExecutableFragmentImpl
10871087
/// element is the simplest way to do this.
10881088
mixin DeferredMembersReadingMixin {
10891089
void Function()? _readMembersCallback;
1090+
void Function()? _applyMembersOffsets;
1091+
1092+
void deferApplyMembersOffsets(void Function() callback) {
1093+
assert(_applyMembersOffsets == null);
1094+
_applyMembersOffsets = callback;
1095+
}
10901096

10911097
void deferReadMembers(void Function()? callback) {
10921098
assert(_readMembersCallback == null);
@@ -1098,6 +1104,11 @@ mixin DeferredMembersReadingMixin {
10981104
_readMembersCallback = null;
10991105
callback();
11001106
}
1107+
1108+
if (_applyMembersOffsets case var callback?) {
1109+
_applyMembersOffsets = null;
1110+
callback();
1111+
}
11011112
}
11021113
}
11031114

@@ -4596,8 +4607,6 @@ abstract class InstanceFragmentImpl extends _ExistingFragmentImpl
45964607
DeferredResolutionReadingMixin,
45974608
TypeParameterizedFragmentMixin
45984609
implements InstanceFragment {
4599-
void Function()? applyMembersConstantOffsets;
4600-
46014610
@override
46024611
final String? name;
46034612

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -317,12 +317,6 @@ class LibraryReader {
317317
if (!fragment.isMixinApplication) {
318318
fragment.constructors = _readConstructorFragments();
319319
}
320-
321-
// TODO(scheglov): this is ugly
322-
if (fragment.applyMembersConstantOffsets case var callback?) {
323-
fragment.applyMembersConstantOffsets = null;
324-
callback();
325-
}
326320
});
327321
});
328322
});

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

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,12 @@ Uint8List writeUnitInformative(CompilationUnit unit) {
2626
}
2727

2828
class InformativeDataApplier {
29+
bool _shouldDeferApplyMembersOffsets = true;
30+
2931
void applyFromNode(LibraryFragmentImpl fragment, CompilationUnit node) {
32+
_shouldDeferApplyMembersOffsets = false;
3033
var unitInfo = _InfoBuilder().build(node);
3134
_applyFromInfo(fragment, unitInfo);
32-
33-
// TODO(scheglov): generalize
34-
for (var classFragment in fragment.classes) {
35-
classFragment.applyMembersConstantOffsets?.call();
36-
classFragment.applyMembersConstantOffsets = null;
37-
}
3835
}
3936

4037
void applyToLibrary(
@@ -200,15 +197,15 @@ class InformativeDataApplier {
200197
applier.applyToTypeParameters(element.typeParameters);
201198
});
202199

203-
element.applyMembersConstantOffsets = () {
200+
_scheduleApplyMembersOffsets(element, () {
204201
element.withoutLoadingResolution(() {
205202
_applyToConstructors(element.constructors, info.constructors);
206203
_applyToFields(element.fields, info.fields);
207204
_applyToAccessors(element.getters, info.getters);
208205
_applyToAccessors(element.setters, info.setters);
209206
_applyToMethods(element.methods, info.methods);
210207
});
211-
};
208+
});
212209
}
213210

214211
void _applyToClassTypeAlias(
@@ -612,6 +609,18 @@ class InformativeDataApplier {
612609
}
613610
}
614611

612+
/// Either defer, or eagerly invoke [callback].
613+
void _scheduleApplyMembersOffsets(
614+
InstanceFragmentImpl fragment,
615+
void Function() callback,
616+
) {
617+
if (_shouldDeferApplyMembersOffsets) {
618+
fragment.deferApplyMembersOffsets(callback);
619+
} else {
620+
callback();
621+
}
622+
}
623+
615624
void _setupApplyConstantOffsetsForTypeAlias(
616625
TypeAliasFragmentImpl element,
617626
Uint32List constantOffsets, {

0 commit comments

Comments
 (0)