OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 package com.google.dart.compiler.ast; | 5 package com.google.dart.compiler.ast; |
6 | 6 |
7 import com.google.dart.compiler.resolver.ClassNodeElement; | 7 import com.google.dart.compiler.resolver.ClassNodeElement; |
8 import com.google.dart.compiler.resolver.Element; | 8 import com.google.dart.compiler.resolver.Element; |
9 | 9 |
10 import java.util.List; | 10 import java.util.List; |
11 | 11 |
12 /** | 12 /** |
13 * Represents a Dart class. | 13 * Represents a Dart class. |
14 */ | 14 */ |
15 public class DartClass extends DartDeclaration<DartIdentifier> { | 15 public class DartClass extends DartDeclaration<DartIdentifier> { |
16 | 16 |
17 private ClassNodeElement element; | 17 private ClassNodeElement element; |
18 | 18 |
19 private DartTypeNode superclass; | 19 private DartTypeNode superclass; |
20 | 20 |
21 private final NodeList<DartNode> members = NodeList.create(this); | 21 private final NodeList<DartNode> members = NodeList.create(this); |
22 private final NodeList<DartTypeParameter> typeParameters = NodeList.create(thi
s); | 22 private final NodeList<DartTypeParameter> typeParameters = NodeList.create(thi
s); |
23 private final NodeList<DartTypeNode> interfaces = NodeList.create(this); | 23 private final NodeList<DartTypeNode> interfaces = NodeList.create(this); |
| 24 private final NodeList<DartTypeNode> mixins = NodeList.create(this); |
24 | 25 |
25 private boolean isInterface; | 26 private boolean isInterface; |
26 private DartParameterizedTypeNode defaultClass; | 27 private DartParameterizedTypeNode defaultClass; |
27 private final Modifiers modifiers; | 28 private final Modifiers modifiers; |
28 | 29 |
29 // If the Dart class is implemented by a native JS class the nativeName | 30 // If the Dart class is implemented by a native JS class the nativeName |
30 // points to the JS class. Otherwise it is null. | 31 // points to the JS class. Otherwise it is null. |
31 private final DartStringLiteral nativeName; | 32 private final DartStringLiteral nativeName; |
32 | 33 |
33 private final int tokenOffset; | 34 private final int tokenOffset; |
34 private final int tokenLength; | 35 private final int tokenLength; |
35 private final int defaultTokenOffset; | 36 private final int defaultTokenOffset; |
36 private final int implementsOffset; | 37 private final int implementsOffset; |
37 private final int openBraceOffset; | 38 private final int openBraceOffset; |
38 private final int closeBraceOffset; | 39 private final int closeBraceOffset; |
39 | 40 |
40 public DartClass(int tokenOffset, int tokenLength, DartIdentifier name, | 41 public DartClass(int tokenOffset, int tokenLength, DartIdentifier name, |
41 DartStringLiteral nativeName, DartTypeNode superclass, int implementsOffse
t, | 42 DartStringLiteral nativeName, DartTypeNode superclass, int implementsOffse
t, |
42 List<DartTypeNode> interfaces, int defaultTokenOffset, int openBraceOffset
, | 43 List<DartTypeNode> interfaces, List<DartTypeNode> mixins, int defaultToken
Offset, |
43 int closeBraceOffset, List<DartNode> members, List<DartTypeParameter> type
Parameters, | |
44 Modifiers modifiers) { | |
45 this(tokenOffset, tokenLength, name, nativeName, superclass, implementsOffse
t, interfaces, | |
46 defaultTokenOffset, openBraceOffset, closeBraceOffset, members, typePara
meters, null, | |
47 false, modifiers); | |
48 } | |
49 | |
50 public DartClass(int tokenOffset, int tokenLength, DartIdentifier name, DartTy
peNode superclass, | |
51 int implementsOffset, List<DartTypeNode> interfaces, int defaultTokenOffse
t, | |
52 int openBraceOffset, int closeBraceOffset, List<DartNode> members, | 44 int openBraceOffset, int closeBraceOffset, List<DartNode> members, |
53 List<DartTypeParameter> typeParameters, DartParameterizedTypeNode defaultC
lass) { | 45 List<DartTypeParameter> typeParameters, DartParameterizedTypeNode defaultC
lass, |
54 this(tokenOffset, tokenLength, name, null, superclass, implementsOffset, int
erfaces, | 46 boolean isInterface, Modifiers modifiers) { |
55 defaultTokenOffset, openBraceOffset, closeBraceOffset, members, typePara
meters, | |
56 defaultClass, true, Modifiers.NONE); | |
57 } | |
58 | |
59 public DartClass(int tokenOffset, int tokenLength, DartIdentifier name, | |
60 DartStringLiteral nativeName, DartTypeNode superclass, int implementsOffse
t, | |
61 List<DartTypeNode> interfaces, int defaultTokenOffset, int openBraceOffset
, | |
62 int closeBraceOffset, List<DartNode> members, List<DartTypeParameter> type
Parameters, | |
63 DartParameterizedTypeNode defaultClass, boolean isInterface, Modifiers mod
ifiers) { | |
64 super(name); | 47 super(name); |
65 this.tokenOffset = tokenOffset; | 48 this.tokenOffset = tokenOffset; |
66 this.tokenLength = tokenLength; | 49 this.tokenLength = tokenLength; |
67 this.nativeName = becomeParentOf(nativeName); | 50 this.nativeName = becomeParentOf(nativeName); |
68 this.superclass = becomeParentOf(superclass); | 51 this.superclass = becomeParentOf(superclass); |
69 this.defaultTokenOffset = defaultTokenOffset; | 52 this.defaultTokenOffset = defaultTokenOffset; |
70 this.openBraceOffset = openBraceOffset; | 53 this.openBraceOffset = openBraceOffset; |
71 this.closeBraceOffset = closeBraceOffset; | 54 this.closeBraceOffset = closeBraceOffset; |
72 this.members.addAll(members); | 55 this.members.addAll(members); |
73 this.typeParameters.addAll(typeParameters); | 56 this.typeParameters.addAll(typeParameters); |
74 this.implementsOffset = implementsOffset; | 57 this.implementsOffset = implementsOffset; |
75 this.interfaces.addAll(interfaces); | 58 this.interfaces.addAll(interfaces); |
| 59 this.mixins.addAll(mixins); |
76 this.defaultClass = becomeParentOf(defaultClass); | 60 this.defaultClass = becomeParentOf(defaultClass); |
77 this.isInterface = isInterface; | 61 this.isInterface = isInterface; |
78 this.modifiers = modifiers; | 62 this.modifiers = modifiers; |
79 } | 63 } |
80 | 64 |
81 public boolean isInterface() { | 65 public boolean isInterface() { |
82 return isInterface; | 66 return isInterface; |
83 } | 67 } |
84 | 68 |
85 public Modifiers getModifiers() { | 69 public Modifiers getModifiers() { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 return typeParameters; | 121 return typeParameters; |
138 } | 122 } |
139 | 123 |
140 public int getImplementsOffset() { | 124 public int getImplementsOffset() { |
141 return implementsOffset; | 125 return implementsOffset; |
142 } | 126 } |
143 | 127 |
144 public List<DartTypeNode> getInterfaces() { | 128 public List<DartTypeNode> getInterfaces() { |
145 return interfaces; | 129 return interfaces; |
146 } | 130 } |
| 131 |
| 132 public NodeList<DartTypeNode> getMixins() { |
| 133 return mixins; |
| 134 } |
147 | 135 |
148 public String getClassName() { | 136 public String getClassName() { |
149 if (getName() == null) { | 137 if (getName() == null) { |
150 return null; | 138 return null; |
151 } | 139 } |
152 return getName().getName(); | 140 return getName().getName(); |
153 } | 141 } |
154 | 142 |
155 public DartTypeNode getSuperclass() { | 143 public DartTypeNode getSuperclass() { |
156 return superclass; | 144 return superclass; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 public DartStringLiteral getNativeName() { | 185 public DartStringLiteral getNativeName() { |
198 return nativeName; | 186 return nativeName; |
199 } | 187 } |
200 | 188 |
201 @Override | 189 @Override |
202 public void visitChildren(ASTVisitor<?> visitor) { | 190 public void visitChildren(ASTVisitor<?> visitor) { |
203 super.visitChildren(visitor); | 191 super.visitChildren(visitor); |
204 typeParameters.accept(visitor); | 192 typeParameters.accept(visitor); |
205 safelyVisitChild(superclass, visitor); | 193 safelyVisitChild(superclass, visitor); |
206 interfaces.accept(visitor); | 194 interfaces.accept(visitor); |
| 195 mixins.accept(visitor); |
207 safelyVisitChild(defaultClass, visitor); | 196 safelyVisitChild(defaultClass, visitor); |
208 members.accept(visitor); | 197 members.accept(visitor); |
209 } | 198 } |
210 | 199 |
211 @Override | 200 @Override |
212 public <R> R accept(ASTVisitor<R> visitor) { | 201 public <R> R accept(ASTVisitor<R> visitor) { |
213 return visitor.visitClass(this); | 202 return visitor.visitClass(this); |
214 } | 203 } |
215 } | 204 } |
OLD | NEW |