Skip to content

Commit 1b57d51

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Macro. Move updating types for GenericFunctionType and TypeParameter to declarations.
This saves us about 120 ms out of 2000. Change-Id: Ib352a78b39706b07fc2ee0d5b2c3e6e77d98119c Bug:#55784 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/373000 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 452de7b commit 1b57d51

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ class ReferenceResolver extends ThrowingAstVisitor<void> {
311311
var nullabilitySuffix = _getNullabilitySuffix(node.question != null);
312312
var builder = FunctionTypeBuilder.of(nodeImpl, nullabilitySuffix);
313313
nodeImpl.type = builder;
314+
nodesToBuildType.addDeclaration(node);
314315
nodesToBuildType.addTypeBuilder(builder);
315316

316317
scope = outerScope;
@@ -514,6 +515,7 @@ class ReferenceResolver extends ThrowingAstVisitor<void> {
514515
bound.accept(this);
515516
var element = node.declaredElement as TypeParameterElementImpl;
516517
element.bound = bound.type;
518+
nodesToBuildType.addDeclaration(node);
517519
}
518520
}
519521

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

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,6 @@ class TypesBuilder {
8787
builder.build();
8888
}
8989

90-
// TODO(scheglov): generalize
91-
_linker.elementNodes.forEach((element, node) {
92-
if (element is GenericFunctionTypeElementImpl &&
93-
node is GenericFunctionType) {
94-
element.returnType = node.returnType?.type ?? _dynamicType;
95-
}
96-
if (element is TypeParameterElementImpl && node is TypeParameter) {
97-
element.bound = node.bound?.type;
98-
}
99-
});
100-
10190
for (var declaration in nodes.declarations) {
10291
_declaration(declaration);
10392
}
@@ -191,6 +180,8 @@ class TypesBuilder {
191180
_functionTypeAlias(node);
192181
} else if (node is FunctionTypedFormalParameter) {
193182
_functionTypedFormalParameter(node);
183+
} else if (node is GenericFunctionTypeImpl) {
184+
_genericFunctionType(node);
194185
} else if (node is GenericTypeAlias) {
195186
_genericTypeAlias(node);
196187
} else if (node is MethodDeclaration) {
@@ -213,6 +204,8 @@ class TypesBuilder {
213204
element.type = node.type?.type ?? _dynamicType;
214205
} else if (node is SuperFormalParameter) {
215206
_superFormalParameter(node);
207+
} else if (node is TypeParameterImpl) {
208+
_typeParameter(node);
216209
} else if (node is VariableDeclarationList) {
217210
var type = node.type?.type;
218211
if (type != null) {
@@ -289,6 +282,11 @@ class TypesBuilder {
289282
element.type = type;
290283
}
291284

285+
void _genericFunctionType(GenericFunctionTypeImpl node) {
286+
var element = node.declaredElement!;
287+
element.returnType = node.returnType?.type ?? _dynamicType;
288+
}
289+
292290
void _genericTypeAlias(GenericTypeAlias node) {
293291
var element = node.declaredElement as TypeAliasElementImpl;
294292
var featureSet = element.library.featureSet;
@@ -342,6 +340,11 @@ class TypesBuilder {
342340
}
343341
}
344342

343+
void _typeParameter(TypeParameterImpl node) {
344+
var element = node.declaredElement!;
345+
element.bound = node.bound?.type;
346+
}
347+
345348
List<TypeParameterElement> _typeParameters(TypeParameterList? node) {
346349
if (node == null) {
347350
return const <TypeParameterElement>[];

0 commit comments

Comments
 (0)