Elements. Migrate InvocationInferrer.
Change-Id: I55fc394c06669e7d8c0d1ffb1449dd73aa6b4bf2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/411363
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 5f8574a..08836e1 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -332,6 +332,10 @@
return element?.asElement2;
}
+ set element2(Element2? value) {
+ element = value?.asElement;
+ }
+
@override
Token get endToken {
if (arguments case var arguments?) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
index fe2ec1d..06f1883 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
@@ -2,14 +2,11 @@
// 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:_fe_analyzer_shared/src/base/errors.dart';
import 'package:_fe_analyzer_shared/src/deferred_function_literal_heuristic.dart';
import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart';
import 'package:_fe_analyzer_shared/src/types/shared_type.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
-import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
@@ -24,7 +21,6 @@
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/inference_log.dart';
import 'package:analyzer/src/generated/resolver.dart';
-import 'package:analyzer/src/utilities/extensions/element.dart';
Set<Object> _computeExplicitlyTypedParameterSet(
FunctionExpression functionExpression) {
@@ -46,15 +42,12 @@
/// Given an iterable of parameters, computes a map whose keys are either the
/// parameter name (for named parameters) or the zero-based integer index (for
/// unnamed parameters), and whose values are the parameters themselves.
-Map<Object, ParameterElementMixin> _computeParameterMap(
- Iterable<ParameterElement> parameters) {
+Map<Object, FormalParameterElementMixin> _computeParameterMap(
+ Iterable<FormalParameterElementMixin> parameters) {
int unnamedParameterIndex = 0;
return {
for (var parameter in parameters)
- parameter.isNamed ? parameter.name : unnamedParameterIndex++:
- // TODO(paulberry): eliminate this cast by changing the type of
- // `FunctionTypeImpl.parameters` to `List<ParameterElementMixin>`.
- parameter as ParameterElementMixin
+ parameter.isNamed ? parameter.name3! : unnamedParameterIndex++: parameter
};
}
@@ -94,16 +87,16 @@
CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS;
@override
- List<ParameterElement>? _storeResult(
+ List<FormalParameterElement>? _storeResult(
List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
if (invokeType != null) {
- var constructorElement = ConstructorMember.from(
- node.element as ConstructorElement,
+ var constructorElement = ConstructorMember.from2(
+ node.element2 as ConstructorElement2,
invokeType.returnType as InterfaceType,
);
- constructorName?.staticElement = constructorElement;
- node.element = constructorElement;
- return constructorElement.parameters;
+ constructorName?.element = constructorElement;
+ node.element2 = constructorElement;
+ return constructorElement.formalParameters;
}
return null;
}
@@ -183,7 +176,7 @@
} else if (typeArgumentList != null) {
if (rawType != null &&
typeArgumentList.arguments.length != rawType.typeFormals.length) {
- var typeParameters = rawType.typeFormals;
+ var typeParameters = rawType.typeParameters;
_reportWrongNumberOfTypeArguments(
typeArgumentList, rawType, typeParameters);
typeArgumentTypes = List.filled(
@@ -253,7 +246,8 @@
List<_IdenticalArgumentInfo?>? identicalArgumentInfo =
_isIdentical ? [] : null;
- var parameterMap = _computeParameterMap(rawType?.parameters ?? const []);
+ var parameterMap =
+ _computeParameterMap(rawType?.formalParameters ?? const []);
var deferredFunctionLiterals = _visitArguments(
parameterMap: parameterMap,
identicalArgumentInfo: identicalArgumentInfo,
@@ -264,7 +258,7 @@
for (var stage in _FunctionLiteralDependencies(
resolver.typeSystem,
deferredFunctionLiterals,
- rawType?.typeFormals.toSet() ?? const {},
+ rawType?.typeParameters.toSet() ?? const {},
_computeUndeferredParamInfo(
rawType, parameterMap, deferredFunctionLiterals))
.planReconciliationStages()) {
@@ -293,7 +287,7 @@
argumentList.correspondingStaticParameters =
ResolverVisitor.resolveArgumentsToParameters(
argumentList: argumentList,
- formalParameters: parameters.map((e) => e.asElement2).toList(),
+ formalParameters: parameters,
errorReporter: resolver.errorReporter,
);
}
@@ -307,7 +301,7 @@
/// parameters that were *not* deferred.
List<_ParamInfo> _computeUndeferredParamInfo(
FunctionType? rawType,
- Map<Object, ParameterElementMixin> parameterMap,
+ Map<Object, FormalParameterElementMixin> parameterMap,
List<_DeferredParamInfo> deferredFunctionLiterals) {
if (rawType == null) return const [];
var parameterKeysAlreadyCovered = {
@@ -324,7 +318,7 @@
DartType _refineReturnType(DartType returnType) => returnType;
void _reportWrongNumberOfTypeArguments(TypeArgumentList typeArgumentList,
- FunctionType rawType, List<TypeParameterElement> typeParameters) {
+ FunctionType rawType, List<TypeParameterElement2> typeParameters) {
resolver.errorReporter.atNode(
typeArgumentList,
_wrongNumberOfTypeArgumentsErrorCode,
@@ -336,9 +330,9 @@
);
}
- List<ParameterElement>? _storeResult(
+ List<FormalParameterElement>? _storeResult(
List<DartType>? typeArgumentTypes, FunctionTypeImpl? invokeType) {
- return invokeType?.parameters;
+ return invokeType?.formalParameters;
}
}
@@ -388,22 +382,22 @@
@override
void _reportWrongNumberOfTypeArguments(TypeArgumentList typeArgumentList,
- FunctionType rawType, List<TypeParameterElement> typeParameters) {
+ FunctionType rawType, List<TypeParameterElement2> typeParameters) {
// Error reporting for instance creations is done elsewhere.
}
@override
- List<ParameterElement>? _storeResult(
+ List<FormalParameterElement>? _storeResult(
List<DartType>? typeArgumentTypes, FunctionTypeImpl? invokeType) {
if (invokeType != null) {
var constructedType = invokeType.returnType;
node.constructorName.type.type = constructedType;
- var constructorElement = ConstructorMember.from(
- node.constructorName.staticElement!,
+ var constructorElement = ConstructorMember.from2(
+ node.constructorName.element!,
constructedType as InterfaceType,
);
- node.constructorName.staticElement = constructorElement;
- return constructorElement.parameters;
+ node.constructorName.element = constructorElement;
+ return constructorElement.formalParameters;
}
return null;
}
@@ -429,7 +423,7 @@
TypeArgumentListImpl? get _typeArguments => node.typeArguments;
@override
- List<ParameterElement>? _storeResult(
+ List<FormalParameterElement>? _storeResult(
List<DartType>? typeArgumentTypes, FunctionTypeImpl? invokeType) {
node.typeArgumentTypes = typeArgumentTypes;
node.staticInvokeType = invokeType ?? DynamicTypeImpl.instance;
@@ -467,7 +461,8 @@
/// arguments not applied yet).
void resolveInvocation({required FunctionTypeImpl? rawType}) {
var deferredFunctionLiterals = _visitArguments(
- parameterMap: _computeParameterMap(rawType?.parameters ?? const []));
+ parameterMap:
+ _computeParameterMap(rawType?.formalParameters ?? const []));
if (deferredFunctionLiterals != null) {
_resolveDeferredFunctionLiterals(
deferredFunctionLiterals: deferredFunctionLiterals);
@@ -528,7 +523,7 @@
}
if (parameter != null) {
inferrer?.constrainArgument(
- argument.typeOrThrow, parameter.type, parameter.name,
+ argument.typeOrThrow, parameter.type, parameter.name3!,
nodeForTesting: node);
}
}
@@ -538,7 +533,7 @@
/// be deferred due to the `inference-update-1` feature, a list of them is
/// returned.
List<_DeferredParamInfo>? _visitArguments(
- {required Map<Object, ParameterElementMixin> parameterMap,
+ {required Map<Object, FormalParameterElementMixin> parameterMap,
List<_IdenticalArgumentInfo?>? identicalArgumentInfo,
Substitution? substitution,
GenericInferrer? inferrer}) {
@@ -551,7 +546,7 @@
for (int i = 0; i < arguments.length; i++) {
var argument = arguments[i];
Expression value;
- ParameterElementMixin? parameter;
+ FormalParameterElementMixin? parameter;
Object parameterKey;
if (argument is NamedExpressionImpl) {
value = argument.expression;
@@ -593,7 +588,7 @@
}
if (parameter != null) {
inferrer?.constrainArgument(
- argument.typeOrThrow, parameter.type, parameter.name,
+ argument.typeOrThrow, parameter.type, parameter.name3!,
nodeForTesting: node);
}
}
@@ -626,8 +621,8 @@
@override
bool get _isIdentical {
- var invokedMethod = node.methodName.staticElement;
- return invokedMethod is FunctionElement &&
+ var invokedMethod = node.methodName.element;
+ return invokedMethod is TopLevelFunctionElement &&
invokedMethod.isDartCoreIdentical &&
node.argumentList.arguments.length == 2;
}
@@ -677,10 +672,10 @@
}
class _FunctionLiteralDependencies extends FunctionLiteralDependencies<
- TypeParameterElement, _ParamInfo, _DeferredParamInfo> {
+ TypeParameterElement2, _ParamInfo, _DeferredParamInfo> {
final TypeSystemImpl _typeSystem;
- final Set<TypeParameterElement> _typeVariables;
+ final Set<TypeParameterElement2> _typeVariables;
_FunctionLiteralDependencies(
this._typeSystem,
@@ -689,26 +684,19 @@
List<_ParamInfo> undeferredParamInfo)
: super(deferredParamInfo, _typeVariables, undeferredParamInfo);
- Set<TypeParameterElement2> get _typeVariables2 {
- return _typeVariables.map((e) => e.asElement2).toSet();
- }
-
@override
- Iterable<TypeParameterElement> typeVarsFreeInParamParams(
+ Iterable<TypeParameterElement2> typeVarsFreeInParamParams(
_DeferredParamInfo paramInfo) {
var type = paramInfo.parameter?.type;
if (type is FunctionTypeImpl) {
- var parameterMap = _computeParameterMap(type.parameters);
+ var parameterMap = _computeParameterMap(type.formalParameters);
var explicitlyTypedParameters =
_computeExplicitlyTypedParameterSet(paramInfo.value);
- Set<TypeParameterElement> result = {};
+ Set<TypeParameterElement2> result = {};
for (var entry in parameterMap.entries) {
if (explicitlyTypedParameters.contains(entry.key)) continue;
- result.addAll(_typeSystem
- .getFreeParameters2(entry.value.type,
- candidates: _typeVariables2)
- ?.map((e) => e.asElement)
- .toList() ??
+ result.addAll(_typeSystem.getFreeParameters2(entry.value.type,
+ candidates: _typeVariables) ??
const []);
}
return result;
@@ -718,20 +706,15 @@
}
@override
- Iterable<TypeParameterElement> typeVarsFreeInParamReturns(
+ Iterable<TypeParameterElement2> typeVarsFreeInParamReturns(
_ParamInfo paramInfo) {
var type = paramInfo.parameter?.type;
if (type is FunctionTypeImpl) {
- return _typeSystem
- .getFreeParameters2(type.returnType, candidates: _typeVariables2)
- ?.map((e) => e.asElement)
- .toList() ??
+ return _typeSystem.getFreeParameters2(type.returnType,
+ candidates: _typeVariables) ??
const [];
} else if (type != null) {
- return _typeSystem
- .getFreeParameters2(type, candidates: _typeVariables2)
- ?.map((e) => e.asElement)
- .toList() ??
+ return _typeSystem.getFreeParameters2(type, candidates: _typeVariables) ??
const [];
} else {
return const [];
@@ -759,7 +742,7 @@
class _ParamInfo {
/// The function parameter corresponding to the argument, or `null` if we are
/// resolving a dynamic invocation.
- final ParameterElementMixin? parameter;
+ final FormalParameterElementMixin? parameter;
_ParamInfo(this.parameter);
}