Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(193)

Side by Side Diff: pkg/compiler/lib/src/serialization/modelz.dart

Issue 1811173003: Support per-library serialization. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 return null; 68 return null;
69 } 69 }
70 70
71 @override 71 @override
72 FunctionElement asFunctionElement() => null; 72 FunctionElement asFunctionElement() => null;
73 73
74 @override 74 @override
75 Scope buildScope() => _unsupported('analyzableElement'); 75 Scope buildScope() => _unsupported('analyzableElement');
76 76
77 @override 77 @override
78 CompilationUnitElement get compilationUnit {
79 return _unsupported('compilationUnit');
80 }
81
82 @override
83 ClassElement get enclosingClass => null; 78 ClassElement get enclosingClass => null;
84 79
85 @override 80 @override
86 Element get enclosingClassOrCompilationUnit { 81 Element get enclosingClassOrCompilationUnit {
87 return _unsupported('enclosingClassOrCompilationUnit'); 82 return _unsupported('enclosingClassOrCompilationUnit');
88 } 83 }
89 84
90 @override 85 @override
91 LibraryElement get implementationLibrary => library; 86 LibraryElement get implementationLibrary => library;
92 87
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 321
327 @override 322 @override
328 accept(ElementVisitor visitor, arg) { 323 accept(ElementVisitor visitor, arg) {
329 return visitor.visitAbstractFieldElement(this, arg); 324 return visitor.visitAbstractFieldElement(this, arg);
330 } 325 }
331 326
332 @override 327 @override
333 LibraryElement get library => _canonicalElement.library; 328 LibraryElement get library => _canonicalElement.library;
334 329
335 @override 330 @override
331 CompilationUnitElement get compilationUnit {
332 return _canonicalElement.compilationUnit;
333 }
334
335 @override
336 Element get enclosingElement => _canonicalElement.enclosingElement; 336 Element get enclosingElement => _canonicalElement.enclosingElement;
337 337
338 @override 338 @override
339 SourceSpan get sourcePosition => _canonicalElement.sourcePosition; 339 SourceSpan get sourcePosition => _canonicalElement.sourcePosition;
340 340
341 @override 341 @override
342 ClassElement get enclosingClass => _canonicalElement.enclosingClass; 342 ClassElement get enclosingClass => _canonicalElement.enclosingClass;
343 } 343 }
344 344
345 class LibraryElementZ extends DeserializedElementZ 345 class LibraryElementZ extends DeserializedElementZ
(...skipping 23 matching lines...) Expand all
369 369
370 @override 370 @override
371 accept(ElementVisitor visitor, arg) { 371 accept(ElementVisitor visitor, arg) {
372 return visitor.visitLibraryElement(this, arg); 372 return visitor.visitLibraryElement(this, arg);
373 } 373 }
374 374
375 @override 375 @override
376 LibraryElement get library => this; 376 LibraryElement get library => this;
377 377
378 @override 378 @override
379 CompilationUnitElement get compilationUnit => entryCompilationUnit;
380
381 @override
379 Uri get canonicalUri { 382 Uri get canonicalUri {
380 if (_canonicalUri == null) { 383 if (_canonicalUri == null) {
381 _canonicalUri = _decoder.getUri(Key.CANONICAL_URI); 384 _canonicalUri = _decoder.getUri(Key.CANONICAL_URI);
382 } 385 }
383 return _canonicalUri; 386 return _canonicalUri;
384 } 387 }
385 388
386 @override 389 @override
387 CompilationUnitElement get entryCompilationUnit { 390 CompilationUnitElement get entryCompilationUnit {
388 if (_entryCompilationUnit == null) { 391 if (_entryCompilationUnit == null) {
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 @override 730 @override
728 FunctionElement asFunctionElement() => this; 731 FunctionElement asFunctionElement() => this;
729 732
730 @override 733 @override
731 bool get isExternal { 734 bool get isExternal {
732 return _decoder.getBool( 735 return _decoder.getBool(
733 Key.IS_EXTERNAL, isOptional: true, defaultValue: false); 736 Key.IS_EXTERNAL, isOptional: true, defaultValue: false);
734 } 737 }
735 } 738 }
736 739
740 abstract class ClassElementMixin implements ElementZ, ClassElement {
741
742 InterfaceType _createType(List<DartType> typeArguments) {
743 return new InterfaceType(this, typeArguments);
744 }
745
746 @override
747 ElementKind get kind => ElementKind.CLASS;
748
749 @override
750 void addBackendMember(Element element) => _unsupported('addBackendMember');
751
752 @override
753 void forEachBackendMember(void f(Element member)) {
754 _unsupported('forEachBackendMember');
755 }
756
757 @override
758 bool get hasBackendMembers => _unsupported('hasBackendMembers');
759
760 @override
761 bool get hasConstructor => _unsupported('hasConstructor');
762
763 @override
764 bool hasFieldShadowedBy(Element fieldMember) => _unsupported('');
765
766 @override
767 bool get hasIncompleteHierarchy => _unsupported('hasIncompleteHierarchy');
768
769 @override
770 bool get hasLocalScopeMembers => _unsupported('hasLocalScopeMembers');
771
772 @override
773 bool implementsFunction(CoreClasses coreClasses) {
774 return _unsupported('implementsFunction');
775 }
776
777 @override
778 bool get isEnumClass => false;
779
780 @override
781 Element lookupBackendMember(String memberName) {
782 return _unsupported('lookupBackendMember');
783 }
784
785 @override
786 ConstructorElement lookupDefaultConstructor() {
787 ConstructorElement constructor = lookupConstructor("");
788 if (constructor != null && constructor.parameters.isEmpty) {
789 return constructor;
790 }
791 return null;
792 }
793
794 @override
795 void reverseBackendMembers() => _unsupported('reverseBackendMembers');
796
797 @override
798 ClassElement get superclass => supertype != null ? supertype.element : null;
799
800 @override
801 void ensureResolved(Resolution resolution) {
802 resolution.registerClass(this);
803 }
804
805 }
806
737 class ClassElementZ extends DeserializedElementZ 807 class ClassElementZ extends DeserializedElementZ
738 with AnalyzableElementMixin, 808 with AnalyzableElementMixin,
739 AstElementMixin, 809 AstElementMixin,
740 ClassElementCommon, 810 ClassElementCommon,
741 class_members.ClassMemberMixin, 811 class_members.ClassMemberMixin,
742 ContainerMixin, 812 ContainerMixin,
743 LibraryMemberMixin, 813 LibraryMemberMixin,
744 TypeDeclarationMixin<InterfaceType> 814 TypeDeclarationMixin<InterfaceType>,
815 ClassElementMixin
745 implements ClassElement { 816 implements ClassElement {
746 bool _isObject; 817 bool _isObject;
747 DartType _supertype; 818 DartType _supertype;
748 OrderedTypeSet _allSupertypesAndSelf; 819 OrderedTypeSet _allSupertypesAndSelf;
749 Link<DartType> _interfaces; 820 Link<DartType> _interfaces;
750 821
751 ClassElementZ(ObjectDecoder decoder) 822 ClassElementZ(ObjectDecoder decoder)
752 : super(decoder); 823 : super(decoder);
753 824
754 InterfaceType _createType(List<DartType> typeArguments) { 825 @override
755 return new InterfaceType(this, typeArguments); 826 List<DartType> _getTypeVariables() {
827 return _decoder.getTypes(Key.TYPE_VARIABLES, isOptional: true);
828 }
829
830 void _ensureSuperHierarchy() {
831 if (_interfaces == null) {
832 InterfaceType supertype =
833 _decoder.getType(Key.SUPERTYPE, isOptional: true);
834 if (supertype == null) {
835 _isObject = true;
836 _allSupertypesAndSelf = new OrderedTypeSet.singleton(thisType);
837 _interfaces = const Link<DartType>();
838 } else {
839 _isObject = false;
840 _interfaces = toLink(
841 _decoder.getTypes(Key.INTERFACES, isOptional: true));
842 List<InterfaceType> mixins =
843 _decoder.getTypes(Key.MIXINS, isOptional: true);
844 for (InterfaceType mixin in mixins) {
845 MixinApplicationElement mixinElement =
846 new UnnamedMixinApplicationElementZ(this, supertype, mixin);
847 supertype = mixinElement.thisType.subst(
848 typeVariables, mixinElement.typeVariables);
849 }
850 _supertype = supertype;
851 _allSupertypesAndSelf =
852 new OrderedTypeSetBuilder(this)
853 .createOrderedTypeSet(_supertype, _interfaces);
854 }
855 }
756 } 856 }
757 857
758 @override 858 @override
759 ElementKind get kind => ElementKind.CLASS;
760
761 @override
762 accept(ElementVisitor visitor, arg) { 859 accept(ElementVisitor visitor, arg) {
763 return visitor.visitClassElement(this, arg); 860 return visitor.visitClassElement(this, arg);
764 } 861 }
765 862
766 @override 863 @override
767 DartType get supertype { 864 DartType get supertype {
768 if (_isObject == null) { 865 _ensureSuperHierarchy();
769 _supertype = _decoder.getType(Key.SUPERTYPE, isOptional: true);
770 _isObject = _supertype == null;
771 }
772 return _supertype; 866 return _supertype;
773 } 867 }
774 868
775 @override 869 @override
776 bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT); 870 bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT);
777 871
778 @override 872 @override
779 bool get isObject { 873 bool get isObject {
780 return supertype == null; 874 _ensureSuperHierarchy();
875 return _isObject;
781 } 876 }
782 877
783 @override 878 @override
784 void addBackendMember(Element element) => _unsupported('addBackendMember'); 879 OrderedTypeSet get allSupertypesAndSelf {
880 _ensureSuperHierarchy();
881 return _allSupertypesAndSelf;
882 }
883
884 @override
885 Link<DartType> get interfaces {
886 _ensureSuperHierarchy();
887 return _interfaces;
888 }
889
890 @override
891 bool get isProxy => _decoder.getBool(Key.IS_PROXY);
892
893 @override
894 bool get isUnnamedMixinApplication => false;
895 }
896
897 abstract class MixinApplicationElementMixin
898 implements ElementZ, MixinApplicationElement {
899 Link<ConstructorElement> _constructors;
900
901 @override
902 bool get isMixinApplication => false;
903
904 @override
905 ClassElement get mixin => mixinType.element;
906
907 Link<ConstructorElement> get constructors {
908 if (_constructors == null) {
909 LinkBuilder<ConstructorElement> builder =
910 new LinkBuilder<ConstructorElement>();
911 for (ConstructorElement definingConstructor in superclass.constructors) {
912 if (definingConstructor.isGenerativeConstructor &&
913 definingConstructor.memberName.isAccessibleFrom(library)) {
914 builder.addLast(
915 new ForwardingConstructorElementZ(this, definingConstructor));
916 }
917 }
918 _constructors = builder.toLink();
919 }
920 return _constructors;
921 }
922 }
923
924
925 class NamedMixinApplicationElementZ extends ClassElementZ
926 with MixinApplicationElementCommon,
927 MixinApplicationElementMixin {
928 InterfaceType _mixinType;
929
930 NamedMixinApplicationElementZ(ObjectDecoder decoder)
931 : super(decoder);
932
933 @override
934 InterfaceType get mixinType {
935 if (_mixinType == null) {
936 _mixinType = _decoder.getType(Key.MIXIN);
937 }
938 return _mixinType;
939 }
940 }
941
942
943 class UnnamedMixinApplicationElementZ extends ElementZ
944 with ClassElementCommon,
945 ClassElementMixin,
946 class_members.ClassMemberMixin,
947 TypeDeclarationMixin<InterfaceType>,
948 AnalyzableElementMixin,
949 AstElementMixin,
950 MixinApplicationElementCommon,
951 MixinApplicationElementMixin {
952 final String name;
953 final ClassElement _subclass;
954 final InterfaceType supertype;
955 final Link<DartType> interfaces;
956 OrderedTypeSet _allSupertypesAndSelf;
957
958 UnnamedMixinApplicationElementZ(
959 ClassElement subclass,
960 InterfaceType supertype, InterfaceType mixin)
961 : this._subclass = subclass,
962 this.supertype = supertype,
963 this.interfaces = const Link<DartType>().prepend(mixin),
964 this.name = "${supertype.name}+${mixin.name}";
965
966 @override
967 CompilationUnitElement get compilationUnit => _subclass.compilationUnit;
968
969 @override
970 bool get isUnnamedMixinApplication => true;
971
972 @override
973 List<DartType> _getTypeVariables() {
974 // Create synthetic type variables for the mixin application.
975 List<DartType> typeVariables = <DartType>[];
976 int index = 0;
977 for (TypeVariableType type in _subclass.typeVariables) {
978 SyntheticTypeVariableElementZ typeVariableElement =
979 new SyntheticTypeVariableElementZ(this, index, type.name);
980 TypeVariableType typeVariable = new TypeVariableType(typeVariableElement);
981 typeVariables.add(typeVariable);
982 index++;
983 }
984 // Setup bounds on the synthetic type variables.
985 for (TypeVariableType type in _subclass.typeVariables) {
986 TypeVariableType typeVariable = typeVariables[type.element.index];
987 SyntheticTypeVariableElementZ typeVariableElement = typeVariable.element;
988 typeVariableElement._type = typeVariable;
989 typeVariableElement._bound =
990 type.element.bound.subst(typeVariables, _subclass.typeVariables);
991 }
992 return typeVariables;
993 }
994
995 @override
996 accept(ElementVisitor visitor, arg) {
997 return visitor.visitMixinApplicationElement(this, arg);
998 }
785 999
786 @override 1000 @override
787 OrderedTypeSet get allSupertypesAndSelf { 1001 OrderedTypeSet get allSupertypesAndSelf {
788 if (_allSupertypesAndSelf == null) { 1002 if (_allSupertypesAndSelf == null) {
789 ObjectDecoder supertypesDeserializer = 1003 _allSupertypesAndSelf =
790 _decoder.getObject(Key.SUPERTYPES); 1004 new OrderedTypeSetBuilder(this)
791 List<int> offsets = supertypesDeserializer.getInts(Key.OFFSETS); 1005 .createOrderedTypeSet(supertype, interfaces);
792 List<Link<DartType>> levels = new List<Link<DartType>>(offsets.length);
793 LinkBuilder<DartType> typesBuilder = new LinkBuilder<DartType>();
794 int offset = 0;
795 int depth = offsets.length - 1;
796 for (DartType type in supertypesDeserializer.getTypes(Key.TYPES)) {
797 Link<DartType> link = typesBuilder.addLast(type);
798 if (offsets[depth] == offset) {
799 levels[depth] = link;
800 depth--;
801 }
802 offset++;
803 }
804 LinkBuilder<DartType> supertypesBuilder = new LinkBuilder<DartType>();
805 for (DartType supertype in
806 supertypesDeserializer.getTypes(Key.SUPERTYPES, isOptional: true)) {
807 supertypesBuilder.addLast(supertype);
808 }
809 Link<DartType> types = typesBuilder.toLink();
810 Link<DartType> supertypes = supertypesBuilder.toLink();
811 _allSupertypesAndSelf = new OrderedTypeSet.internal(
812 levels, types, supertypes);
813 } 1006 }
814 return _allSupertypesAndSelf; 1007 return _allSupertypesAndSelf;
815 } 1008 }
816 1009
817 @override 1010 @override
818 void forEachBackendMember(void f(Element member)) { 1011 Element get enclosingElement => _subclass.enclosingElement;
819 _unsupported('forEachBackendMember');
820 }
821 1012
822 @override 1013 @override
823 bool get hasBackendMembers => _unsupported('hasBackendMembers'); 1014 bool get isObject => false;
824 1015
825 @override 1016 @override
826 bool get hasConstructor => _unsupported('hasConstructor'); 1017 bool get isProxy => false;
827 1018
828 @override 1019 @override
829 bool hasFieldShadowedBy(Element fieldMember) => _unsupported(''); 1020 LibraryElement get library => enclosingElement.library;
830 1021
831 @override 1022 @override
832 bool get hasIncompleteHierarchy => _unsupported('hasIncompleteHierarchy'); 1023 InterfaceType get mixinType => interfaces.head;
833 1024
834 @override 1025 @override
835 bool get hasLocalScopeMembers => _unsupported('hasLocalScopeMembers'); 1026 SourceSpan get sourcePosition => _subclass.sourcePosition;
836
837 @override
838 bool implementsFunction(CoreClasses coreClasses) {
839 return _unsupported('implementsFunction');
840 }
841
842 @override
843 Link<DartType> get interfaces {
844 if (_interfaces == null) {
845 _interfaces = toLink(
846 _decoder.getTypes(Key.INTERFACES, isOptional: true));
847 }
848 return _interfaces;
849 }
850
851 @override
852 bool get isEnumClass => false;
853
854 @override
855 bool get isProxy => _decoder.getBool(Key.IS_PROXY);
856
857 @override
858 bool get isUnnamedMixinApplication {
859 return _decoder.getBool(Key.IS_UNNAMED_MIXIN_APPLICATION,
860 isOptional: true, defaultValue: false);
861 }
862
863 @override
864 Element lookupBackendMember(String memberName) {
865 return _unsupported('lookupBackendMember');
866 }
867
868 @override
869 ConstructorElement lookupDefaultConstructor() {
870 ConstructorElement constructor = lookupConstructor("");
871 if (constructor != null && constructor.parameters.isEmpty) {
872 return constructor;
873 }
874 return null;
875 }
876
877 @override
878 void reverseBackendMembers() => _unsupported('reverseBackendMembers');
879
880 @override
881 ClassElement get superclass => supertype != null ? supertype.element : null;
882
883 @override
884 void ensureResolved(Resolution resolution) {
885 resolution.registerClass(this);
886 }
887 } 1027 }
888 1028
889 1029
890 class EnumClassElementZ extends ClassElementZ implements EnumClassElement { 1030 class EnumClassElementZ extends ClassElementZ implements EnumClassElement {
891 List<FieldElement> _enumValues; 1031 List<FieldElement> _enumValues;
892 1032
893 EnumClassElementZ(ObjectDecoder decoder) 1033 EnumClassElementZ(ObjectDecoder decoder)
894 : super(decoder); 1034 : super(decoder);
895 1035
896 @override 1036 @override
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 : super(decoder); 1151 : super(decoder);
1012 1152
1013 @override 1153 @override
1014 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR; 1154 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR;
1015 1155
1016 @override 1156 @override
1017 bool get isEffectiveTargetMalformed => 1157 bool get isEffectiveTargetMalformed =>
1018 _unsupported('isEffectiveTargetMalformed'); 1158 _unsupported('isEffectiveTargetMalformed');
1019 } 1159 }
1020 1160
1161 class ForwardingConstructorElementZ extends ElementZ
1162 with AnalyzableElementMixin,
1163 AstElementMixin
1164 implements ConstructorElement {
1165 final MixinApplicationElement enclosingClass;
1166 final ConstructorElement definingConstructor;
1167
1168 ForwardingConstructorElementZ(this.enclosingClass, this.definingConstructor);
1169
1170 @override
1171 CompilationUnitElement get compilationUnit => enclosingClass.compilationUnit;
1172
1173 @override
1174 accept(ElementVisitor visitor, arg) {
1175 return visitor.visitConstructorElement(this, arg);
1176 }
1177
1178 @override
1179 AsyncMarker get asyncMarker => AsyncMarker.SYNC;
1180
1181 @override
1182 InterfaceType computeEffectiveTargetType(InterfaceType newType) {
1183 return enclosingClass.thisType;
1184 }
1185
1186 @override
1187 DartType computeType(Resolution resolution) => type;
1188
1189 @override
1190 bool get isConst => false;
1191
1192 @override
1193 ConstantConstructor get constantConstructor => null;
1194
1195 @override
1196 ConstructorElement get effectiveTarget => this;
1197
1198 @override
1199 Element get enclosingElement => enclosingClass;
1200
1201 @override
1202 FunctionSignature get functionSignature {
1203 return _unsupported('functionSignature');
1204 }
1205
1206 @override
1207 bool get hasFunctionSignature {
1208 return _unsupported('hasFunctionSignature');
1209 }
1210
1211 @override
1212 ConstructorElement get immediateRedirectionTarget => null;
1213
1214 @override
1215 bool get isCyclicRedirection => false;
1216
1217 @override
1218 bool get isEffectiveTargetMalformed => false;
1219
1220 @override
1221 bool get isExternal => false;
1222
1223 @override
1224 bool get isFromEnvironmentConstructor => false;
1225
1226 @override
1227 bool get isRedirectingFactory => false;
1228
1229 @override
1230 bool get isRedirectingGenerative => false;
1231
1232 @override
1233 ElementKind get kind => ElementKind.GENERATIVE_CONSTRUCTOR;
1234
1235 @override
1236 LibraryElement get library => enclosingClass.library;
1237
1238 @override
1239 MemberElement get memberContext => this;
1240
1241 @override
1242 Name get memberName => definingConstructor.memberName;
1243
1244 @override
1245 String get name => definingConstructor.name;
1246
1247 @override
1248 List<FunctionElement> get nestedClosures => const <FunctionElement>[];
1249
1250 @override
1251 List<ParameterElement> get parameters {
1252 // TODO(johnniwinther): We need to create synthetic parameters that
1253 // substitute type variables.
1254 return definingConstructor.parameters;
1255 }
1256
1257 // TODO: implement redirectionDeferredPrefix
1258 @override
1259 PrefixElement get redirectionDeferredPrefix => null;
1260
1261 @override
1262 SourceSpan get sourcePosition => enclosingClass.sourcePosition;
1263
1264 @override
1265 FunctionType get type {
1266 // TODO(johnniwinther): Ensure that the function type substitutes type
1267 // variables correctly.
1268 return definingConstructor.type;
1269 }
1270 }
1271
1021 abstract class MemberElementMixin 1272 abstract class MemberElementMixin
1022 implements DeserializedElementZ, MemberElement { 1273 implements DeserializedElementZ, MemberElement {
1023 1274
1024 @override 1275 @override
1025 MemberElement get memberContext => this; 1276 MemberElement get memberContext => this;
1026 1277
1027 @override 1278 @override
1028 Name get memberName => new Name(name, library); 1279 Name get memberName => new Name(name, library);
1029 1280
1030 @override 1281 @override
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1253 : super(decoder); 1504 : super(decoder);
1254 } 1505 }
1255 1506
1256 class InstanceSetterElementZ extends SetterElementZ 1507 class InstanceSetterElementZ extends SetterElementZ
1257 with ClassMemberMixin, InstanceMemberMixin { 1508 with ClassMemberMixin, InstanceMemberMixin {
1258 InstanceSetterElementZ(ObjectDecoder decoder) 1509 InstanceSetterElementZ(ObjectDecoder decoder)
1259 : super(decoder); 1510 : super(decoder);
1260 } 1511 }
1261 1512
1262 abstract class TypeDeclarationMixin<T extends GenericType> 1513 abstract class TypeDeclarationMixin<T extends GenericType>
1263 implements DeserializedElementZ, TypeDeclarationElement { 1514 implements ElementZ, TypeDeclarationElement {
1264 List<DartType> _typeVariables; 1515 List<DartType> _typeVariables;
1265 T _rawType; 1516 T _rawType;
1266 T _thisType; 1517 T _thisType;
1267 Name _memberName; 1518 Name _memberName;
1268 1519
1269 Name get memberName { 1520 Name get memberName {
1270 if (_memberName == null) { 1521 if (_memberName == null) {
1271 _memberName = new Name(name, library); 1522 _memberName = new Name(name, library);
1272 } 1523 }
1273 return _memberName; 1524 return _memberName;
1274 } 1525 }
1275 1526
1527 List<DartType> _getTypeVariables();
1528
1276 void _ensureTypes() { 1529 void _ensureTypes() {
1277 if (_typeVariables == null) { 1530 if (_typeVariables == null) {
1278 _typeVariables = _decoder.getTypes( 1531 _typeVariables = _getTypeVariables();
1279 Key.TYPE_VARIABLES, isOptional: true);
1280 _rawType = _createType(new List<DartType>.filled( 1532 _rawType = _createType(new List<DartType>.filled(
1281 _typeVariables.length, const DynamicType())); 1533 _typeVariables.length, const DynamicType()));
1282 _thisType = _createType(_typeVariables); 1534 _thisType = _createType(_typeVariables);
1283 } 1535 }
1284 } 1536 }
1285 1537
1286 T _createType(List<DartType> typeArguments); 1538 T _createType(List<DartType> typeArguments);
1287 1539
1288 @override 1540 @override
1289 List<DartType> get typeVariables { 1541 List<DartType> get typeVariables {
(...skipping 30 matching lines...) Expand all
1320 DartType _alias; 1572 DartType _alias;
1321 1573
1322 TypedefElementZ(ObjectDecoder decoder) 1574 TypedefElementZ(ObjectDecoder decoder)
1323 : super(decoder); 1575 : super(decoder);
1324 1576
1325 TypedefType _createType(List<DartType> typeArguments) { 1577 TypedefType _createType(List<DartType> typeArguments) {
1326 return new TypedefType(this, typeArguments); 1578 return new TypedefType(this, typeArguments);
1327 } 1579 }
1328 1580
1329 @override 1581 @override
1582 List<DartType> _getTypeVariables() {
1583 return _decoder.getTypes(Key.TYPE_VARIABLES, isOptional: true);
1584 }
1585
1586 @override
1330 ElementKind get kind => ElementKind.TYPEDEF; 1587 ElementKind get kind => ElementKind.TYPEDEF;
1331 1588
1332 @override 1589 @override
1333 accept(ElementVisitor visitor, arg) { 1590 accept(ElementVisitor visitor, arg) {
1334 return visitor.visitTypedefElement(this, arg); 1591 return visitor.visitTypedefElement(this, arg);
1335 } 1592 }
1336 1593
1337 @override 1594 @override
1338 DartType get alias { 1595 DartType get alias {
1339 if (_alias == null) { 1596 if (_alias == null) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 if (_bound == null) { 1661 if (_bound == null) {
1405 _bound = _decoder.getType(Key.BOUND); 1662 _bound = _decoder.getType(Key.BOUND);
1406 } 1663 }
1407 return _bound; 1664 return _bound;
1408 } 1665 }
1409 1666
1410 @override 1667 @override
1411 LibraryElement get library => typeDeclaration.library; 1668 LibraryElement get library => typeDeclaration.library;
1412 } 1669 }
1413 1670
1671 class SyntheticTypeVariableElementZ extends ElementZ
1672 with AnalyzableElementMixin,
1673 AstElementMixin
1674 implements TypeVariableElement {
1675 final TypeDeclarationElement typeDeclaration;
1676 final int index;
1677 final String name;
1678 TypeVariableType _type;
1679 DartType _bound;
1680 Name _memberName;
1681
1682 SyntheticTypeVariableElementZ(this.typeDeclaration, this.index, this.name);
1683
1684 Name get memberName {
1685 if (_memberName == null) {
1686 _memberName = new Name(name, library);
1687 }
1688 return _memberName;
1689 }
1690
1691 @override
1692 ElementKind get kind => ElementKind.TYPE_VARIABLE;
1693
1694 @override
1695 accept(ElementVisitor visitor, arg) {
1696 return visitor.visitTypeVariableElement(this, arg);
1697 }
1698
1699 @override
1700 CompilationUnitElement get compilationUnit {
1701 return typeDeclaration.compilationUnit;
1702 }
1703
1704 @override
1705 TypeVariableType get type {
1706 assert(invariant(this, _type != null,
1707 message: "Type variable type has not been set on $this."));
1708 return _type;
1709 }
1710
1711 @override
1712 TypeVariableType computeType(Resolution resolution) => type;
1713
1714 @override
1715 Element get enclosingElement => typeDeclaration;
1716
1717 @override
1718 Element get enclosingClass => typeDeclaration;
1719
1720 DartType get bound {
1721 assert(invariant(this, _bound != null,
1722 message: "Type variable bound has not been set on $this."));
1723 return _bound;
1724 }
1725
1726 @override
1727 LibraryElement get library => typeDeclaration.library;
1728
1729 @override
1730 SourceSpan get sourcePosition => typeDeclaration.sourcePosition;
1731 }
1732
1414 class ParameterElementZ extends DeserializedElementZ 1733 class ParameterElementZ extends DeserializedElementZ
1415 with AnalyzableElementMixin, 1734 with AnalyzableElementMixin,
1416 AstElementMixin, 1735 AstElementMixin,
1417 TypedElementMixin 1736 TypedElementMixin
1418 implements ParameterElement { 1737 implements ParameterElement {
1419 FunctionElement _functionDeclaration; 1738 FunctionElement _functionDeclaration;
1420 ConstantExpression _constant; 1739 ConstantExpression _constant;
1421 DartType _type; 1740 DartType _type;
1422 1741
1423 ParameterElementZ(ObjectDecoder decoder) : super(decoder); 1742 ParameterElementZ(ObjectDecoder decoder) : super(decoder);
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1633 } 1952 }
1634 1953
1635 @override 1954 @override
1636 ElementKind get kind => ElementKind.PREFIX; 1955 ElementKind get kind => ElementKind.PREFIX;
1637 1956
1638 @override 1957 @override
1639 Element lookupLocalMember(String memberName) { 1958 Element lookupLocalMember(String memberName) {
1640 return _unsupported('lookupLocalMember'); 1959 return _unsupported('lookupLocalMember');
1641 } 1960 }
1642 } 1961 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/serialization/keys.dart ('k') | pkg/compiler/lib/src/serialization/serialization.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698