Index: pkg/analyzer/lib/src/dart/element/element.dart |
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart |
index e3c4ed967a0de4559113ed62602df9f953501576..17a7e99ec39819f3e80201c113cbb58f792e40fc 100644 |
--- a/pkg/analyzer/lib/src/dart/element/element.dart |
+++ b/pkg/analyzer/lib/src/dart/element/element.dart |
@@ -6661,23 +6661,22 @@ class MethodElementImpl extends ExecutableElementImpl implements MethodElement { |
@override |
FunctionType getReifiedType(DartType objectType) { |
- // Collect the covariant parameters. Do this first so we don't allocate |
- // anything in the common case where there are none. |
- Set<String> covariantNames; |
+ // Check whether we have any covariant parameters. |
+ // Usually we don't, so we can use the same type. |
+ bool hasCovariant = false; |
for (ParameterElement parameter in parameters) { |
if (parameter.isCovariant) { |
- covariantNames ??= new Set(); |
- covariantNames.add(parameter.name); |
+ hasCovariant = true; |
+ break; |
} |
} |
- if (covariantNames == null) return type; |
+ if (!hasCovariant) { |
+ return type; |
+ } |
List<ParameterElement> covariantParameters = parameters.map((parameter) { |
- if (!covariantNames.contains(parameter.name)) { |
- return parameter; |
- } |
- |
+ DartType type = parameter.isCovariant ? objectType : parameter.type; |
return new ParameterElementImpl.synthetic( |
parameter.name, objectType, parameter.parameterKind); |
}).toList(); |