Chromium Code Reviews| Index: lib/src/checker/rules.dart |
| diff --git a/lib/src/checker/rules.dart b/lib/src/checker/rules.dart |
| index bc253f287ddcf5a6a78de7032fe80e21ce102447..75f4663dabfc25182a40f23d774a22fbc4122e14 100644 |
| --- a/lib/src/checker/rules.dart |
| +++ b/lib/src/checker/rules.dart |
| @@ -133,19 +133,42 @@ class RestrictedRules extends TypeRules { |
| } |
| } |
| + bool _anyParameterType(FunctionType ft, bool predicate(DartType t)) { |
| + for (var parameterType in ft.normalParameterTypes) { |
|
Jacob
2015/03/20 16:41:52
I know this code just moved around but it can be r
vsm
2015/03/20 17:23:11
Done.
|
| + if (predicate(parameterType)) return true; |
| + } |
| + for (var parameterType in ft.optionalParameterTypes) { |
| + if (predicate(parameterType)) return true; |
| + } |
| + for (var parameterType in ft.namedParameterTypes.values) { |
| + if (predicate(parameterType)) return true; |
| + } |
| + return false; |
| + } |
| + |
| // TODO(leafp): Revisit this. |
| bool isGroundType(DartType t) { |
| - if (t is FunctionType) return false; |
| if (t is TypeParameterType) return false; |
| if (t.isDynamic) return true; |
| - // t must be an InterfaceType. |
| - var typeArguments = (t as InterfaceType).typeArguments; |
| - for (var typeArgument in typeArguments) { |
| - if (!typeArgument.isDynamic) return false; |
| + if (t is FunctionType) { |
| + if (!t.returnType.isDynamic || |
| + _anyParameterType(t, (pt) => !pt.isDynamic)) { |
| + return false; |
| + } else { |
| + return true; |
| + } |
| } |
| - return true; |
| + if (t is InterfaceType) { |
| + var typeArguments = t.typeArguments; |
| + for (var typeArgument in typeArguments) { |
| + if (!typeArgument.isDynamic) return false; |
|
Leaf
2015/03/20 17:32:01
We could presumably allow object here as well?
vsm
2015/03/20 17:39:28
Yes, done. Perhaps we should unify Object and dyn
|
| + } |
| + return true; |
| + } |
| + |
| + throw new StateError("Unexpected type"); |
| } |
| FunctionType getCallMethodType(DartType t) { |
| @@ -510,16 +533,9 @@ class RestrictedRules extends TypeRules { |
| return false; |
| } |
| } |
| + |
| var ft = t as FunctionType; |
| - for (var parameterType in ft.normalParameterTypes) { |
| - if (parameterType.isDynamic) return true; |
| - } |
| - for (var parameterType in ft.optionalParameterTypes) { |
| - if (parameterType.isDynamic) return true; |
| - } |
| - for (var parameterType in ft.namedParameterTypes.values) { |
| - if (parameterType.isDynamic) return true; |
| - } |
| + if (_anyParameterType(ft, (pt) => pt.isDynamic)) return true; |
|
Jacob
2015/03/20 16:41:52
nit... replace with
return _anyParameterType(ft, (
vsm
2015/03/20 17:23:12
Done.
|
| return false; |
| } |
| } |