Skip to content

Commit 186b397

Browse files
scheglovCommit Queue
authored andcommitted
DeCo. Simplify enclosing type-parameter reference flag computation.
Mostly to ensure that we process synthetic fields created for declaring formal parameters. Change-Id: I3b74aac4ca8e9dc626fd52b2f9a42e3818855286 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/459040 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
1 parent b1c2b78 commit 186b397

File tree

1 file changed

+19
-39
lines changed

1 file changed

+19
-39
lines changed

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

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -17,58 +17,38 @@ class EnclosingTypeParameterReferenceFlag {
1717
var library = builder.element;
1818
for (var topElement in library.children) {
1919
switch (topElement) {
20-
case InstanceElementImpl():
21-
for (var field in topElement.fields) {
22-
if (!field.isSynthetic || field.isEnumValues) {
23-
var result = _hasTypeParameterReference(topElement, field.type);
24-
field.hasEnclosingTypeParameterReference = result;
25-
field.getter?.hasEnclosingTypeParameterReference = result;
26-
field.setter?.hasEnclosingTypeParameterReference = result;
27-
}
20+
case InstanceElementImpl instanceElement:
21+
bool hasTypeParameterReference(DartType type) {
22+
var visitor = _ReferencesTypeParameterVisitor(instanceElement);
23+
type.accept(visitor);
24+
return visitor.result;
2825
}
2926

30-
var accessors = [...topElement.getters, ...topElement.setters];
31-
for (var propertyAccessor in accessors) {
32-
if (!propertyAccessor.isSynthetic) {
33-
var result = _hasTypeParameterReference(
34-
topElement,
35-
propertyAccessor.type,
36-
);
37-
propertyAccessor.hasEnclosingTypeParameterReference = result;
38-
if (propertyAccessor.variable case FieldElementImpl field) {
39-
field.hasEnclosingTypeParameterReference = result;
40-
}
41-
}
27+
for (var field in instanceElement.fields) {
28+
var result = hasTypeParameterReference(field.type);
29+
field.hasEnclosingTypeParameterReference = result;
4230
}
4331

44-
for (var method in topElement.methods) {
45-
method.hasEnclosingTypeParameterReference =
46-
_hasTypeParameterReference(topElement, method.type);
32+
var executables = [
33+
...instanceElement.getters,
34+
...instanceElement.setters,
35+
...instanceElement.methods,
36+
];
37+
for (var executable in executables) {
38+
var result = hasTypeParameterReference(executable.type);
39+
executable.hasEnclosingTypeParameterReference = result;
4740
}
4841
case PropertyAccessorElementImpl():
4942
// Top-level accessors don't have type parameters.
50-
if (!topElement.isSynthetic) {
51-
topElement.hasEnclosingTypeParameterReference = false;
52-
}
43+
topElement.hasEnclosingTypeParameterReference = false;
5344
case TopLevelVariableElementImpl():
5445
// Top-level variables dont have type parameters.
55-
if (!topElement.isSynthetic) {
56-
topElement.getter?.hasEnclosingTypeParameterReference = false;
57-
topElement.setter?.hasEnclosingTypeParameterReference = false;
58-
}
46+
topElement.getter?.hasEnclosingTypeParameterReference = false;
47+
topElement.setter?.hasEnclosingTypeParameterReference = false;
5948
}
6049
}
6150
}
6251
}
63-
64-
static bool _hasTypeParameterReference(
65-
InstanceElementImpl instanceElement,
66-
DartType type,
67-
) {
68-
var visitor = _ReferencesTypeParameterVisitor(instanceElement);
69-
type.accept(visitor);
70-
return visitor.result;
71-
}
7252
}
7353

7454
class _ReferencesTypeParameterVisitor extends RecursiveTypeVisitor {

0 commit comments

Comments
 (0)