| 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 library dart2js.resolution.compute_members; | 5 library dart2js.resolution.compute_members; |
| 6 | 6 |
| 7 import '../common/names.dart' show | 7 import '../common/names.dart' show |
| 8 Identifiers; | 8 Identifiers; |
| 9 import '../common/resolution.dart' show |
| 10 Resolution; |
| 9 import '../compiler.dart' show | 11 import '../compiler.dart' show |
| 10 Compiler; | 12 Compiler; |
| 11 import '../dart_types.dart'; | 13 import '../dart_types.dart'; |
| 12 import '../diagnostics/diagnostic_listener.dart' show | 14 import '../diagnostics/diagnostic_listener.dart' show |
| 13 DiagnosticMessage; | 15 DiagnosticMessage; |
| 14 import '../diagnostics/invariant.dart' show | 16 import '../diagnostics/invariant.dart' show |
| 15 invariant; | 17 invariant; |
| 16 import '../diagnostics/messages.dart' show | 18 import '../diagnostics/messages.dart' show |
| 17 MessageKind; | 19 MessageKind; |
| 18 import '../elements/elements.dart' show | 20 import '../elements/elements.dart' show |
| (...skipping 21 matching lines...) Expand all Loading... |
| 40 new Map<dynamic, Set<MessageKind>>(); | 42 new Map<dynamic, Set<MessageKind>>(); |
| 41 | 43 |
| 42 MembersCreator(Compiler this.compiler, | 44 MembersCreator(Compiler this.compiler, |
| 43 ClassElement this.cls, | 45 ClassElement this.cls, |
| 44 Iterable<String> this.computedMemberNames, | 46 Iterable<String> this.computedMemberNames, |
| 45 Map<Name, Member> this.classMembers) { | 47 Map<Name, Member> this.classMembers) { |
| 46 assert(invariant(cls, cls.isDeclaration, | 48 assert(invariant(cls, cls.isDeclaration, |
| 47 message: "Members may only be computed on declarations.")); | 49 message: "Members may only be computed on declarations.")); |
| 48 } | 50 } |
| 49 | 51 |
| 52 Resolution get resolution => compiler.resolution; |
| 53 |
| 50 void reportMessage(var marker, MessageKind kind, report()) { | 54 void reportMessage(var marker, MessageKind kind, report()) { |
| 51 Set<MessageKind> messages = | 55 Set<MessageKind> messages = |
| 52 reportedMessages.putIfAbsent(marker, | 56 reportedMessages.putIfAbsent(marker, |
| 53 () => new Set<MessageKind>()); | 57 () => new Set<MessageKind>()); |
| 54 if (messages.add(kind)) { | 58 if (messages.add(kind)) { |
| 55 report(); | 59 report(); |
| 56 } | 60 } |
| 57 } | 61 } |
| 58 | 62 |
| 59 bool shouldSkipMember(MemberSignature member) { | 63 bool shouldSkipMember(MemberSignature member) { |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 declared = | 191 declared = |
| 188 new DeclaredMember(name, element, thisType, type, functionType); | 192 new DeclaredMember(name, element, thisType, type, functionType); |
| 189 } | 193 } |
| 190 declaredMembers[name] = declared; | 194 declaredMembers[name] = declared; |
| 191 classMembers[name] = declared; | 195 classMembers[name] = declared; |
| 192 checkValidOverride(declared, inherited); | 196 checkValidOverride(declared, inherited); |
| 193 } | 197 } |
| 194 | 198 |
| 195 Name name = new Name(element.name, library); | 199 Name name = new Name(element.name, library); |
| 196 if (element.isField) { | 200 if (element.isField) { |
| 197 DartType type = element.computeType(compiler); | 201 DartType type = element.computeType(resolution); |
| 198 addDeclaredMember(name, type, new FunctionType.synthesized(type)); | 202 addDeclaredMember(name, type, new FunctionType.synthesized(type)); |
| 199 if (!element.isConst && !element.isFinal) { | 203 if (!element.isConst && !element.isFinal) { |
| 200 addDeclaredMember(name.setter, type, | 204 addDeclaredMember(name.setter, type, |
| 201 new FunctionType.synthesized( | 205 new FunctionType.synthesized( |
| 202 const VoidType(), | 206 const VoidType(), |
| 203 <DartType>[type])); | 207 <DartType>[type])); |
| 204 } | 208 } |
| 205 } else if (element.isGetter) { | 209 } else if (element.isGetter) { |
| 206 FunctionType functionType = element.computeType(compiler); | 210 FunctionType functionType = element.computeType(resolution); |
| 207 DartType type = functionType.returnType; | 211 DartType type = functionType.returnType; |
| 208 addDeclaredMember(name, type, functionType); | 212 addDeclaredMember(name, type, functionType); |
| 209 } else if (element.isSetter) { | 213 } else if (element.isSetter) { |
| 210 FunctionType functionType = element.computeType(compiler); | 214 FunctionType functionType = element.computeType(resolution); |
| 211 DartType type; | 215 DartType type; |
| 212 if (!functionType.parameterTypes.isEmpty) { | 216 if (!functionType.parameterTypes.isEmpty) { |
| 213 type = functionType.parameterTypes.first; | 217 type = functionType.parameterTypes.first; |
| 214 } else { | 218 } else { |
| 215 type = const DynamicType(); | 219 type = const DynamicType(); |
| 216 } | 220 } |
| 217 name = name.setter; | 221 name = name.setter; |
| 218 addDeclaredMember(name, type, functionType); | 222 addDeclaredMember(name, type, functionType); |
| 219 } else { | 223 } else { |
| 220 assert(invariant(element, element.isFunction)); | 224 assert(invariant(element, element.isFunction)); |
| 221 FunctionType type = element.computeType(compiler); | 225 FunctionType type = element.computeType(resolution); |
| 222 addDeclaredMember(name, type, type); | 226 addDeclaredMember(name, type, type); |
| 223 } | 227 } |
| 224 } | 228 } |
| 225 | 229 |
| 226 cls.forEachLocalMember(createMember); | 230 cls.forEachLocalMember(createMember); |
| 227 if (cls.isPatched) { | 231 if (cls.isPatched) { |
| 228 cls.implementation.forEachLocalMember((Element element) { | 232 cls.implementation.forEachLocalMember((Element element) { |
| 229 if (element.isDeclaration) { | 233 if (element.isDeclaration) { |
| 230 createMember(element); | 234 createMember(element); |
| 231 } | 235 } |
| (...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 945 message: "Members have not been fully computed for $this.")); | 949 message: "Members have not been fully computed for $this.")); |
| 946 if (interfaceMembersAreClassMembers) { | 950 if (interfaceMembersAreClassMembers) { |
| 947 classMembers.forEach((_, member) { | 951 classMembers.forEach((_, member) { |
| 948 if (!member.isStatic) f(member); | 952 if (!member.isStatic) f(member); |
| 949 }); | 953 }); |
| 950 } else { | 954 } else { |
| 951 interfaceMembers.forEach((_, member) => f(member)); | 955 interfaceMembers.forEach((_, member) => f(member)); |
| 952 } | 956 } |
| 953 } | 957 } |
| 954 } | 958 } |
| OLD | NEW |