Index: pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart |
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart |
index 7c54474acf391221c4b75b6f6250f485bc312943..5b7e77b9106f37b45f173a5ad793c5c19292c14e 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart |
@@ -215,7 +215,7 @@ class KernelProcedureBuilder extends KernelFunctionBuilder { |
int charEndOffset, |
[String nativeMethodName, |
this.redirectionTarget]) |
- : procedure = new KernelProcedure(null, kind, null, |
+ : procedure = new KernelProcedure(null, kind, null, returnType == null, |
fileUri: compilationUnit?.relativeFileUri) |
..fileOffset = charOffset |
..fileEndOffset = charEndOffset, |
@@ -245,15 +245,19 @@ class KernelProcedureBuilder extends KernelFunctionBuilder { |
} |
} |
- bool get isEligibleForGetterSetterInference { |
+ bool get isEligibleForTopLevelInference { |
if (!isInstanceMember) return false; |
- if (isGetter) { |
- return returnType == null; |
- } else if (isSetter) { |
- return formals != null && formals.length > 0 && formals[0].type == null; |
- } else { |
- return false; |
+ if (returnType == null) { |
+ // For now, we skip inferred return types of setters. |
Siggi Cherem (dart-lang)
2017/06/21 20:19:08
aren't they always void (otherwise it is an error)
Paul Berry
2017/06/21 20:54:47
Not quite.
In strong mode if no type is specified
|
+ // TODO(paulberry): fix this. |
+ if (!isSetter) return true; |
+ } |
+ if (formals != null) { |
+ for (var formal in formals) { |
+ if (formal.type == null) return true; |
+ } |
} |
+ return false; |
} |
Procedure build(SourceLibraryBuilder library) { |
@@ -269,7 +273,7 @@ class KernelProcedureBuilder extends KernelFunctionBuilder { |
procedure.isConst = isConst; |
procedure.name = new Name(name, library.target); |
} |
- if (isEligibleForGetterSetterInference) { |
+ if (isEligibleForTopLevelInference) { |
library.loader.typeInferenceEngine.recordMember(procedure); |
} |
return procedure; |
@@ -280,7 +284,7 @@ class KernelProcedureBuilder extends KernelFunctionBuilder { |
@override |
void prepareInitializerInference( |
SourceLibraryBuilder library, ClassBuilder currentClass) { |
- if (isEligibleForGetterSetterInference) { |
+ if (isEligibleForTopLevelInference) { |
var typeInferenceEngine = library.loader.typeInferenceEngine; |
var listener = new TypeInferenceListener(); |
typeInferenceEngine.createTopLevelTypeInferrer( |