| 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 part of dart2js.resolution.compute_members; | 5 part of dart2js.resolution.compute_members; |
| 6 | 6 |
| 7 class DeclaredMember implements Member { | 7 class DeclaredMember implements Member { |
| 8 final Name name; | 8 final Name name; |
| 9 final Element element; | 9 final Element element; |
| 10 final InterfaceType declarer; | 10 final InterfaceType declarer; |
| 11 final DartType type; | 11 final DartType type; |
| 12 final FunctionType functionType; | 12 final FunctionType functionType; |
| 13 | 13 |
| 14 DeclaredMember(this.name, this.element, | 14 DeclaredMember( |
| 15 this.declarer, | 15 this.name, this.element, this.declarer, this.type, this.functionType); |
| 16 this.type, this.functionType); | |
| 17 | 16 |
| 18 bool get isStatic => !element.isInstanceMember; | 17 bool get isStatic => !element.isInstanceMember; |
| 19 | 18 |
| 20 bool get isGetter => element.isGetter || (!isSetter && element.isField); | 19 bool get isGetter => element.isGetter || (!isSetter && element.isField); |
| 21 | 20 |
| 22 bool get isSetter => name.isSetter; | 21 bool get isSetter => name.isSetter; |
| 23 | 22 |
| 24 bool get isMethod => element.isFunction; | 23 bool get isMethod => element.isFunction; |
| 25 | 24 |
| 26 bool get isDeclaredByField => element.isField; | 25 bool get isDeclaredByField => element.isField; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 48 InheritedMember _newInheritedMember(InterfaceType instance) { | 47 InheritedMember _newInheritedMember(InterfaceType instance) { |
| 49 return new InheritedMember(this, instance); | 48 return new InheritedMember(this, instance); |
| 50 } | 49 } |
| 51 | 50 |
| 52 Iterable<Member> get declarations => <Member>[this]; | 51 Iterable<Member> get declarations => <Member>[this]; |
| 53 | 52 |
| 54 int get hashCode => element.hashCode + 13 * isSetter.hashCode; | 53 int get hashCode => element.hashCode + 13 * isSetter.hashCode; |
| 55 | 54 |
| 56 bool operator ==(other) { | 55 bool operator ==(other) { |
| 57 if (other is! Member) return false; | 56 if (other is! Member) return false; |
| 58 return element == other.element && | 57 return element == other.element && isSetter == other.isSetter; |
| 59 isSetter == other.isSetter; | |
| 60 } | 58 } |
| 61 | 59 |
| 62 String toString() { | 60 String toString() { |
| 63 StringBuffer sb = new StringBuffer(); | 61 StringBuffer sb = new StringBuffer(); |
| 64 printOn(sb, type); | 62 printOn(sb, type); |
| 65 return sb.toString(); | 63 return sb.toString(); |
| 66 } | 64 } |
| 67 | 65 |
| 68 void printOn(StringBuffer sb, DartType type) { | 66 void printOn(StringBuffer sb, DartType type) { |
| 69 if (isStatic) { | 67 if (isStatic) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 84 sb.write(' _)'); | 82 sb.write(' _)'); |
| 85 } else { | 83 } else { |
| 86 sb.write(type.getStringAsDeclared('$name')); | 84 sb.write(type.getStringAsDeclared('$name')); |
| 87 } | 85 } |
| 88 } | 86 } |
| 89 } | 87 } |
| 90 | 88 |
| 91 class DeclaredAbstractMember extends DeclaredMember { | 89 class DeclaredAbstractMember extends DeclaredMember { |
| 92 final DeclaredMember implementation; | 90 final DeclaredMember implementation; |
| 93 | 91 |
| 94 DeclaredAbstractMember(Name name, Element element, | 92 DeclaredAbstractMember(Name name, Element element, InterfaceType declarer, |
| 95 InterfaceType declarer, | 93 DartType type, FunctionType functionType, this.implementation) |
| 96 DartType type, FunctionType functionType, | |
| 97 this.implementation) | |
| 98 : super(name, element, declarer, type, functionType); | 94 : super(name, element, declarer, type, functionType); |
| 99 | 95 |
| 100 bool get isAbstract => true; | 96 bool get isAbstract => true; |
| 101 | 97 |
| 102 InheritedMember _newInheritedMember(InterfaceType instance) { | 98 InheritedMember _newInheritedMember(InterfaceType instance) { |
| 103 return new InheritedAbstractMember(this, instance, | 99 return new InheritedAbstractMember(this, instance, |
| 104 implementation != null ? implementation.inheritFrom(instance) : null); | 100 implementation != null ? implementation.inheritFrom(instance) : null); |
| 105 } | 101 } |
| 106 } | 102 } |
| 107 | 103 |
| 108 class InheritedMember implements DeclaredMember { | 104 class InheritedMember implements DeclaredMember { |
| 109 final DeclaredMember declaration; | 105 final DeclaredMember declaration; |
| 110 final InterfaceType instance; | 106 final InterfaceType instance; |
| 111 | 107 |
| 112 InheritedMember(DeclaredMember this.declaration, | 108 InheritedMember( |
| 113 InterfaceType this.instance) { | 109 DeclaredMember this.declaration, InterfaceType this.instance) { |
| 114 assert(instance.isGeneric); | 110 assert(instance.isGeneric); |
| 115 assert(!declaration.isStatic); | 111 assert(!declaration.isStatic); |
| 116 } | 112 } |
| 117 | 113 |
| 118 Element get element => declaration.element; | 114 Element get element => declaration.element; |
| 119 | 115 |
| 120 Name get name => declaration.name; | 116 Name get name => declaration.name; |
| 121 | 117 |
| 122 InterfaceType get declarer => instance; | 118 InterfaceType get declarer => instance; |
| 123 | 119 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 146 // Assert that if [instance] contains type variables, then these are | 142 // Assert that if [instance] contains type variables, then these are |
| 147 // defined in the declaration of [newInstance] and will therefore be | 143 // defined in the declaration of [newInstance] and will therefore be |
| 148 // substituted into the context of [newInstance] in the created member. | 144 // substituted into the context of [newInstance] in the created member. |
| 149 ClassElement contextClass = Types.getClassContext(instance); | 145 ClassElement contextClass = Types.getClassContext(instance); |
| 150 return contextClass == null || contextClass == newInstance.element; | 146 return contextClass == null || contextClass == newInstance.element; |
| 151 }); | 147 }); |
| 152 return _newInheritedMember(newInstance); | 148 return _newInheritedMember(newInstance); |
| 153 } | 149 } |
| 154 | 150 |
| 155 InheritedMember _newInheritedMember(InterfaceType newInstance) { | 151 InheritedMember _newInheritedMember(InterfaceType newInstance) { |
| 156 return new InheritedMember(declaration, | 152 return new InheritedMember( |
| 157 instance.substByContext(newInstance)); | 153 declaration, instance.substByContext(newInstance)); |
| 158 } | 154 } |
| 159 | 155 |
| 160 Iterable<Member> get declarations => <Member>[this]; | 156 Iterable<Member> get declarations => <Member>[this]; |
| 161 | 157 |
| 162 int get hashCode => declaration.hashCode + 17 * instance.hashCode; | 158 int get hashCode => declaration.hashCode + 17 * instance.hashCode; |
| 163 | 159 |
| 164 bool operator ==(other) { | 160 bool operator ==(other) { |
| 165 if (other is! InheritedMember) return false; | 161 if (other is! InheritedMember) return false; |
| 166 return declaration == other.declaration && | 162 return declaration == other.declaration && instance == other.instance; |
| 167 instance == other.instance; | |
| 168 } | 163 } |
| 169 | 164 |
| 170 void printOn(StringBuffer sb, DartType type) { | 165 void printOn(StringBuffer sb, DartType type) { |
| 171 declaration.printOn(sb, type); | 166 declaration.printOn(sb, type); |
| 172 sb.write(' inherited from $instance'); | 167 sb.write(' inherited from $instance'); |
| 173 } | 168 } |
| 174 | 169 |
| 175 String toString() { | 170 String toString() { |
| 176 StringBuffer sb = new StringBuffer(); | 171 StringBuffer sb = new StringBuffer(); |
| 177 printOn(sb, instance); | 172 printOn(sb, instance); |
| 178 return sb.toString(); | 173 return sb.toString(); |
| 179 } | 174 } |
| 180 } | 175 } |
| 181 | 176 |
| 182 class InheritedAbstractMember extends InheritedMember { | 177 class InheritedAbstractMember extends InheritedMember { |
| 183 final DeclaredMember implementation; | 178 final DeclaredMember implementation; |
| 184 | 179 |
| 185 InheritedAbstractMember(DeclaredMember declaration, | 180 InheritedAbstractMember( |
| 186 InterfaceType instance, | 181 DeclaredMember declaration, InterfaceType instance, this.implementation) |
| 187 this.implementation) | |
| 188 : super(declaration, instance); | 182 : super(declaration, instance); |
| 189 | 183 |
| 190 bool get isAbstract => true; | 184 bool get isAbstract => true; |
| 191 | 185 |
| 192 InheritedMember _newInheritedMember(InterfaceType newInstance) { | 186 InheritedMember _newInheritedMember(InterfaceType newInstance) { |
| 193 return new InheritedAbstractMember( | 187 return new InheritedAbstractMember( |
| 194 declaration, | 188 declaration, |
| 195 instance.substByContext(newInstance), | 189 instance.substByContext(newInstance), |
| 196 implementation != null | 190 implementation != null |
| 197 ? implementation.inheritFrom(newInstance) : null); | 191 ? implementation.inheritFrom(newInstance) |
| 192 : null); |
| 198 } | 193 } |
| 199 } | 194 } |
| 200 | 195 |
| 201 | |
| 202 abstract class AbstractSyntheticMember implements MemberSignature { | 196 abstract class AbstractSyntheticMember implements MemberSignature { |
| 203 final Setlet<Member> inheritedMembers; | 197 final Setlet<Member> inheritedMembers; |
| 204 | 198 |
| 205 AbstractSyntheticMember(this.inheritedMembers); | 199 AbstractSyntheticMember(this.inheritedMembers); |
| 206 | 200 |
| 207 Member get member => inheritedMembers.first; | 201 Member get member => inheritedMembers.first; |
| 208 | 202 |
| 209 Iterable<Member> get declarations => inheritedMembers; | 203 Iterable<Member> get declarations => inheritedMembers; |
| 210 | 204 |
| 211 Name get name => member.name; | 205 Name get name => member.name; |
| 212 } | 206 } |
| 213 | 207 |
| 214 | |
| 215 class SyntheticMember extends AbstractSyntheticMember { | 208 class SyntheticMember extends AbstractSyntheticMember { |
| 216 final DartType type; | 209 final DartType type; |
| 217 final FunctionType functionType; | 210 final FunctionType functionType; |
| 218 | 211 |
| 219 SyntheticMember(Setlet<Member> inheritedMembers, | 212 SyntheticMember(Setlet<Member> inheritedMembers, this.type, this.functionType) |
| 220 this.type, | |
| 221 this.functionType) | |
| 222 : super(inheritedMembers); | 213 : super(inheritedMembers); |
| 223 | 214 |
| 224 bool get isSetter => member.isSetter; | 215 bool get isSetter => member.isSetter; |
| 225 | 216 |
| 226 bool get isGetter => member.isGetter; | 217 bool get isGetter => member.isGetter; |
| 227 | 218 |
| 228 bool get isMethod => member.isMethod; | 219 bool get isMethod => member.isMethod; |
| 229 | 220 |
| 230 bool get isMalformed => false; | 221 bool get isMalformed => false; |
| 231 | 222 |
| 232 String toString() => '${type.getStringAsDeclared('$name')} synthesized ' | 223 String toString() => '${type.getStringAsDeclared('$name')} synthesized ' |
| 233 'from ${inheritedMembers}'; | 224 'from ${inheritedMembers}'; |
| 234 } | 225 } |
| 235 | 226 |
| 236 class ErroneousMember extends AbstractSyntheticMember { | 227 class ErroneousMember extends AbstractSyntheticMember { |
| 237 ErroneousMember(Setlet<Member> inheritedMembers) : super(inheritedMembers); | 228 ErroneousMember(Setlet<Member> inheritedMembers) : super(inheritedMembers); |
| 238 | 229 |
| 239 DartType get type => functionType; | 230 DartType get type => functionType; |
| 240 | 231 |
| 241 FunctionType get functionType { | 232 FunctionType get functionType { |
| 242 throw new UnsupportedError('Erroneous members have no type.'); | 233 throw new UnsupportedError('Erroneous members have no type.'); |
| 243 } | 234 } |
| 244 | 235 |
| 245 bool get isSetter => false; | 236 bool get isSetter => false; |
| 246 | 237 |
| 247 bool get isGetter => false; | 238 bool get isGetter => false; |
| 248 | 239 |
| 249 bool get isMethod => false; | 240 bool get isMethod => false; |
| 250 | 241 |
| 251 bool get isMalformed => true; | 242 bool get isMalformed => true; |
| 252 | 243 |
| 253 String toString() => "erroneous member '$name' synthesized " | 244 String toString() => "erroneous member '$name' synthesized " |
| 254 "from ${inheritedMembers}"; | 245 "from ${inheritedMembers}"; |
| 255 } | 246 } |
| 256 | |
| OLD | NEW |