| 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 9aeb892dad701eb4ba59ee5dafa2e171c413fa49..5c6c1d60e6e3e70088cc9350389222f031f3fd06 100644
|
| --- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| +++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| @@ -3046,10 +3046,14 @@ 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);
|
| + if (member instanceof FieldElement) {
|
| + FieldElement field = (FieldElement) member;
|
| + if (!field.getModifiers().isAbstractField()) {
|
| + artificialNames.add("setter " + name);
|
| + superMembers.put("setter " + name, member);
|
| + } else if (field.getSetter() != null && !name.startsWith("setter ")) {
|
| + superMembers.put("setter " + name, member);
|
| + }
|
| }
|
| }
|
| }
|
| @@ -3072,8 +3076,15 @@ public class TypeAnalyzer implements DartCompilationPhase {
|
| while (supertype != null) {
|
| ClassElement superclass = supertype.getElement();
|
| for (Element member : superclass.getMembers()) {
|
| + String name = member.getName();
|
| if (!member.getModifiers().isAbstract()) {
|
| - superMembers.removeAll(member.getName());
|
| + superMembers.removeAll(name);
|
| + }
|
| + if (member instanceof FieldElement) {
|
| + FieldElement field = (FieldElement) member;
|
| + if (field.getSetter() != null) {
|
| + superMembers.removeAll("setter " + name);
|
| + }
|
| }
|
| }
|
| supertype = supertype.getElement().getSupertype();
|
| @@ -3112,10 +3123,11 @@ public class TypeAnalyzer implements DartCompilationPhase {
|
| 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));
|
| + if (!name.startsWith("setter ")) {
|
| + name = "setter " + name;
|
| + }
|
| }
|
| + overridden.addAll(superMembers.removeAll(name));
|
| } else {
|
| overridden.addAll(superMembers.removeAll(name));
|
| }
|
|
|