Index: lib/src/checker/resolver.dart |
diff --git a/lib/src/checker/resolver.dart b/lib/src/checker/resolver.dart |
index bd080e970ba0fea76194e9e139a008b9a3834bfb..473923ffaaca745e0b549beac3fb48f0852ea117 100644 |
--- a/lib/src/checker/resolver.dart |
+++ b/lib/src/checker/resolver.dart |
@@ -330,7 +330,7 @@ class _VarExtractor extends RecursiveAstVisitor { |
/// [LibraryResolverWithInference] above. |
/// |
/// Before inference, this visitor is used to resolve top-levels, classes, and |
-/// fields, but nothing withihn method bodies. After inference, this visitor is |
+/// fields, but nothing within method bodies. After inference, this visitor is |
/// used again to step into method bodies and complete resolution as a second |
/// phase. |
class RestrictedResolverVisitor extends ResolverVisitor { |
@@ -453,6 +453,20 @@ class RestrictedResolverVisitor extends ResolverVisitor { |
return super.visitConstructorDeclaration(node); |
} |
} |
+ |
+ @override |
+ visitFieldFormalParameter(FieldFormalParameter node) { |
+ // Ensure the field formal parameter's type is updated after inference. |
+ // Normally this happens during TypeResolver, but that's before we've done |
+ // inference on the field type. |
Jennifer Messerly
2015/06/10 18:22:19
Is this running at the right time?
In theory, not
Siggi Cherem (dart-lang)
2015/06/10 18:28:30
sgtm. not sure when analyzer does it, but if eleme
|
+ var element = node.element; |
+ if (element is FieldFormalParameterElement) { |
+ if (element.type.isDynamic) { |
+ element.type = element.field.type; |
+ } |
+ } |
+ super.visitFieldFormalParameter(node); |
+ } |
} |
/// Internal state of the resolver, stored so we can reanalyze portions of the |