Elements. Migrate FunctionTypeBuilder.
Change-Id: I9fc6acd85170a328c99b624da29d8e6fd7ffb769
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407162
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 93d71c5..044fcce 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -4654,6 +4654,10 @@
// TODO(augmentations): Implement the merge of formal parameters.
TypeImpl get type => wrappedElement.type;
+ set type(TypeImpl value) {
+ wrappedElement.type = value;
+ }
+
@override
// TODO(augmentations): Implement the merge of formal parameters.
List<TypeParameterElement2> get typeParameters2 => const [];
diff --git a/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart b/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
index 6a53a8d..8d7e789 100644
--- a/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
@@ -55,20 +55,20 @@
DartType? createFunctionTypeBuilder({
required FunctionTypeBuilder type,
- required List<TypeParameterElement2>? newTypeParameters,
- required List<FormalParameterElement>? newParameters,
+ required List<TypeParameterElementImpl2>? newTypeParameters,
+ required List<FormalParameterElementImpl>? newFormalParameters,
required TypeImpl? newReturnType,
required NullabilitySuffix? newNullability,
}) {
if (newNullability == null &&
newReturnType == null &&
- newParameters == null) {
+ newFormalParameters == null) {
return null;
}
return FunctionTypeBuilder.v2(
typeParameters: newTypeParameters ?? type.typeParameters,
- formalParameters: newParameters ?? type.formalParameters,
+ formalParameters: newFormalParameters ?? type.formalParameters,
returnType: newReturnType ?? type.returnType,
nullabilitySuffix: newNullability ?? type.nullabilitySuffix,
);
@@ -330,7 +330,7 @@
changeVariance();
- List<FormalParameterElement>? newParameters;
+ List<FormalParameterElementImpl>? newFormalParameters;
for (var i = 0; i < node.formalParameters.length; i++) {
var parameter = node.formalParameters[i];
@@ -341,8 +341,8 @@
var newKind = visitParameterKind(kind);
if (newType != null || newKind != null) {
- newParameters ??= node.formalParameters.toList(growable: false);
- newParameters[i] = parameter.copyWith(
+ newFormalParameters ??= node.formalParameters.toList(growable: false);
+ newFormalParameters[i] = parameter.copyWith(
type: newType,
kind: newKind,
);
@@ -354,7 +354,7 @@
return createFunctionTypeBuilder(
type: node,
newTypeParameters: newTypeParameters,
- newParameters: newParameters,
+ newFormalParameters: newFormalParameters,
newReturnType: newReturnType,
newNullability: newNullability,
);
diff --git a/pkg/analyzer/lib/src/dart/element/type_algebra.dart b/pkg/analyzer/lib/src/dart/element/type_algebra.dart
index 8a570df..63d631b 100644
--- a/pkg/analyzer/lib/src/dart/element/type_algebra.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_algebra.dart
@@ -544,18 +544,21 @@
int before = useCounter;
var inner = this;
- var typeFormals = type.typeFormals;
- if (typeFormals.isNotEmpty) {
+ var typeParameters = type.typeParameters;
+ if (typeParameters.isNotEmpty) {
inner = newInnerEnvironment();
- typeFormals = inner.freshTypeParameters(typeFormals);
+ typeParameters = inner
+ .freshTypeParameters(typeParameters.map((e) => e.asElement).toList())
+ .map((e) => e.asElement2 as TypeParameterElementImpl2)
+ .toList();
}
// Invert the variance when translating parameters.
inner.invertVariance();
- var parameters = type.parameters.map((parameter) {
- var type = parameter.type.accept(inner);
- return parameter.copyWith(type: type);
+ var formalParameters = type.formalParameters.map((formalParameter) {
+ var type = formalParameter.type.accept(inner);
+ return formalParameter.copyWith(type: type);
}).toList();
inner.invertVariance();
@@ -567,8 +570,8 @@
if (useCounter == before) return type;
return FunctionTypeBuilder(
- typeFormals,
- parameters,
+ typeParameters,
+ formalParameters,
returnType,
type.nullabilitySuffix,
);
diff --git a/pkg/analyzer/lib/src/summary2/function_type_builder.dart b/pkg/analyzer/lib/src/summary2/function_type_builder.dart
index 6022817..91197df 100644
--- a/pkg/analyzer/lib/src/summary2/function_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/function_type_builder.dart
@@ -2,10 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// ignore_for_file: analyzer_use_new_elements
-
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_visitor.dart';
@@ -17,14 +13,13 @@
import 'package:analyzer/src/dart/element/type_visitor.dart';
import 'package:analyzer/src/summary2/type_builder.dart';
import 'package:analyzer/src/utilities/extensions/collection.dart';
-import 'package:analyzer/src/utilities/extensions/element.dart';
/// The type builder for a [GenericFunctionType].
class FunctionTypeBuilder extends TypeBuilder {
static DynamicTypeImpl get _dynamicType => DynamicTypeImpl.instance;
- final List<TypeParameterElement> typeFormals;
- final List<ParameterElement> parameters;
+ final List<TypeParameterElementImpl2> typeParameters;
+ final List<FormalParameterElementImpl> formalParameters;
final TypeImpl returnType;
@override
@@ -42,8 +37,8 @@
FunctionTypeImpl? _type;
FunctionTypeBuilder(
- this.typeFormals,
- this.parameters,
+ this.typeParameters,
+ this.formalParameters,
this.returnType,
this.nullabilitySuffix, {
this.node,
@@ -63,29 +58,21 @@
}
factory FunctionTypeBuilder.v2({
- required List<TypeParameterElement2> typeParameters,
- required List<FormalParameterElement> formalParameters,
+ required List<TypeParameterElementImpl2> typeParameters,
+ required List<FormalParameterElementImpl> formalParameters,
required TypeImpl returnType,
required NullabilitySuffix nullabilitySuffix,
GenericFunctionTypeImpl? node,
}) {
return FunctionTypeBuilder(
- typeParameters.map((e) => e.asElement).toList(),
- formalParameters.map((e) => e.asElement).toList(),
+ typeParameters,
+ formalParameters,
returnType,
nullabilitySuffix,
node: node,
);
}
- List<FormalParameterElementMixin> get formalParameters {
- return parameters.map((p) => p.asElement2).toList(growable: false);
- }
-
- List<TypeParameterElementImpl2> get typeParameters => typeFormals
- .map((fragment) => fragment.asElement2 as TypeParameterElementImpl2)
- .toList();
-
@override
R accept<R>(TypeVisitor<R> visitor) {
if (visitor is LinkingTypeVisitor<R>) {
@@ -103,27 +90,26 @@
return type;
}
- for (var typeParameter in typeFormals) {
- var typeParameterImpl = typeParameter as TypeParameterElementImpl;
- var bound = typeParameterImpl.bound;
+ for (var typeParameter in typeParameters) {
+ var bound = typeParameter.bound;
if (bound != null) {
- typeParameterImpl.bound = _buildType(bound);
+ typeParameter.bound = _buildType(bound);
}
}
- for (var parameter in parameters) {
- (parameter as ParameterElementImpl).type = _buildType(parameter.type);
+ for (var formalParameter in formalParameters) {
+ formalParameter.type = _buildType(formalParameter.type);
}
var builtReturnType = _buildType(returnType);
- type = FunctionTypeImpl(
- typeFormals: typeFormals,
- parameters: parameters,
+ type = FunctionTypeImpl.v2(
+ typeParameters: typeParameters,
+ formalParameters: formalParameters,
returnType: builtReturnType,
nullabilitySuffix: nullabilitySuffix,
);
- var fresh = getFreshTypeParameters(typeFormals);
+ var fresh = getFreshTypeParameters2(typeParameters);
type = fresh.applyToFunctionType(type);
_type = type;
@@ -135,14 +121,14 @@
String toString() {
var buffer = StringBuffer();
- if (typeFormals.isNotEmpty) {
+ if (typeParameters.isNotEmpty) {
buffer.write('<');
- buffer.write(typeFormals.join(', '));
+ buffer.write(typeParameters.join(', '));
buffer.write('>');
}
buffer.write('(');
- buffer.write(parameters.join(', '));
+ buffer.write(formalParameters.join(', '));
buffer.write(')');
buffer.write(' → ');
@@ -158,19 +144,19 @@
}
return FunctionTypeBuilder(
- typeFormals,
- parameters,
+ typeParameters,
+ formalParameters,
returnType,
nullabilitySuffix,
node: node,
);
}
- static List<ParameterElementImpl> getParameters(
- FormalParameterList node,
+ static List<FormalParameterElementImpl> getParameters(
+ FormalParameterListImpl node,
) {
- return node.parameters.asImpl.map((parameter) {
- return ParameterElementImpl.synthetic(
+ return node.parameters.map((parameter) {
+ return FormalParameterElementImpl.synthetic(
parameter.name?.lexeme ?? '',
_getParameterType(parameter),
parameter.kind,
@@ -197,12 +183,12 @@
}
/// Return the type of the [node] as is, possibly a [TypeBuilder].
- static DartType _getParameterType(FormalParameter node) {
- if (node is DefaultFormalParameter) {
+ static DartType _getParameterType(FormalParameterImpl node) {
+ if (node is DefaultFormalParameterImpl) {
return _getParameterType(node.parameter);
- } else if (node is SimpleFormalParameter) {
+ } else if (node is SimpleFormalParameterImpl) {
return _getNodeType(node.type);
- } else if (node is FunctionTypedFormalParameter) {
+ } else if (node is FunctionTypedFormalParameterImpl) {
NullabilitySuffix nullabilitySuffix;
if (node.question != null) {
nullabilitySuffix = NullabilitySuffix.question;
@@ -221,10 +207,12 @@
}
}
- static List<TypeParameterElement> _getTypeParameters(
- TypeParameterList? node,
+ static List<TypeParameterElementImpl2> _getTypeParameters(
+ TypeParameterListImpl? node,
) {
if (node == null) return const [];
- return node.typeParameters.map((n) => n.declaredElement!).toFixedList();
+ return node.typeParameters.map((node) {
+ return node.declaredFragment!.element;
+ }).toFixedList();
}
}
diff --git a/pkg/analyzer/lib/src/summary2/variance_builder.dart b/pkg/analyzer/lib/src/summary2/variance_builder.dart
index 4ac7a70..454d666 100644
--- a/pkg/analyzer/lib/src/summary2/variance_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/variance_builder.dart
@@ -104,8 +104,8 @@
return _computeFunctionType(
variable,
returnType: type.returnType,
- typeFormals: type.typeFormals,
- parameters: type.parameters,
+ typeFormals: type.typeParameters.map((e) => e.asElement).toList(),
+ parameters: type.formalParameters.map((e) => e.asElement).toList(),
);
} else if (type is RecordTypeBuilder) {
var result = Variance.unrelated;
@@ -153,7 +153,7 @@
return result;
}
- void _functionTypeAlias(FunctionTypeAlias node) {
+ void _functionTypeAlias(FunctionTypeAliasImpl node) {
var parameterList = node.typeParameters;
if (parameterList == null) {
return;
@@ -179,7 +179,9 @@
parameter.declaredElement!,
returnType: node.returnType?.type,
typeFormals: null,
- parameters: FunctionTypeBuilder.getParameters(node.parameters),
+ parameters: FunctionTypeBuilder.getParameters(node.parameters)
+ .map((e) => e.asElement)
+ .toList(),
);
_setVariance(parameter, variance);
}
@@ -231,9 +233,9 @@
var node = _linker.getLinkingNode(element);
if (node == null) {
// Not linking.
- } else if (node is GenericTypeAlias) {
+ } else if (node is GenericTypeAliasImpl) {
_genericTypeAlias(node);
- } else if (node is FunctionTypeAlias) {
+ } else if (node is FunctionTypeAliasImpl) {
_functionTypeAlias(node);
} else {
throw UnimplementedError('(${node.runtimeType}) $node');