Index: pkg/analyzer/lib/src/summary/summarize_ast.dart |
diff --git a/pkg/analyzer/lib/src/summary/summarize_ast.dart b/pkg/analyzer/lib/src/summary/summarize_ast.dart |
index c2a625bf29f69a2ab264da555505f6866af128cf..cb799b93f1a36a4d4e23ed2b08b9605c5406287d 100644 |
--- a/pkg/analyzer/lib/src/summary/summarize_ast.dart |
+++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart |
@@ -643,11 +643,17 @@ class _SummarizeAstVisitor extends RecursiveAstVisitor { |
b.parameters = formalParameters.parameters |
.map((FormalParameter p) => p.accept(this)) |
.toList(); |
- if (!isSemanticallyStatic) { |
- for (int i = 0; i < formalParameters.parameters.length; i++) { |
- if (!b.parameters[i].isFunctionTyped && |
- b.parameters[i].type == null) { |
- b.parameters[i].inferredTypeSlot = assignSlot(); |
+ |
+ for (int i = 0; i < formalParameters.parameters.length; i++) { |
+ UnlinkedParamBuilder p = b.parameters[i]; |
+ if (!p.isFunctionTyped && p.type == null) { |
+ // Strong mode infers parameters in two cases: |
+ // - instance members (i.e. not semantically static), |
+ // - parameters with default values, except initializing formals |
+ // (the type comes from the field). |
+ if (!isSemanticallyStatic || |
+ p.initializer != null && !p.isInitializingFormal) { |
+ p.inferredTypeSlot = assignSlot(); |
} |
} |
} |