Index: pkg/analyzer/lib/src/task/strong/checker.dart |
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart |
index b32ff6e515e26aa2b913ea66939586deaee448f5..e8c80c0a34fab332847a03a04450f6ee9b756a3e 100644 |
--- a/pkg/analyzer/lib/src/task/strong/checker.dart |
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart |
@@ -1051,10 +1051,25 @@ class CodeChecker extends RecursiveAstVisitor { |
assert(rules.isSubtypeOf(to, from)); |
// Inference "casts": |
- if (expr is Literal || expr is FunctionExpression) { |
+ if (expr is Literal) { |
// fromT should be an exact type - this will almost certainly fail at |
// runtime. |
- _recordMessage(expr, StrongModeCode.STATIC_TYPE_ERROR, [expr, from, to]); |
+ if (expr is ListLiteral) { |
+ _recordMessage( |
+ expr, StrongModeCode.INVALID_CAST_LITERAL_LIST, [from, to]); |
+ } else if (expr is MapLiteral) { |
+ _recordMessage( |
+ expr, StrongModeCode.INVALID_CAST_LITERAL_MAP, [from, to]); |
+ } else { |
+ _recordMessage( |
+ expr, StrongModeCode.INVALID_CAST_LITERAL, [expr, from, to]); |
+ } |
+ return; |
+ } |
+ |
+ if (expr is FunctionExpression) { |
+ _recordMessage( |
+ expr, StrongModeCode.INVALID_CAST_FUNCTION_EXPR, [from, to]); |
return; |
} |
@@ -1063,15 +1078,19 @@ class CodeChecker extends RecursiveAstVisitor { |
if (e == null || !e.isFactory) { |
// fromT should be an exact type - this will almost certainly fail at |
// runtime. |
- |
- _recordMessage( |
- expr, StrongModeCode.STATIC_TYPE_ERROR, [expr, from, to]); |
+ _recordMessage(expr, StrongModeCode.INVALID_CAST_NEW_EXPR, [from, to]); |
return; |
} |
} |
if (isKnownFunction(expr)) { |
- _recordMessage(expr, StrongModeCode.STATIC_TYPE_ERROR, [expr, from, to]); |
+ Element e = _getKnownElement(expr); |
+ _recordMessage( |
+ expr, |
+ e is MethodElement |
+ ? StrongModeCode.INVALID_CAST_METHOD |
+ : StrongModeCode.INVALID_CAST_FUNCTION, |
+ [e.name, from, to]); |
return; |
} |