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

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

Issue 10962047: Issue 5327. Fix for invalid 'instantiation of a class with the inherited abstract members' (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 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));
}

Powered by Google App Engine
This is Rietveld 408576698