| 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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |