Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Unified Diff: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java

Issue 10961038: Issue 5255. Remember 'overridden' for getters/setters and fields (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
index 9d79a55052adba4e78c990f0982e5f24fe21ae12..20e6c9a352a131810e38e185cc3999d6c64114f3 100644
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
@@ -3057,6 +3057,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
for (InterfaceType supertype : supertypes) {
supertypeElements.add(supertype.getElement());
}
+ Set<String> artificialNames = Sets.newHashSet();
for (ClassElement interfaceElement : supertypeElements) {
for (Element member : interfaceElement.getMembers()) {
String name = member.getName();
@@ -3066,6 +3067,11 @@ public class TypeAnalyzer implements DartCompilationPhase {
}
}
superMembers.put(name, member);
+ if (member instanceof FieldElement
+ && !((FieldElement) member).getModifiers().isAbstractField()) {
+ artificialNames.add("setter " + name);
+ superMembers.put("setter " + name, member);
+ }
}
}
@@ -3093,6 +3099,11 @@ public class TypeAnalyzer implements DartCompilationPhase {
}
supertype = supertype.getElement().getSupertype();
}
+
+ // Remove artificial "setter " members.
+ for (String name : artificialNames) {
+ superMembers.removeAll(name);
+ }
// All remaining methods are unimplemented.
for (String name : superMembers.keys()) {
@@ -3117,8 +3128,19 @@ public class TypeAnalyzer implements DartCompilationPhase {
public Void visitField(DartField node) {
if (superMembers != null) {
FieldElement field = node.getElement();
+ // prepare overridden elements
String name = field.getName();
- Collection<Element> overridden = superMembers.removeAll(name);
+ Set<Element> overridden = Sets.newHashSet();
+ if (node.getAccessor() != null) {
+ if (node.getAccessor().getModifiers().isSetter()) {
+ overridden.addAll(superMembers.removeAll("setter " + name));
+ } else {
+ overridden.addAll(superMembers.removeAll(name));
+ }
+ } else {
+ overridden.addAll(superMembers.removeAll(name));
+ }
+ // check override
for (Element superElement : overridden) {
if (!(field.isStatic() && superElement.getModifiers().isStatic())) {
if (canOverride(node.getName(), field.getModifiers(), superElement)
@@ -3139,6 +3161,32 @@ public class TypeAnalyzer implements DartCompilationPhase {
}
}
}
+ // set super-elements for FieldElement
+ Elements.setOverridden(field, ImmutableSet.copyOf(overridden));
+ // set super-elements for getter/setter
+ if (node.getAccessor() != null) {
+ Set<Element> superGetters = Sets.newHashSet();
+ Set<Element> superSetters = Sets.newHashSet();
+ for (Element superElement : overridden) {
+ if (superElement instanceof FieldElement) {
+ FieldElement superField = (FieldElement) superElement;
+ if (superField.getGetter() != null) {
+ superGetters.add(superField.getGetter());
+ } else if (superField.getSetter() != null) {
+ superSetters.add(superField.getSetter());
+ } else {
+ superGetters.add(superField);
+ superSetters.add(superField);
+ }
+ }
+ }
+ if (node.getAccessor().getModifiers().isGetter()) {
+ Elements.setOverridden(node.getAccessor().getElement(), superGetters);
+ }
+ if (node.getAccessor().getModifiers().isSetter()) {
+ Elements.setOverridden(node.getAccessor().getElement(), superSetters);
+ }
+ }
}
return null;
}

Powered by Google App Engine
This is Rietveld 408576698