Index: pkg/compiler/lib/src/resolution/members.dart |
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart |
index 390b16194bcca03073d70e3e03a0409620b0bc10..a677083acc9c39edb01c70a08aa07b2130d3097a 100644 |
--- a/pkg/compiler/lib/src/resolution/members.dart |
+++ b/pkg/compiler/lib/src/resolution/members.dart |
@@ -3665,6 +3665,9 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
// TODO(johnniwinther): Handle this (potentially) erroneous case. |
isValidAsConstant = false; |
} |
+ if (type.typeArguments.any((DartType type) => !type.isDynamic)) { |
+ registry.registerFeature(Feature.TYPE_VARIABLE_BOUNDS_CHECK); |
+ } |
redirectionTarget.computeType(resolution); |
FunctionSignature targetSignature = redirectionTarget.functionSignature; |
@@ -3887,6 +3890,10 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
// TODO(johniwinther): Avoid registration of `type` in face of redirecting |
// factory constructors. |
registry.registerTypeUse(new TypeUse.instantiation(type)); |
+ InterfaceType interfaceType = type; |
+ if (interfaceType.typeArguments.any((DartType type) => !type.isDynamic)) { |
+ registry.registerFeature(Feature.TYPE_VARIABLE_BOUNDS_CHECK); |
+ } |
} |
ResolutionResult resolutionResult = const NoneResult(); |