OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 /// Implementation of the element model used for deserialiation. | 5 /// Implementation of the element model used for deserialiation. |
6 /// | 6 /// |
7 /// These classes are created by [ElementDeserializer] triggered by the | 7 /// These classes are created by [ElementDeserializer] triggered by the |
8 /// [Deserializer]. | 8 /// [Deserializer]. |
9 | 9 |
10 library dart2js.serialization.modelz; | 10 library dart2js.serialization.modelz; |
(...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 | 890 |
891 @override | 891 @override |
892 FunctionType get callType { | 892 FunctionType get callType { |
893 _ensureSuperHierarchy(); | 893 _ensureSuperHierarchy(); |
894 return _callType; | 894 return _callType; |
895 } | 895 } |
896 } | 896 } |
897 | 897 |
898 abstract class MixinApplicationElementMixin | 898 abstract class MixinApplicationElementMixin |
899 implements ElementZ, MixinApplicationElement { | 899 implements ElementZ, MixinApplicationElement { |
900 Link<ConstructorElement> _constructors; | |
901 | |
902 @override | 900 @override |
903 bool get isMixinApplication => false; | 901 bool get isMixinApplication => true; |
904 | 902 |
905 @override | 903 @override |
906 ClassElement get mixin => mixinType.element; | 904 ClassElement get mixin => mixinType.element; |
907 | |
908 Link<ConstructorElement> get constructors { | |
909 if (_constructors == null) { | |
910 LinkBuilder<ConstructorElement> builder = | |
911 new LinkBuilder<ConstructorElement>(); | |
912 for (ConstructorElement definingConstructor in superclass.constructors) { | |
913 if (definingConstructor.isGenerativeConstructor && | |
914 definingConstructor.memberName.isAccessibleFrom(library)) { | |
915 builder.addLast( | |
916 new ForwardingConstructorElementZ(this, definingConstructor)); | |
917 } | |
918 } | |
919 _constructors = builder.toLink(); | |
920 } | |
921 return _constructors; | |
922 } | |
923 } | 905 } |
924 | 906 |
925 class NamedMixinApplicationElementZ extends ClassElementZ | 907 class NamedMixinApplicationElementZ extends ClassElementZ |
926 with MixinApplicationElementCommon, MixinApplicationElementMixin { | 908 with MixinApplicationElementMixin { |
| 909 Link<Element> _constructors; |
927 InterfaceType _mixinType; | 910 InterfaceType _mixinType; |
928 | 911 |
929 NamedMixinApplicationElementZ(ObjectDecoder decoder) : super(decoder); | 912 NamedMixinApplicationElementZ(ObjectDecoder decoder) : super(decoder); |
930 | 913 |
931 @override | 914 @override |
932 InterfaceType get mixinType => _mixinType ??= _decoder.getType(Key.MIXIN); | 915 InterfaceType get mixinType => _mixinType ??= _decoder.getType(Key.MIXIN); |
933 } | 916 } |
934 | 917 |
935 class UnnamedMixinApplicationElementZ extends ElementZ | 918 class UnnamedMixinApplicationElementZ extends ElementZ |
936 with | 919 with |
937 ClassElementCommon, | 920 ClassElementCommon, |
938 ClassElementMixin, | 921 ClassElementMixin, |
939 class_members.ClassMemberMixin, | 922 class_members.ClassMemberMixin, |
940 TypeDeclarationMixin<InterfaceType>, | 923 TypeDeclarationMixin<InterfaceType>, |
941 AnalyzableElementMixin, | 924 AnalyzableElementMixin, |
942 AstElementMixin, | 925 AstElementMixin, |
943 MixinApplicationElementCommon, | 926 MixinApplicationElementCommon, |
944 MixinApplicationElementMixin { | 927 MixinApplicationElementMixin { |
945 final String name; | 928 final String name; |
946 final ClassElement _subclass; | 929 final ClassElement _subclass; |
947 final InterfaceType supertype; | 930 final InterfaceType supertype; |
948 final Link<DartType> interfaces; | 931 final Link<DartType> interfaces; |
949 OrderedTypeSet _allSupertypesAndSelf; | 932 OrderedTypeSet _allSupertypesAndSelf; |
| 933 Link<ConstructorElement> _constructors; |
950 | 934 |
951 UnnamedMixinApplicationElementZ( | 935 UnnamedMixinApplicationElementZ( |
952 ClassElement subclass, InterfaceType supertype, InterfaceType mixin) | 936 ClassElement subclass, InterfaceType supertype, InterfaceType mixin) |
953 : this._subclass = subclass, | 937 : this._subclass = subclass, |
954 this.supertype = supertype, | 938 this.supertype = supertype, |
955 this.interfaces = const Link<DartType>().prepend(mixin), | 939 this.interfaces = const Link<DartType>().prepend(mixin), |
956 this.name = "${supertype.name}+${mixin.name}"; | 940 this.name = "${supertype.name}+${mixin.name}"; |
957 | 941 |
958 @override | 942 @override |
959 CompilationUnitElement get compilationUnit => _subclass.compilationUnit; | 943 CompilationUnitElement get compilationUnit => _subclass.compilationUnit; |
960 | 944 |
961 @override | 945 @override |
962 bool get isUnnamedMixinApplication => true; | 946 bool get isUnnamedMixinApplication => true; |
963 | 947 |
| 948 Link<ConstructorElement> get constructors { |
| 949 if (_constructors == null) { |
| 950 LinkBuilder<ConstructorElement> builder = |
| 951 new LinkBuilder<ConstructorElement>(); |
| 952 for (ConstructorElement definingConstructor in superclass.constructors) { |
| 953 if (definingConstructor.isGenerativeConstructor && |
| 954 definingConstructor.memberName.isAccessibleFrom(library)) { |
| 955 builder.addLast( |
| 956 new ForwardingConstructorElementZ(this, definingConstructor)); |
| 957 } |
| 958 } |
| 959 _constructors = builder.toLink(); |
| 960 } |
| 961 return _constructors; |
| 962 } |
| 963 |
964 @override | 964 @override |
965 List<DartType> _getTypeVariables() { | 965 List<DartType> _getTypeVariables() { |
966 // Create synthetic type variables for the mixin application. | 966 // Create synthetic type variables for the mixin application. |
967 List<DartType> typeVariables = <DartType>[]; | 967 List<DartType> typeVariables = <DartType>[]; |
968 int index = 0; | 968 int index = 0; |
969 for (TypeVariableType type in _subclass.typeVariables) { | 969 for (TypeVariableType type in _subclass.typeVariables) { |
970 SyntheticTypeVariableElementZ typeVariableElement = | 970 SyntheticTypeVariableElementZ typeVariableElement = |
971 new SyntheticTypeVariableElementZ(this, index, type.name); | 971 new SyntheticTypeVariableElementZ(this, index, type.name); |
972 TypeVariableType typeVariable = new TypeVariableType(typeVariableElement); | 972 TypeVariableType typeVariable = new TypeVariableType(typeVariableElement); |
973 typeVariables.add(typeVariable); | 973 typeVariables.add(typeVariable); |
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1966 } | 1966 } |
1967 | 1967 |
1968 @override | 1968 @override |
1969 ElementKind get kind => ElementKind.PREFIX; | 1969 ElementKind get kind => ElementKind.PREFIX; |
1970 | 1970 |
1971 @override | 1971 @override |
1972 Element lookupLocalMember(String memberName) { | 1972 Element lookupLocalMember(String memberName) { |
1973 return _unsupported('lookupLocalMember'); | 1973 return _unsupported('lookupLocalMember'); |
1974 } | 1974 } |
1975 } | 1975 } |
OLD | NEW |