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.dart'; | 7 import '../common.dart'; |
8 import '../common/names.dart' show Identifiers, Names; | 8 import '../common/names.dart' show Identifiers, Names; |
9 import '../common/resolution.dart' show Resolution; | 9 import '../common/resolution.dart' show Resolution; |
| 10 import '../core_types.dart' show CommonElements; |
10 import '../elements/resolution_types.dart'; | 11 import '../elements/resolution_types.dart'; |
11 import '../elements/elements.dart' | 12 import '../elements/elements.dart' |
12 show | 13 show |
13 ClassElement, | 14 ClassElement, |
14 Element, | 15 Element, |
15 LibraryElement, | 16 LibraryElement, |
16 Member, | 17 Member, |
17 MemberElement, | 18 MemberElement, |
18 MemberSignature, | 19 MemberSignature, |
19 MixinApplicationElement, | 20 MixinApplicationElement, |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 classMembers[name] = declared; | 186 classMembers[name] = declared; |
186 checkValidOverride(declared, inherited); | 187 checkValidOverride(declared, inherited); |
187 } | 188 } |
188 | 189 |
189 Name name = new Name(element.name, library); | 190 Name name = new Name(element.name, library); |
190 if (element.isField) { | 191 if (element.isField) { |
191 ResolutionDartType type = element.computeType(resolution); | 192 ResolutionDartType type = element.computeType(resolution); |
192 addDeclaredMember( | 193 addDeclaredMember( |
193 name, type, new ResolutionFunctionType.synthesized(type)); | 194 name, type, new ResolutionFunctionType.synthesized(type)); |
194 if (!element.isConst && !element.isFinal) { | 195 if (!element.isConst && !element.isFinal) { |
| 196 // TODO(floitsch): would be nice to have the voidType directly |
| 197 // on commonElements. |
| 198 ClassElement objectClass = resolution.commonElements.objectClass; |
| 199 ResolutionVoidType voidType = new ResolutionVoidType(objectClass); |
195 addDeclaredMember( | 200 addDeclaredMember( |
196 name.setter, | 201 name.setter, |
197 type, | 202 type, |
198 new ResolutionFunctionType.synthesized( | 203 new ResolutionFunctionType.synthesized( |
199 const ResolutionVoidType(), <ResolutionDartType>[type])); | 204 voidType, <ResolutionDartType>[type])); |
200 } | 205 } |
201 } else if (element.isGetter) { | 206 } else if (element.isGetter) { |
202 ResolutionFunctionType functionType = element.computeType(resolution); | 207 ResolutionFunctionType functionType = element.computeType(resolution); |
203 ResolutionDartType type = functionType.returnType; | 208 ResolutionDartType type = functionType.returnType; |
204 addDeclaredMember(name, type, functionType); | 209 addDeclaredMember(name, type, functionType); |
205 } else if (element.isSetter) { | 210 } else if (element.isSetter) { |
206 ResolutionFunctionType functionType = element.computeType(resolution); | 211 ResolutionFunctionType functionType = element.computeType(resolution); |
207 ResolutionDartType type; | 212 ResolutionDartType type; |
208 if (!functionType.parameterTypes.isEmpty) { | 213 if (!functionType.parameterTypes.isEmpty) { |
209 type = functionType.parameterTypes.first; | 214 type = functionType.parameterTypes.first; |
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 } | 856 } |
852 } | 857 } |
853 } | 858 } |
854 | 859 |
855 /// If `true` interface members are the non-static class member. | 860 /// If `true` interface members are the non-static class member. |
856 bool get interfaceMembersAreClassMembers => _interfaceMembersAreClassMembers; | 861 bool get interfaceMembersAreClassMembers => _interfaceMembersAreClassMembers; |
857 | 862 |
858 Map<Name, Member> classMembers; | 863 Map<Name, Member> classMembers; |
859 Map<Name, MemberSignature> interfaceMembers; | 864 Map<Name, MemberSignature> interfaceMembers; |
860 | 865 |
| 866 CommonElements commonElements; |
| 867 |
861 /// Creates the necessary maps and [MembersCreator] for compute members of | 868 /// Creates the necessary maps and [MembersCreator] for compute members of |
862 /// this class. | 869 /// this class. |
863 MembersCreator _prepareCreator(Resolution resolution) { | 870 MembersCreator _prepareCreator(Resolution resolution) { |
864 if (classMembers == null) { | 871 if (classMembers == null) { |
865 _computeInterfaceMembersAreClassMembers(resolution); | 872 _computeInterfaceMembersAreClassMembers(resolution); |
866 classMembers = new Map<Name, Member>(); | 873 classMembers = new Map<Name, Member>(); |
867 if (!interfaceMembersAreClassMembers) { | 874 if (!interfaceMembersAreClassMembers) { |
868 interfaceMembers = new Map<Name, MemberSignature>(); | 875 interfaceMembers = new Map<Name, MemberSignature>(); |
869 } | 876 } |
870 } | 877 } |
| 878 commonElements = resolution.commonElements; |
871 return interfaceMembersAreClassMembers | 879 return interfaceMembersAreClassMembers |
872 ? new ClassMembersCreator( | 880 ? new ClassMembersCreator( |
873 resolution, this, computedMemberNames, classMembers) | 881 resolution, this, computedMemberNames, classMembers) |
874 : new InterfaceMembersCreator(resolution, this, computedMemberNames, | 882 : new InterfaceMembersCreator(resolution, this, computedMemberNames, |
875 classMembers, interfaceMembers); | 883 classMembers, interfaceMembers); |
876 } | 884 } |
877 | 885 |
878 static Iterable<String> _EMPTY_MEMBERS_NAMES = const <String>[]; | 886 static Iterable<String> _EMPTY_MEMBERS_NAMES = const <String>[]; |
879 | 887 |
880 /// Compute the members by the name [name] for this class. [names] collects | 888 /// Compute the members by the name [name] for this class. [names] collects |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
958 message: "Members have not been fully computed for $this.")); | 966 message: "Members have not been fully computed for $this.")); |
959 if (interfaceMembersAreClassMembers) { | 967 if (interfaceMembersAreClassMembers) { |
960 classMembers.forEach((_, member) { | 968 classMembers.forEach((_, member) { |
961 if (!member.isStatic) f(member); | 969 if (!member.isStatic) f(member); |
962 }); | 970 }); |
963 } else { | 971 } else { |
964 interfaceMembers.forEach((_, member) => f(member)); | 972 interfaceMembers.forEach((_, member) => f(member)); |
965 } | 973 } |
966 } | 974 } |
967 } | 975 } |
OLD | NEW |