Index: pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart |
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart |
index 504c88a5fe7c9888d1ebba88a6ee0359188f5766..6dc71000f3f7d2941f39f2b3e79146ce5b414e70 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart |
@@ -23,6 +23,23 @@ import 'package:front_end/src/fasta/type_inference/type_inferrer.dart'; |
import 'package:front_end/src/fasta/type_inference/type_promotion.dart'; |
import 'package:kernel/ast.dart'; |
+/// Concrete shadow object representing a set of invocation arguments. |
+class KernelArguments extends Arguments { |
+ bool _hasExplicitTypeArguments; |
+ |
+ KernelArguments(List<Expression> positional, |
+ {List<DartType> types, List<NamedExpression> named}) |
+ : _hasExplicitTypeArguments = types != null && types.isNotEmpty, |
+ super(positional, types: types, named: named); |
+ |
+ static void setExplicitArgumentTypes( |
+ KernelArguments arguments, List<DartType> types) { |
+ arguments.types.clear(); |
+ arguments.types.addAll(types); |
+ arguments._hasExplicitTypeArguments = true; |
+ } |
+} |
+ |
/// Shadow object for [AsExpression]. |
class KernelAsExpression extends AsExpression implements KernelExpression { |
KernelAsExpression(Expression operand, DartType type) : super(operand, type); |
@@ -109,15 +126,16 @@ class KernelConstructorInvocation extends ConstructorInvocation |
@override |
DartType _inferExpression( |
KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
+ KernelArguments arguments = this.arguments; |
return inferrer.inferConstructorInvocation( |
typeContext, |
typeNeeded, |
fileOffset, |
target, |
- arguments.types.isEmpty ? null : arguments.types, |
+ arguments._hasExplicitTypeArguments ? arguments.types : null, |
_forEachArgument, (type) { |
- arguments = new Arguments(arguments.positional, |
- named: arguments.named, types: type.typeArguments); |
+ arguments.types.clear(); |
+ arguments.types.addAll(type.typeArguments); |
}); |
} |
} |