| Index: lib/src/checker/rules.dart
|
| diff --git a/lib/src/checker/rules.dart b/lib/src/checker/rules.dart
|
| index 047f85435411ab7dfd7a32c4fbe24203f89d24df..0877baba994ff17d0b09256b1ddfae24e087252d 100644
|
| --- a/lib/src/checker/rules.dart
|
| +++ b/lib/src/checker/rules.dart
|
| @@ -264,7 +264,8 @@ class RestrictedRules extends TypeRules {
|
| return true;
|
| }
|
|
|
| - throw new StateError("Unexpected type");
|
| + // We should not see any other type aside from malformed code.
|
| + return false;
|
| }
|
|
|
| /// Check that f1 is a subtype of f2. [ignoreReturn] is used in the DDC
|
| @@ -407,6 +408,10 @@ class RestrictedRules extends TypeRules {
|
| return isSubTypeOf(bound, t2);
|
| }
|
|
|
| + if (t2 is TypeParameterType) {
|
| + return false;
|
| + }
|
| +
|
| if (t2.isDartCoreFunction) {
|
| if (t1 is FunctionType) return true;
|
| if (t1.element is ClassElement) {
|
| @@ -513,6 +518,10 @@ class RestrictedRules extends TypeRules {
|
| }
|
|
|
| DartType elementType(Element e) {
|
| + if (e == null) {
|
| + // Malformed code - just return dynamic.
|
| + return provider.dynamicType;
|
| + }
|
| return (e as dynamic).type;
|
| }
|
|
|
| @@ -704,6 +713,7 @@ class DownwardsInference {
|
| // Check that we were not passed any type arguments
|
| if (classTypeName.typeArguments != null) return false;
|
| // Infer type arguments
|
| + if (t is! InterfaceType) return false;
|
| var targs = _matchTypes(type, t);
|
| if (targs == null) return false;
|
| if (e.staticElement == null) return false;
|
|
|