Chromium Code Reviews| Index: pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart |
| diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart |
| index ee4166216ede6c53cb54d942acab19886ed6dfb4..77cd5068101309e8532883d74ea42a8fd49dd4bf 100644 |
| --- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart |
| +++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart |
| @@ -39,8 +39,12 @@ class FieldNode extends dependencyWalker.Node<FieldNode> { |
| final overrides = <Member>[]; |
| + final crossOverrides = <Member>[]; |
| + |
| FieldNode(this._typeInferenceEngine, this.member); |
| + get candidateOverrides => overrides.isNotEmpty ? overrides : crossOverrides; |
| + |
| @override |
| bool get isEvaluated => state == FieldState.Inferred; |
| @@ -158,9 +162,10 @@ abstract class TypeInferenceEngineImpl extends TypeInferenceEngine { |
| List<FieldNode> computeFieldDependencies(FieldNode fieldNode) { |
| // If the field's type is going to be determined by inheritance, then its |
| // dependencies are determined by inheritance too. |
| - if (fieldNode.overrides.isNotEmpty) { |
| + var candidateOverrides = fieldNode.candidateOverrides; |
| + if (candidateOverrides.isNotEmpty) { |
| var dependencies = <FieldNode>[]; |
| - for (var override in fieldNode.overrides) { |
| + for (var override in candidateOverrides) { |
| // TODO(paulberry): support dependencies on getters/setters too. |
|
Siggi Cherem (dart-lang)
2017/06/19 20:47:34
is the TODO now outdated? (it appears like here yo
Paul Berry
2017/06/19 21:58:29
Yes, thanks. TODO removed.
|
| var dep = KernelMember.getFieldNode(override); |
| if (dep != null) dependencies.add(dep); |
| @@ -335,7 +340,7 @@ abstract class TypeInferenceEngineImpl extends TypeInferenceEngine { |
| DartType tryInferFieldByInheritance(FieldNode fieldNode) { |
| DartType inferredType; |
| - for (var override in fieldNode.overrides) { |
| + for (var override in fieldNode.candidateOverrides) { |
| var nextInferredType = _computeOverriddenFieldType(override, fieldNode); |
| if (inferredType == null) { |
| inferredType = nextInferredType; |