Elements. Use FormalParameterElementMixin in impl elements, remove a few TypeImpl casts.
Change-Id: I4001175016b92b07a294e3e6f8461a3727b6d1d0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/412141
Reviewed-by: Paul Berry <paulberry@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 4e98569..0b62dc4 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1647,11 +1647,11 @@
class ConstructorElementImpl2 extends ExecutableElementImpl2
with
- FragmentedExecutableElementMixin<ConstructorFragment>,
- FragmentedFunctionTypedElementMixin<ConstructorFragment>,
- FragmentedTypeParameterizedElementMixin<ConstructorFragment>,
- FragmentedAnnotatableElementMixin<ConstructorFragment>,
- FragmentedElementMixin<ConstructorFragment>,
+ FragmentedExecutableElementMixin<ConstructorElementImpl>,
+ FragmentedFunctionTypedElementMixin<ConstructorElementImpl>,
+ FragmentedTypeParameterizedElementMixin<ConstructorElementImpl>,
+ FragmentedAnnotatableElementMixin<ConstructorElementImpl>,
+ FragmentedElementMixin<ConstructorElementImpl>,
ConstructorElementMixin2,
_HasSinceSdkVersionMixin
implements ConstructorElement2 {
@@ -3770,6 +3770,9 @@
/// `ExecutableElement2`.
abstract class ExecutableElement2OrMember implements ExecutableElement2 {
@override
+ List<FormalParameterElementMixin> get formalParameters;
+
+ @override
TypeImpl get returnType;
@override
@@ -5189,11 +5192,11 @@
}
}
-mixin FragmentedExecutableElementMixin<E extends ExecutableFragment>
+mixin FragmentedExecutableElementMixin<E extends ExecutableElementImpl>
implements FragmentedElementMixin<E> {
- List<FormalParameterElement> get formalParameters {
+ List<FormalParameterElementMixin> get formalParameters {
return firstFragment.formalParameters
- .map((fragment) => fragment.element)
+ .map((fragment) => fragment.asElement2)
.toList();
}
@@ -5235,15 +5238,13 @@
// TODO(augmentations): This might be wrong. The parameters need to be a
// merge of the parameters of all of the fragments, but this probably doesn't
// account for missing data (such as the parameter types).
- List<FormalParameterElement> get formalParameters {
+ List<FormalParameterElementMixin> get formalParameters {
var fragment = firstFragment;
return switch (fragment) {
- FunctionTypedElementImpl(:var parameters) => parameters
- .map((fragment) => (fragment as FormalParameterFragment).element)
- .toList(),
- ExecutableElementImpl(:var parameters) => parameters
- .map((fragment) => (fragment as FormalParameterFragment).element)
- .toList(),
+ FunctionTypedElementImpl(:var parameters) =>
+ parameters.map((fragment) => fragment.asElement2).toList(),
+ ExecutableElementImpl(:var parameters) =>
+ parameters.map((fragment) => fragment.asElement2).toList(),
_ => throw UnsupportedError(
'Cannot get formal parameters for ${fragment.runtimeType}'),
};
@@ -5451,8 +5452,7 @@
Fragment? get enclosingFragment => enclosingElement3 as Fragment;
@override
- List<FormalParameterFragment> get formalParameters =>
- parameters.cast<FormalParameterFragment>();
+ List<ParameterElementImpl> get formalParameters => parameters;
@override
String get identifier => '-';
@@ -5607,11 +5607,11 @@
class GetterElementImpl extends PropertyAccessorElementImpl2
with
- FragmentedExecutableElementMixin<GetterFragment>,
- FragmentedFunctionTypedElementMixin<GetterFragment>,
- FragmentedTypeParameterizedElementMixin<GetterFragment>,
- FragmentedAnnotatableElementMixin<GetterFragment>,
- FragmentedElementMixin<GetterFragment>,
+ FragmentedExecutableElementMixin<PropertyAccessorElementImpl>,
+ FragmentedFunctionTypedElementMixin<PropertyAccessorElementImpl>,
+ FragmentedTypeParameterizedElementMixin<PropertyAccessorElementImpl>,
+ FragmentedAnnotatableElementMixin<PropertyAccessorElementImpl>,
+ FragmentedElementMixin<PropertyAccessorElementImpl>,
_HasSinceSdkVersionMixin
implements GetterElement2OrMember {
@override
@@ -7879,7 +7879,7 @@
FunctionElementImpl get firstFragment => _wrappedElement;
@override
- List<FormalParameterElement> get formalParameters =>
+ List<FormalParameterElementMixin> get formalParameters =>
_wrappedElement.formalParameters
.map((fragment) => fragment.element)
.toList();
@@ -8550,11 +8550,11 @@
class MethodElementImpl2 extends ExecutableElementImpl2
with
- FragmentedExecutableElementMixin<MethodFragment>,
- FragmentedFunctionTypedElementMixin<MethodFragment>,
- FragmentedTypeParameterizedElementMixin<MethodFragment>,
- FragmentedAnnotatableElementMixin<MethodFragment>,
- FragmentedElementMixin<MethodFragment>,
+ FragmentedExecutableElementMixin<MethodElementImpl>,
+ FragmentedFunctionTypedElementMixin<MethodElementImpl>,
+ FragmentedTypeParameterizedElementMixin<MethodElementImpl>,
+ FragmentedAnnotatableElementMixin<MethodElementImpl>,
+ FragmentedElementMixin<MethodElementImpl>,
_HasSinceSdkVersionMixin
implements MethodElement2OrMember {
@override
@@ -10703,11 +10703,11 @@
class SetterElementImpl extends PropertyAccessorElementImpl2
with
- FragmentedExecutableElementMixin<SetterFragment>,
- FragmentedFunctionTypedElementMixin<SetterFragment>,
- FragmentedTypeParameterizedElementMixin<SetterFragment>,
- FragmentedAnnotatableElementMixin<SetterFragment>,
- FragmentedElementMixin<SetterFragment>,
+ FragmentedExecutableElementMixin<PropertyAccessorElementImpl>,
+ FragmentedFunctionTypedElementMixin<PropertyAccessorElementImpl>,
+ FragmentedTypeParameterizedElementMixin<PropertyAccessorElementImpl>,
+ FragmentedAnnotatableElementMixin<PropertyAccessorElementImpl>,
+ FragmentedElementMixin<PropertyAccessorElementImpl>,
_HasSinceSdkVersionMixin
implements SetterElement2OrMember {
@override
@@ -10909,11 +10909,11 @@
class TopLevelFunctionElementImpl extends ExecutableElementImpl2
with
- FragmentedExecutableElementMixin<TopLevelFunctionFragment>,
- FragmentedFunctionTypedElementMixin<TopLevelFunctionFragment>,
- FragmentedTypeParameterizedElementMixin<TopLevelFunctionFragment>,
- FragmentedAnnotatableElementMixin<TopLevelFunctionFragment>,
- FragmentedElementMixin<TopLevelFunctionFragment>,
+ FragmentedExecutableElementMixin<FunctionElementImpl>,
+ FragmentedFunctionTypedElementMixin<FunctionElementImpl>,
+ FragmentedTypeParameterizedElementMixin<FunctionElementImpl>,
+ FragmentedAnnotatableElementMixin<FunctionElementImpl>,
+ FragmentedElementMixin<FunctionElementImpl>,
_HasSinceSdkVersionMixin
implements TopLevelFunctionElement {
@override
diff --git a/pkg/analyzer/lib/src/dart/element/extensions.dart b/pkg/analyzer/lib/src/dart/element/extensions.dart
index c1c8cc6..c631ebc 100644
--- a/pkg/analyzer/lib/src/dart/element/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/element/extensions.dart
@@ -202,9 +202,7 @@
TypeImpl? get firstParameterType {
var self = this;
if (self is MethodElement2OrMember) {
- // TODO(paulberry): eliminate this cast by changing this extension to
- // apply to `ExecutableElementOrMember?`.
- return self.formalParameters.firstOrNull?.type as TypeImpl?;
+ return self.formalParameters.firstOrNull?.type;
}
return null;
}
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index 7f24cce..af764a2 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -265,7 +265,7 @@
Element2? get enclosingElement2 => _element2.enclosingElement2;
@override
- List<FormalParameterElement> get formalParameters =>
+ List<FormalParameterElementMixin> get formalParameters =>
parameters.map((fragment) => fragment.asElement2).toList();
@override
diff --git a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
index 6b6be1f..30f5561 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -197,13 +197,7 @@
var parameters = method.formalParameters;
if (parameters.isNotEmpty) {
return _typeSystem.refineNumericInvocationContext2(
- leftType,
- method,
- leftType,
- // TODO(paulberry): eliminate this cast by changing the type of
- // `MethodElementOrMember.parameters` to
- // `List<ParameterElementMixin>`.
- parameters[0].type as TypeImpl);
+ leftType, method, leftType, parameters[0].type);
}
}
return UnknownInferredType.instance;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 4f8c1ff..c5609c4 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1713,20 +1713,14 @@
if (node is AugmentedExpression) {
if (element is SetterElement2OrMember) {
if (element.formalParameters case [var valueParameter]) {
- // TODO(paulberry): eliminate this cast by changing the type of
- // `PropertyAccessorElementOrMember.parameters` to
- // `List<ParameterElementMixin>`.
- writeType = valueParameter.type as TypeImpl;
+ writeType = valueParameter.type;
}
}
} else if (node is IndexExpression) {
- if (element is MethodElement2) {
+ if (element is MethodElement2OrMember) {
var parameters = element.formalParameters;
if (parameters.length == 2) {
- // TODO(paulberry): eliminate this cast by changing the type of
- // `PropertyAccessorElementOrMember.parameters` to
- // `List<ParameterElementMixin>`.
- writeType = parameters[1].type as TypeImpl;
+ writeType = parameters[1].type;
}
}
} else if (node is PrefixedIdentifier ||
@@ -1741,10 +1735,7 @@
} else {
var parameters = element.formalParameters;
if (parameters.length == 1) {
- // TODO(paulberry): eliminate this cast by changing the type of
- // `PropertyAccessorElementOrMember.parameters` to
- // `List<ParameterElementMixin>`.
- writeType = parameters[0].type as TypeImpl;
+ writeType = parameters[0].type;
}
}
} else if (element is VariableElement2OrMember) {