Index: compiler/java/com/google/dart/compiler/ast/DartClass.java |
diff --git a/compiler/java/com/google/dart/compiler/ast/DartClass.java b/compiler/java/com/google/dart/compiler/ast/DartClass.java |
index 313949353015f2e6a4576b17a9ad40577c5b8a5c..221c2fc8863627d3ac041a1b1766155d733e6e09 100644 |
--- a/compiler/java/com/google/dart/compiler/ast/DartClass.java |
+++ b/compiler/java/com/google/dart/compiler/ast/DartClass.java |
@@ -24,6 +24,7 @@ public class DartClass extends DartDeclaration<DartIdentifier> implements HasSym |
private final List<DartTypeNode> interfaces; |
private boolean isInterface; |
+ private final Modifiers modifiers; |
private DartTypeNode defaultClass; |
private int hash = -1; |
@@ -35,14 +36,23 @@ public class DartClass extends DartDeclaration<DartIdentifier> implements HasSym |
public DartClass(DartIdentifier name, DartStringLiteral nativeName, |
DartTypeNode superclass, List<DartTypeNode> interfaces, |
List<DartNode> members, |
- List<DartTypeParameter> typeParameters) { |
- this(name, nativeName, superclass, interfaces, members, typeParameters, null, false); |
+ List<DartTypeParameter> typeParameters, |
+ Modifiers modifiers) { |
+ this(name, nativeName, superclass, interfaces, members, typeParameters, null, false, modifiers); |
} |
public DartClass(DartIdentifier name, DartTypeNode superclass, List<DartTypeNode> interfaces, |
List<DartNode> members, |
List<DartTypeParameter> typeParameters, DartTypeNode defaultClass) { |
- this(name, null, superclass, interfaces, members, typeParameters, defaultClass, true); |
+ this(name, |
+ null, |
+ superclass, |
+ interfaces, |
+ members, |
+ typeParameters, |
+ defaultClass, |
+ true, |
+ Modifiers.NONE); |
} |
/** |
@@ -57,7 +67,8 @@ public class DartClass extends DartDeclaration<DartIdentifier> implements HasSym |
DartTypeNode superclass, List<DartTypeNode> interfaces, |
List<DartNode> members, |
List<DartTypeParameter> typeParameters, DartTypeNode defaultClass, |
- boolean isInterface) { |
+ boolean isInterface, |
+ Modifiers modifiers) { |
super(name); |
this.nativeName = nativeName; |
this.superclass = becomeParentOf(superclass); |
@@ -66,12 +77,40 @@ public class DartClass extends DartDeclaration<DartIdentifier> implements HasSym |
this.interfaces = becomeParentOf(interfaces); |
this.defaultClass = becomeParentOf(defaultClass); |
this.isInterface = isInterface; |
+ this.modifiers = modifiers; |
} |
public boolean isInterface() { |
return isInterface; |
} |
+ public Modifiers getModifiers() { |
+ return modifiers; |
+ } |
+ |
+ public boolean isAbstract() { |
+ if (modifiers.isAbstract()) { |
+ return true; |
+ } |
+ for (DartNode node : members) { |
+ if (node instanceof DartMethodDefinition) { |
+ DartMethodDefinition methodDefinition = (DartMethodDefinition) node; |
+ if (methodDefinition.getModifiers().isAbstract()) { |
+ return true; |
+ } |
+ } |
+ if (node instanceof DartFieldDefinition) { |
+ DartFieldDefinition fieldDefinition = (DartFieldDefinition) node; |
+ for (DartField field : fieldDefinition.getFields()) { |
+ if (field.getModifiers().isAbstract()) { |
+ return true; |
+ } |
+ } |
+ } |
+ } |
+ return false; |
+ } |
+ |
public List<DartNode> getMembers() { |
return members; |
} |