| Index: pkg/analyzer/lib/src/task/strong_mode.dart
|
| diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
|
| index 208521f061f47cae0a054108792b76974e723f67..ea3559ded41723b04473d827b2846b5cf84f8a05 100644
|
| --- a/pkg/analyzer/lib/src/task/strong_mode.dart
|
| +++ b/pkg/analyzer/lib/src/task/strong_mode.dart
|
| @@ -263,6 +263,11 @@ class InstanceMemberInferrer {
|
| classElement.fields.forEach(_inferField);
|
| classElement.accessors.forEach(_inferExecutable);
|
| classElement.methods.forEach(_inferExecutable);
|
| + //
|
| + // Infer initializing formal parameter types. This must happen after
|
| + // field types are inferred.
|
| + //
|
| + classElement.constructors.forEach(_inferConstructorFieldFormals);
|
| classElement.hasBeenInferred = true;
|
| } finally {
|
| elementsBeingInferred.remove(classElement);
|
| @@ -441,6 +446,21 @@ class InstanceMemberInferrer {
|
| ExecutableElement element, List<ExecutableElement> elements) {
|
| return elements.every((e) => e.kind == element.kind);
|
| }
|
| +
|
| + void _inferConstructorFieldFormals(ConstructorElement element) {
|
| + for (ParameterElement p in element.parameters) {
|
| + if (p is FieldFormalParameterElement) {
|
| + _inferFieldFormalParameter(p);
|
| + }
|
| + }
|
| + }
|
| +
|
| + void _inferFieldFormalParameter(FieldFormalParameterElement element) {
|
| + FieldElement field = element.field;
|
| + if (field != null && element.hasImplicitType) {
|
| + (element as FieldFormalParameterElementImpl).type = field.type;
|
| + }
|
| + }
|
| }
|
|
|
| /**
|
|
|