Chromium Code Reviews| 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( |