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; |