| 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 |