| 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 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 bool get isTopLevel => false; | 755 bool get isTopLevel => false; |
| 756 | 756 |
| 757 @override | 757 @override |
| 758 bool get isStatic => true; | 758 bool get isStatic => true; |
| 759 | 759 |
| 760 @override | 760 @override |
| 761 bool get isClassMember => true; | 761 bool get isClassMember => true; |
| 762 } | 762 } |
| 763 | 763 |
| 764 abstract class TypedElementMixin implements DeserializedElementZ, TypedElement { | 764 abstract class TypedElementMixin implements DeserializedElementZ, TypedElement { |
| 765 DartType _type; | 765 ResolutionDartType _type; |
| 766 | 766 |
| 767 @override | 767 @override |
| 768 DartType get type { | 768 ResolutionDartType get type { |
| 769 if (_type == null) { | 769 if (_type == null) { |
| 770 _type = _decoder.getType(Key.TYPE); | 770 _type = _decoder.getType(Key.TYPE); |
| 771 } | 771 } |
| 772 return _type; | 772 return _type; |
| 773 } | 773 } |
| 774 | 774 |
| 775 @override | 775 @override |
| 776 DartType computeType(Resolution resolution) => type; | 776 ResolutionDartType computeType(Resolution resolution) => type; |
| 777 } | 777 } |
| 778 | 778 |
| 779 abstract class ParametersMixin | 779 abstract class ParametersMixin |
| 780 implements DeserializedElementZ, FunctionTypedElement { | 780 implements DeserializedElementZ, FunctionTypedElement { |
| 781 FunctionSignature _functionSignature; | 781 FunctionSignature _functionSignature; |
| 782 List<ParameterElement> _parameters; | 782 List<ParameterElement> _parameters; |
| 783 | 783 |
| 784 bool get hasFunctionSignature => true; | 784 bool get hasFunctionSignature => true; |
| 785 | 785 |
| 786 @override | 786 @override |
| 787 FunctionSignature get functionSignature { | 787 FunctionSignature get functionSignature { |
| 788 if (_functionSignature == null) { | 788 if (_functionSignature == null) { |
| 789 List<Element> requiredParameters = []; | 789 List<Element> requiredParameters = []; |
| 790 List<Element> optionalParameters = []; | 790 List<Element> optionalParameters = []; |
| 791 List orderedOptionalParameters = []; | 791 List orderedOptionalParameters = []; |
| 792 int requiredParameterCount = 0; | 792 int requiredParameterCount = 0; |
| 793 int optionalParameterCount = 0; | 793 int optionalParameterCount = 0; |
| 794 bool optionalParametersAreNamed = false; | 794 bool optionalParametersAreNamed = false; |
| 795 List<DartType> parameterTypes = <DartType>[]; | 795 List<ResolutionDartType> parameterTypes = <ResolutionDartType>[]; |
| 796 List<DartType> optionalParameterTypes = <DartType>[]; | 796 List<ResolutionDartType> optionalParameterTypes = <ResolutionDartType>[]; |
| 797 for (ParameterElement parameter in parameters) { | 797 for (ParameterElement parameter in parameters) { |
| 798 if (parameter.isOptional) { | 798 if (parameter.isOptional) { |
| 799 optionalParameterCount++; | 799 optionalParameterCount++; |
| 800 optionalParameters.add(parameter); | 800 optionalParameters.add(parameter); |
| 801 orderedOptionalParameters.add(parameter); | 801 orderedOptionalParameters.add(parameter); |
| 802 if (parameter.isNamed) { | 802 if (parameter.isNamed) { |
| 803 optionalParametersAreNamed = true; | 803 optionalParametersAreNamed = true; |
| 804 } else { | 804 } else { |
| 805 optionalParameterTypes.add(parameter.type); | 805 optionalParameterTypes.add(parameter.type); |
| 806 } | 806 } |
| 807 } else { | 807 } else { |
| 808 requiredParameterCount++; | 808 requiredParameterCount++; |
| 809 requiredParameters.add(parameter); | 809 requiredParameters.add(parameter); |
| 810 parameterTypes.add(parameter.type); | 810 parameterTypes.add(parameter.type); |
| 811 } | 811 } |
| 812 } | 812 } |
| 813 List<String> namedParameters = const <String>[]; | 813 List<String> namedParameters = const <String>[]; |
| 814 List<DartType> namedParameterTypes = const <DartType>[]; | 814 List<ResolutionDartType> namedParameterTypes = |
| 815 const <ResolutionDartType>[]; |
| 815 if (optionalParametersAreNamed) { | 816 if (optionalParametersAreNamed) { |
| 816 namedParameters = <String>[]; | 817 namedParameters = <String>[]; |
| 817 namedParameterTypes = <DartType>[]; | 818 namedParameterTypes = <ResolutionDartType>[]; |
| 818 orderedOptionalParameters.sort((Element a, Element b) { | 819 orderedOptionalParameters.sort((Element a, Element b) { |
| 819 return a.name.compareTo(b.name); | 820 return a.name.compareTo(b.name); |
| 820 }); | 821 }); |
| 821 for (ParameterElement parameter in orderedOptionalParameters) { | 822 for (ParameterElement parameter in orderedOptionalParameters) { |
| 822 namedParameters.add(parameter.name); | 823 namedParameters.add(parameter.name); |
| 823 namedParameterTypes.add(parameter.type); | 824 namedParameterTypes.add(parameter.type); |
| 824 } | 825 } |
| 825 } | 826 } |
| 826 List<DartType> typeVariables = | 827 List<ResolutionDartType> typeVariables = |
| 827 _decoder.getTypes(Key.TYPE_VARIABLES, isOptional: true); | 828 _decoder.getTypes(Key.TYPE_VARIABLES, isOptional: true); |
| 828 | 829 |
| 829 FunctionType type = new FunctionType( | 830 ResolutionFunctionType type = new ResolutionFunctionType( |
| 830 this, | 831 this, |
| 831 _decoder.getType(Key.RETURN_TYPE), | 832 _decoder.getType(Key.RETURN_TYPE), |
| 832 parameterTypes, | 833 parameterTypes, |
| 833 optionalParameterTypes, | 834 optionalParameterTypes, |
| 834 namedParameters, | 835 namedParameters, |
| 835 namedParameterTypes); | 836 namedParameterTypes); |
| 836 _functionSignature = new FunctionSignatureX( | 837 _functionSignature = new FunctionSignatureX( |
| 837 typeVariables: typeVariables, | 838 typeVariables: typeVariables, |
| 838 requiredParameters: requiredParameters, | 839 requiredParameters: requiredParameters, |
| 839 requiredParameterCount: requiredParameterCount, | 840 requiredParameterCount: requiredParameterCount, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 859 @override | 860 @override |
| 860 FunctionElement asFunctionElement() => this; | 861 FunctionElement asFunctionElement() => this; |
| 861 | 862 |
| 862 @override | 863 @override |
| 863 bool get isExternal { | 864 bool get isExternal { |
| 864 return _decoder.getBool(Key.IS_EXTERNAL, | 865 return _decoder.getBool(Key.IS_EXTERNAL, |
| 865 isOptional: true, defaultValue: false); | 866 isOptional: true, defaultValue: false); |
| 866 } | 867 } |
| 867 | 868 |
| 868 @override | 869 @override |
| 869 List<DartType> get typeVariables => functionSignature.typeVariables; | 870 List<ResolutionDartType> get typeVariables => functionSignature.typeVariables; |
| 870 } | 871 } |
| 871 | 872 |
| 872 abstract class ClassElementMixin | 873 abstract class ClassElementMixin |
| 873 implements ElementZ, ClassElement, class_members.ClassMemberMixin { | 874 implements ElementZ, ClassElement, class_members.ClassMemberMixin { |
| 874 bool _isResolved = false; | 875 bool _isResolved = false; |
| 875 | 876 |
| 876 InterfaceType _createType(List<DartType> typeArguments) { | 877 ResolutionInterfaceType _createType(List<ResolutionDartType> typeArguments) { |
| 877 return new InterfaceType(this, typeArguments); | 878 return new ResolutionInterfaceType(this, typeArguments); |
| 878 } | 879 } |
| 879 | 880 |
| 880 @override | 881 @override |
| 881 ElementKind get kind => ElementKind.CLASS; | 882 ElementKind get kind => ElementKind.CLASS; |
| 882 | 883 |
| 883 @override | 884 @override |
| 884 bool get hasConstructor => _unsupported('hasConstructor'); | 885 bool get hasConstructor => _unsupported('hasConstructor'); |
| 885 | 886 |
| 886 @override | 887 @override |
| 887 bool get hasIncompleteHierarchy => _unsupported('hasIncompleteHierarchy'); | 888 bool get hasIncompleteHierarchy => _unsupported('hasIncompleteHierarchy'); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 919 } | 920 } |
| 920 | 921 |
| 921 class ClassElementZ extends DeserializedElementZ | 922 class ClassElementZ extends DeserializedElementZ |
| 922 with | 923 with |
| 923 AnalyzableElementMixin, | 924 AnalyzableElementMixin, |
| 924 AstElementMixinZ, | 925 AstElementMixinZ, |
| 925 ClassElementCommon, | 926 ClassElementCommon, |
| 926 class_members.ClassMemberMixin, | 927 class_members.ClassMemberMixin, |
| 927 ContainerMixin, | 928 ContainerMixin, |
| 928 LibraryMemberMixin, | 929 LibraryMemberMixin, |
| 929 TypeDeclarationMixin<InterfaceType>, | 930 TypeDeclarationMixin<ResolutionInterfaceType>, |
| 930 ClassElementMixin | 931 ClassElementMixin |
| 931 implements ClassElement { | 932 implements ClassElement { |
| 932 bool _isObject; | 933 bool _isObject; |
| 933 DartType _supertype; | 934 ResolutionDartType _supertype; |
| 934 OrderedTypeSet _allSupertypesAndSelf; | 935 OrderedTypeSet _allSupertypesAndSelf; |
| 935 Link<DartType> _interfaces; | 936 Link<ResolutionDartType> _interfaces; |
| 936 FunctionType _callType; | 937 ResolutionFunctionType _callType; |
| 937 | 938 |
| 938 ClassElementZ(ObjectDecoder decoder) : super(decoder); | 939 ClassElementZ(ObjectDecoder decoder) : super(decoder); |
| 939 | 940 |
| 940 @override | 941 @override |
| 941 List<DartType> _getTypeVariables() { | 942 List<ResolutionDartType> _getTypeVariables() { |
| 942 return _decoder.getTypes(Key.TYPE_VARIABLES, isOptional: true); | 943 return _decoder.getTypes(Key.TYPE_VARIABLES, isOptional: true); |
| 943 } | 944 } |
| 944 | 945 |
| 945 void _ensureSuperHierarchy() { | 946 void _ensureSuperHierarchy() { |
| 946 if (_interfaces == null) { | 947 if (_interfaces == null) { |
| 947 InterfaceType supertype = | 948 ResolutionInterfaceType supertype = |
| 948 _decoder.getType(Key.SUPERTYPE, isOptional: true); | 949 _decoder.getType(Key.SUPERTYPE, isOptional: true); |
| 949 if (supertype == null) { | 950 if (supertype == null) { |
| 950 _isObject = true; | 951 _isObject = true; |
| 951 _allSupertypesAndSelf = new OrderedTypeSet.singleton(thisType); | 952 _allSupertypesAndSelf = new OrderedTypeSet.singleton(thisType); |
| 952 _interfaces = const Link<DartType>(); | 953 _interfaces = const Link<ResolutionDartType>(); |
| 953 } else { | 954 } else { |
| 954 _isObject = false; | 955 _isObject = false; |
| 955 _interfaces = | 956 _interfaces = |
| 956 toLink(_decoder.getTypes(Key.INTERFACES, isOptional: true)); | 957 toLink(_decoder.getTypes(Key.INTERFACES, isOptional: true)); |
| 957 List<InterfaceType> mixins = | 958 List<ResolutionInterfaceType> mixins = |
| 958 _decoder.getTypes(Key.MIXINS, isOptional: true); | 959 _decoder.getTypes(Key.MIXINS, isOptional: true); |
| 959 for (InterfaceType mixin in mixins) { | 960 for (ResolutionInterfaceType mixin in mixins) { |
| 960 MixinApplicationElement mixinElement = | 961 MixinApplicationElement mixinElement = |
| 961 new UnnamedMixinApplicationElementZ(this, supertype, mixin); | 962 new UnnamedMixinApplicationElementZ(this, supertype, mixin); |
| 962 supertype = mixinElement.thisType | 963 supertype = mixinElement.thisType |
| 963 .subst(typeVariables, mixinElement.typeVariables); | 964 .subst(typeVariables, mixinElement.typeVariables); |
| 964 } | 965 } |
| 965 _supertype = supertype; | 966 _supertype = supertype; |
| 966 _allSupertypesAndSelf = new OrderedTypeSetBuilder(this) | 967 _allSupertypesAndSelf = new OrderedTypeSetBuilder(this) |
| 967 .createOrderedTypeSet(_supertype, _interfaces); | 968 .createOrderedTypeSet(_supertype, _interfaces); |
| 968 _callType = _decoder.getType(Key.CALL_TYPE, isOptional: true); | 969 _callType = _decoder.getType(Key.CALL_TYPE, isOptional: true); |
| 969 } | 970 } |
| 970 } | 971 } |
| 971 } | 972 } |
| 972 | 973 |
| 973 @override | 974 @override |
| 974 accept(ElementVisitor visitor, arg) { | 975 accept(ElementVisitor visitor, arg) { |
| 975 return visitor.visitClassElement(this, arg); | 976 return visitor.visitClassElement(this, arg); |
| 976 } | 977 } |
| 977 | 978 |
| 978 @override | 979 @override |
| 979 DartType get supertype { | 980 ResolutionDartType get supertype { |
| 980 _ensureSuperHierarchy(); | 981 _ensureSuperHierarchy(); |
| 981 return _supertype; | 982 return _supertype; |
| 982 } | 983 } |
| 983 | 984 |
| 984 @override | 985 @override |
| 985 bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT); | 986 bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT); |
| 986 | 987 |
| 987 @override | 988 @override |
| 988 bool get isObject { | 989 bool get isObject { |
| 989 _ensureSuperHierarchy(); | 990 _ensureSuperHierarchy(); |
| 990 return _isObject; | 991 return _isObject; |
| 991 } | 992 } |
| 992 | 993 |
| 993 @override | 994 @override |
| 994 OrderedTypeSet get allSupertypesAndSelf { | 995 OrderedTypeSet get allSupertypesAndSelf { |
| 995 _ensureSuperHierarchy(); | 996 _ensureSuperHierarchy(); |
| 996 return _allSupertypesAndSelf; | 997 return _allSupertypesAndSelf; |
| 997 } | 998 } |
| 998 | 999 |
| 999 @override | 1000 @override |
| 1000 Link<DartType> get interfaces { | 1001 Link<ResolutionDartType> get interfaces { |
| 1001 _ensureSuperHierarchy(); | 1002 _ensureSuperHierarchy(); |
| 1002 return _interfaces; | 1003 return _interfaces; |
| 1003 } | 1004 } |
| 1004 | 1005 |
| 1005 @override | 1006 @override |
| 1006 bool get isProxy => _decoder.getBool(Key.IS_PROXY); | 1007 bool get isProxy => _decoder.getBool(Key.IS_PROXY); |
| 1007 | 1008 |
| 1008 @override | 1009 @override |
| 1009 bool get isInjected => _decoder.getBool(Key.IS_INJECTED); | 1010 bool get isInjected => _decoder.getBool(Key.IS_INJECTED); |
| 1010 | 1011 |
| 1011 @override | 1012 @override |
| 1012 bool get isUnnamedMixinApplication => false; | 1013 bool get isUnnamedMixinApplication => false; |
| 1013 | 1014 |
| 1014 @override | 1015 @override |
| 1015 FunctionType get callType { | 1016 ResolutionFunctionType get callType { |
| 1016 _ensureSuperHierarchy(); | 1017 _ensureSuperHierarchy(); |
| 1017 // TODO(johnniwinther): Why can't this always be computed in ensureResolved? | 1018 // TODO(johnniwinther): Why can't this always be computed in ensureResolved? |
| 1018 return _callType; | 1019 return _callType; |
| 1019 } | 1020 } |
| 1020 } | 1021 } |
| 1021 | 1022 |
| 1022 abstract class MixinApplicationElementMixin | 1023 abstract class MixinApplicationElementMixin |
| 1023 implements ElementZ, MixinApplicationElement { | 1024 implements ElementZ, MixinApplicationElement { |
| 1024 @override | 1025 @override |
| 1025 bool get isMixinApplication => true; | 1026 bool get isMixinApplication => true; |
| 1026 | 1027 |
| 1027 @override | 1028 @override |
| 1028 ClassElement get mixin => mixinType.element; | 1029 ClassElement get mixin => mixinType.element; |
| 1029 } | 1030 } |
| 1030 | 1031 |
| 1031 class NamedMixinApplicationElementZ extends ClassElementZ | 1032 class NamedMixinApplicationElementZ extends ClassElementZ |
| 1032 with MixinApplicationElementMixin { | 1033 with MixinApplicationElementMixin { |
| 1033 Link<Element> _constructors; | 1034 Link<Element> _constructors; |
| 1034 InterfaceType _mixinType; | 1035 ResolutionInterfaceType _mixinType; |
| 1035 | 1036 |
| 1036 NamedMixinApplicationElementZ(ObjectDecoder decoder) : super(decoder); | 1037 NamedMixinApplicationElementZ(ObjectDecoder decoder) : super(decoder); |
| 1037 | 1038 |
| 1038 @override | 1039 @override |
| 1039 InterfaceType get mixinType => _mixinType ??= _decoder.getType(Key.MIXIN); | 1040 ResolutionInterfaceType get mixinType => |
| 1041 _mixinType ??= _decoder.getType(Key.MIXIN); |
| 1040 | 1042 |
| 1041 @override | 1043 @override |
| 1042 ClassElement get subclass => null; | 1044 ClassElement get subclass => null; |
| 1043 } | 1045 } |
| 1044 | 1046 |
| 1045 class UnnamedMixinApplicationElementZ extends ElementZ | 1047 class UnnamedMixinApplicationElementZ extends ElementZ |
| 1046 with | 1048 with |
| 1047 ClassElementCommon, | 1049 ClassElementCommon, |
| 1048 ClassElementMixin, | 1050 ClassElementMixin, |
| 1049 class_members.ClassMemberMixin, | 1051 class_members.ClassMemberMixin, |
| 1050 TypeDeclarationMixin<InterfaceType>, | 1052 TypeDeclarationMixin<ResolutionInterfaceType>, |
| 1051 AnalyzableElementMixin, | 1053 AnalyzableElementMixin, |
| 1052 AstElementMixinZ, | 1054 AstElementMixinZ, |
| 1053 MixinApplicationElementCommon, | 1055 MixinApplicationElementCommon, |
| 1054 MixinApplicationElementMixin { | 1056 MixinApplicationElementMixin { |
| 1055 final String name; | 1057 final String name; |
| 1056 final ClassElement subclass; | 1058 final ClassElement subclass; |
| 1057 final InterfaceType _supertypeBase; | 1059 final ResolutionInterfaceType _supertypeBase; |
| 1058 final InterfaceType _mixinBase; | 1060 final ResolutionInterfaceType _mixinBase; |
| 1059 InterfaceType _supertype; | 1061 ResolutionInterfaceType _supertype; |
| 1060 Link<DartType> _interfaces; | 1062 Link<ResolutionDartType> _interfaces; |
| 1061 OrderedTypeSet _allSupertypesAndSelf; | 1063 OrderedTypeSet _allSupertypesAndSelf; |
| 1062 Link<ConstructorElement> _constructors; | 1064 Link<ConstructorElement> _constructors; |
| 1063 | 1065 |
| 1064 UnnamedMixinApplicationElementZ( | 1066 UnnamedMixinApplicationElementZ(this.subclass, |
| 1065 this.subclass, InterfaceType supertype, InterfaceType mixin) | 1067 ResolutionInterfaceType supertype, ResolutionInterfaceType mixin) |
| 1066 : this._supertypeBase = supertype, | 1068 : this._supertypeBase = supertype, |
| 1067 this._mixinBase = mixin, | 1069 this._mixinBase = mixin, |
| 1068 this.name = "${supertype.name}+${mixin.name}"; | 1070 this.name = "${supertype.name}+${mixin.name}"; |
| 1069 | 1071 |
| 1070 @override | 1072 @override |
| 1071 CompilationUnitElement get compilationUnit => subclass.compilationUnit; | 1073 CompilationUnitElement get compilationUnit => subclass.compilationUnit; |
| 1072 | 1074 |
| 1073 @override | 1075 @override |
| 1074 bool get isTopLevel => true; | 1076 bool get isTopLevel => true; |
| 1075 | 1077 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1092 constructor, ResolvedAstKind.FORWARDING_CONSTRUCTOR); | 1094 constructor, ResolvedAstKind.FORWARDING_CONSTRUCTOR); |
| 1093 builder.addLast(constructor); | 1095 builder.addLast(constructor); |
| 1094 } | 1096 } |
| 1095 } | 1097 } |
| 1096 _constructors = builder.toLink(); | 1098 _constructors = builder.toLink(); |
| 1097 } | 1099 } |
| 1098 return _constructors; | 1100 return _constructors; |
| 1099 } | 1101 } |
| 1100 | 1102 |
| 1101 @override | 1103 @override |
| 1102 List<DartType> _getTypeVariables() { | 1104 List<ResolutionDartType> _getTypeVariables() { |
| 1103 // Create synthetic type variables for the mixin application. | 1105 // Create synthetic type variables for the mixin application. |
| 1104 List<DartType> typeVariables = <DartType>[]; | 1106 List<ResolutionDartType> typeVariables = <ResolutionDartType>[]; |
| 1105 int index = 0; | 1107 int index = 0; |
| 1106 for (TypeVariableType type in subclass.typeVariables) { | 1108 for (ResolutionTypeVariableType type in subclass.typeVariables) { |
| 1107 SyntheticTypeVariableElementZ typeVariableElement = | 1109 SyntheticTypeVariableElementZ typeVariableElement = |
| 1108 new SyntheticTypeVariableElementZ(this, index, type.name); | 1110 new SyntheticTypeVariableElementZ(this, index, type.name); |
| 1109 TypeVariableType typeVariable = new TypeVariableType(typeVariableElement); | 1111 ResolutionTypeVariableType typeVariable = |
| 1112 new ResolutionTypeVariableType(typeVariableElement); |
| 1110 typeVariables.add(typeVariable); | 1113 typeVariables.add(typeVariable); |
| 1111 index++; | 1114 index++; |
| 1112 } | 1115 } |
| 1113 // Setup bounds on the synthetic type variables. | 1116 // Setup bounds on the synthetic type variables. |
| 1114 for (TypeVariableType type in subclass.typeVariables) { | 1117 for (ResolutionTypeVariableType type in subclass.typeVariables) { |
| 1115 TypeVariableType typeVariable = typeVariables[type.element.index]; | 1118 ResolutionTypeVariableType typeVariable = |
| 1119 typeVariables[type.element.index]; |
| 1116 SyntheticTypeVariableElementZ typeVariableElement = typeVariable.element; | 1120 SyntheticTypeVariableElementZ typeVariableElement = typeVariable.element; |
| 1117 typeVariableElement._type = typeVariable; | 1121 typeVariableElement._type = typeVariable; |
| 1118 typeVariableElement._bound = | 1122 typeVariableElement._bound = |
| 1119 type.element.bound.subst(typeVariables, subclass.typeVariables); | 1123 type.element.bound.subst(typeVariables, subclass.typeVariables); |
| 1120 } | 1124 } |
| 1121 return typeVariables; | 1125 return typeVariables; |
| 1122 } | 1126 } |
| 1123 | 1127 |
| 1124 @override | 1128 @override |
| 1125 InterfaceType get supertype { | 1129 ResolutionInterfaceType get supertype { |
| 1126 if (_supertype == null) { | 1130 if (_supertype == null) { |
| 1127 // Substitute the type variables in [_supertypeBase] provided by | 1131 // Substitute the type variables in [_supertypeBase] provided by |
| 1128 // [_subclass] with the type variables in this unnamed mixin application. | 1132 // [_subclass] with the type variables in this unnamed mixin application. |
| 1129 // | 1133 // |
| 1130 // For instance | 1134 // For instance |
| 1131 // class S<S.T> {} | 1135 // class S<S.T> {} |
| 1132 // class M<M.T> {} | 1136 // class M<M.T> {} |
| 1133 // class C<C.T> extends S<C.T> with M<C.T> {} | 1137 // class C<C.T> extends S<C.T> with M<C.T> {} |
| 1134 // the unnamed mixin application should be | 1138 // the unnamed mixin application should be |
| 1135 // abstract class S+M<S+M.T> extends S<S+M.T> implements M<S+M.T> {} | 1139 // abstract class S+M<S+M.T> extends S<S+M.T> implements M<S+M.T> {} |
| 1136 // but the supertype is provided as S<C.T> and we need to substitute S+M.T | 1140 // but the supertype is provided as S<C.T> and we need to substitute S+M.T |
| 1137 // for C.T. | 1141 // for C.T. |
| 1138 _supertype = _supertypeBase.subst(typeVariables, subclass.typeVariables); | 1142 _supertype = _supertypeBase.subst(typeVariables, subclass.typeVariables); |
| 1139 } | 1143 } |
| 1140 return _supertype; | 1144 return _supertype; |
| 1141 } | 1145 } |
| 1142 | 1146 |
| 1143 @override | 1147 @override |
| 1144 Link<DartType> get interfaces { | 1148 Link<ResolutionDartType> get interfaces { |
| 1145 if (_interfaces == null) { | 1149 if (_interfaces == null) { |
| 1146 // Substitute the type variables in [_mixinBase] provided by | 1150 // Substitute the type variables in [_mixinBase] provided by |
| 1147 // [_subclass] with the type variables in this unnamed mixin application. | 1151 // [_subclass] with the type variables in this unnamed mixin application. |
| 1148 // | 1152 // |
| 1149 // For instance | 1153 // For instance |
| 1150 // class S<S.T> {} | 1154 // class S<S.T> {} |
| 1151 // class M<M.T> {} | 1155 // class M<M.T> {} |
| 1152 // class C<C.T> extends S<C.T> with M<C.T> {} | 1156 // class C<C.T> extends S<C.T> with M<C.T> {} |
| 1153 // the unnamed mixin application should be | 1157 // the unnamed mixin application should be |
| 1154 // abstract class S+M<S+M.T> extends S<S+M.T> implements M<S+M.T> {} | 1158 // abstract class S+M<S+M.T> extends S<S+M.T> implements M<S+M.T> {} |
| 1155 // but the mixin is provided as M<C.T> and we need to substitute S+M.T | 1159 // but the mixin is provided as M<C.T> and we need to substitute S+M.T |
| 1156 // for C.T. | 1160 // for C.T. |
| 1157 _interfaces = const Link<DartType>() | 1161 _interfaces = const Link<ResolutionDartType>() |
| 1158 .prepend(_mixinBase.subst(typeVariables, subclass.typeVariables)); | 1162 .prepend(_mixinBase.subst(typeVariables, subclass.typeVariables)); |
| 1159 } | 1163 } |
| 1160 return _interfaces; | 1164 return _interfaces; |
| 1161 } | 1165 } |
| 1162 | 1166 |
| 1163 @override | 1167 @override |
| 1164 accept(ElementVisitor visitor, arg) { | 1168 accept(ElementVisitor visitor, arg) { |
| 1165 return visitor.visitMixinApplicationElement(this, arg); | 1169 return visitor.visitMixinApplicationElement(this, arg); |
| 1166 } | 1170 } |
| 1167 | 1171 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1180 @override | 1184 @override |
| 1181 bool get isObject => false; | 1185 bool get isObject => false; |
| 1182 | 1186 |
| 1183 @override | 1187 @override |
| 1184 bool get isProxy => false; | 1188 bool get isProxy => false; |
| 1185 | 1189 |
| 1186 @override | 1190 @override |
| 1187 LibraryElement get library => enclosingElement.library; | 1191 LibraryElement get library => enclosingElement.library; |
| 1188 | 1192 |
| 1189 @override | 1193 @override |
| 1190 InterfaceType get mixinType => interfaces.head; | 1194 ResolutionInterfaceType get mixinType => interfaces.head; |
| 1191 | 1195 |
| 1192 @override | 1196 @override |
| 1193 int get sourceOffset => subclass.sourceOffset; | 1197 int get sourceOffset => subclass.sourceOffset; |
| 1194 | 1198 |
| 1195 @override | 1199 @override |
| 1196 SourceSpan get sourcePosition => subclass.sourcePosition; | 1200 SourceSpan get sourcePosition => subclass.sourcePosition; |
| 1197 } | 1201 } |
| 1198 | 1202 |
| 1199 class EnumClassElementZ extends ClassElementZ implements EnumClassElement { | 1203 class EnumClassElementZ extends ClassElementZ implements EnumClassElement { |
| 1200 List<FieldElement> _enumValues; | 1204 List<FieldElement> _enumValues; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1293 @override | 1297 @override |
| 1294 bool get isRedirectingFactory => false; | 1298 bool get isRedirectingFactory => false; |
| 1295 | 1299 |
| 1296 @override | 1300 @override |
| 1297 bool get isRedirectingGenerative => false; | 1301 bool get isRedirectingGenerative => false; |
| 1298 | 1302 |
| 1299 @override | 1303 @override |
| 1300 PrefixElement get redirectionDeferredPrefix => null; | 1304 PrefixElement get redirectionDeferredPrefix => null; |
| 1301 | 1305 |
| 1302 @override | 1306 @override |
| 1303 InterfaceType computeEffectiveTargetType(InterfaceType newType) => newType; | 1307 ResolutionInterfaceType computeEffectiveTargetType( |
| 1308 ResolutionInterfaceType newType) => |
| 1309 newType; |
| 1304 } | 1310 } |
| 1305 | 1311 |
| 1306 class GenerativeConstructorElementZ extends ConstructorElementZ { | 1312 class GenerativeConstructorElementZ extends ConstructorElementZ { |
| 1307 GenerativeConstructorElementZ(ObjectDecoder decoder) : super(decoder); | 1313 GenerativeConstructorElementZ(ObjectDecoder decoder) : super(decoder); |
| 1308 | 1314 |
| 1309 @override | 1315 @override |
| 1310 ElementKind get kind => ElementKind.GENERATIVE_CONSTRUCTOR; | 1316 ElementKind get kind => ElementKind.GENERATIVE_CONSTRUCTOR; |
| 1311 | 1317 |
| 1312 @override | 1318 @override |
| 1313 bool get isRedirectingGenerative => _decoder.getBool(Key.IS_REDIRECTING); | 1319 bool get isRedirectingGenerative => _decoder.getBool(Key.IS_REDIRECTING); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1332 } | 1338 } |
| 1333 | 1339 |
| 1334 class FactoryConstructorElementZ extends ConstructorElementZ { | 1340 class FactoryConstructorElementZ extends ConstructorElementZ { |
| 1335 FactoryConstructorElementZ(ObjectDecoder decoder) : super(decoder); | 1341 FactoryConstructorElementZ(ObjectDecoder decoder) : super(decoder); |
| 1336 | 1342 |
| 1337 @override | 1343 @override |
| 1338 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR; | 1344 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR; |
| 1339 } | 1345 } |
| 1340 | 1346 |
| 1341 class RedirectingFactoryConstructorElementZ extends ConstructorElementZ { | 1347 class RedirectingFactoryConstructorElementZ extends ConstructorElementZ { |
| 1342 DartType _effectiveTargetType; | 1348 ResolutionDartType _effectiveTargetType; |
| 1343 ConstructorElement _immediateRedirectionTarget; | 1349 ConstructorElement _immediateRedirectionTarget; |
| 1344 PrefixElement _redirectionDeferredPrefix; | 1350 PrefixElement _redirectionDeferredPrefix; |
| 1345 bool _effectiveTargetIsMalformed; | 1351 bool _effectiveTargetIsMalformed; |
| 1346 | 1352 |
| 1347 RedirectingFactoryConstructorElementZ(ObjectDecoder decoder) : super(decoder); | 1353 RedirectingFactoryConstructorElementZ(ObjectDecoder decoder) : super(decoder); |
| 1348 | 1354 |
| 1349 @override | 1355 @override |
| 1350 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR; | 1356 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR; |
| 1351 | 1357 |
| 1352 @override | 1358 @override |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1373 return _effectiveTargetIsMalformed; | 1379 return _effectiveTargetIsMalformed; |
| 1374 } | 1380 } |
| 1375 | 1381 |
| 1376 @override | 1382 @override |
| 1377 ConstructorElement get effectiveTarget { | 1383 ConstructorElement get effectiveTarget { |
| 1378 _ensureEffectiveTarget(); | 1384 _ensureEffectiveTarget(); |
| 1379 return _effectiveTarget; | 1385 return _effectiveTarget; |
| 1380 } | 1386 } |
| 1381 | 1387 |
| 1382 @override | 1388 @override |
| 1383 DartType computeEffectiveTargetType(InterfaceType newType) { | 1389 ResolutionDartType computeEffectiveTargetType( |
| 1390 ResolutionInterfaceType newType) { |
| 1384 _ensureEffectiveTarget(); | 1391 _ensureEffectiveTarget(); |
| 1385 return _effectiveTargetType.substByContext(newType); | 1392 return _effectiveTargetType.substByContext(newType); |
| 1386 } | 1393 } |
| 1387 | 1394 |
| 1388 void _ensureRedirection() { | 1395 void _ensureRedirection() { |
| 1389 if (_immediateRedirectionTarget == null) { | 1396 if (_immediateRedirectionTarget == null) { |
| 1390 _immediateRedirectionTarget = | 1397 _immediateRedirectionTarget = |
| 1391 _decoder.getElement(Key.IMMEDIATE_REDIRECTION_TARGET); | 1398 _decoder.getElement(Key.IMMEDIATE_REDIRECTION_TARGET); |
| 1392 _redirectionDeferredPrefix = | 1399 _redirectionDeferredPrefix = |
| 1393 _decoder.getElement(Key.PREFIX, isOptional: true); | 1400 _decoder.getElement(Key.PREFIX, isOptional: true); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1425 | 1432 |
| 1426 @override | 1433 @override |
| 1427 accept(ElementVisitor visitor, arg) { | 1434 accept(ElementVisitor visitor, arg) { |
| 1428 return visitor.visitConstructorElement(this, arg); | 1435 return visitor.visitConstructorElement(this, arg); |
| 1429 } | 1436 } |
| 1430 | 1437 |
| 1431 @override | 1438 @override |
| 1432 AsyncMarker get asyncMarker => AsyncMarker.SYNC; | 1439 AsyncMarker get asyncMarker => AsyncMarker.SYNC; |
| 1433 | 1440 |
| 1434 @override | 1441 @override |
| 1435 InterfaceType computeEffectiveTargetType(InterfaceType newType) { | 1442 ResolutionInterfaceType computeEffectiveTargetType( |
| 1443 ResolutionInterfaceType newType) { |
| 1436 return enclosingClass.thisType.substByContext(newType); | 1444 return enclosingClass.thisType.substByContext(newType); |
| 1437 } | 1445 } |
| 1438 | 1446 |
| 1439 @override | 1447 @override |
| 1440 DartType computeType(Resolution resolution) => type; | 1448 ResolutionDartType computeType(Resolution resolution) => type; |
| 1441 | 1449 |
| 1442 @override | 1450 @override |
| 1443 bool get isConst => false; | 1451 bool get isConst => false; |
| 1444 | 1452 |
| 1445 @override | 1453 @override |
| 1446 bool get isClassMember => true; | 1454 bool get isClassMember => true; |
| 1447 | 1455 |
| 1448 @override | 1456 @override |
| 1449 bool get isDefaultConstructor => false; | 1457 bool get isDefaultConstructor => false; |
| 1450 | 1458 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1534 @override | 1542 @override |
| 1535 PrefixElement get redirectionDeferredPrefix => null; | 1543 PrefixElement get redirectionDeferredPrefix => null; |
| 1536 | 1544 |
| 1537 @override | 1545 @override |
| 1538 int get sourceOffset => enclosingClass.sourceOffset; | 1546 int get sourceOffset => enclosingClass.sourceOffset; |
| 1539 | 1547 |
| 1540 @override | 1548 @override |
| 1541 SourceSpan get sourcePosition => enclosingClass.sourcePosition; | 1549 SourceSpan get sourcePosition => enclosingClass.sourcePosition; |
| 1542 | 1550 |
| 1543 @override | 1551 @override |
| 1544 FunctionType get type { | 1552 ResolutionFunctionType get type { |
| 1545 // TODO(johnniwinther): Ensure that the function type substitutes type | 1553 // TODO(johnniwinther): Ensure that the function type substitutes type |
| 1546 // variables correctly. | 1554 // variables correctly. |
| 1547 return definingConstructor.type; | 1555 return definingConstructor.type; |
| 1548 } | 1556 } |
| 1549 | 1557 |
| 1550 @override | 1558 @override |
| 1551 List<DartType> get typeVariables => _unsupported("typeVariables"); | 1559 List<ResolutionDartType> get typeVariables => _unsupported("typeVariables"); |
| 1552 } | 1560 } |
| 1553 | 1561 |
| 1554 abstract class MemberElementMixin | 1562 abstract class MemberElementMixin |
| 1555 implements DeserializedElementZ, MemberElement { | 1563 implements DeserializedElementZ, MemberElement { |
| 1556 final List<FunctionElement> nestedClosures = <FunctionElement>[]; | 1564 final List<FunctionElement> nestedClosures = <FunctionElement>[]; |
| 1557 | 1565 |
| 1558 @override | 1566 @override |
| 1559 MemberElement get memberContext => this; | 1567 MemberElement get memberContext => this; |
| 1560 | 1568 |
| 1561 @override | 1569 @override |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1832 StaticSetterElementZ(ObjectDecoder decoder) : super(decoder); | 1840 StaticSetterElementZ(ObjectDecoder decoder) : super(decoder); |
| 1833 } | 1841 } |
| 1834 | 1842 |
| 1835 class InstanceSetterElementZ extends SetterElementZ | 1843 class InstanceSetterElementZ extends SetterElementZ |
| 1836 with ClassMemberMixin, InstanceMemberMixin { | 1844 with ClassMemberMixin, InstanceMemberMixin { |
| 1837 InstanceSetterElementZ(ObjectDecoder decoder) : super(decoder); | 1845 InstanceSetterElementZ(ObjectDecoder decoder) : super(decoder); |
| 1838 } | 1846 } |
| 1839 | 1847 |
| 1840 abstract class TypeDeclarationMixin<T extends GenericType> | 1848 abstract class TypeDeclarationMixin<T extends GenericType> |
| 1841 implements ElementZ, TypeDeclarationElement { | 1849 implements ElementZ, TypeDeclarationElement { |
| 1842 List<DartType> _typeVariables; | 1850 List<ResolutionDartType> _typeVariables; |
| 1843 T _rawType; | 1851 T _rawType; |
| 1844 T _thisType; | 1852 T _thisType; |
| 1845 Name _memberName; | 1853 Name _memberName; |
| 1846 | 1854 |
| 1847 Name get memberName { | 1855 Name get memberName { |
| 1848 if (_memberName == null) { | 1856 if (_memberName == null) { |
| 1849 _memberName = new Name(name, library); | 1857 _memberName = new Name(name, library); |
| 1850 } | 1858 } |
| 1851 return _memberName; | 1859 return _memberName; |
| 1852 } | 1860 } |
| 1853 | 1861 |
| 1854 List<DartType> _getTypeVariables(); | 1862 List<ResolutionDartType> _getTypeVariables(); |
| 1855 | 1863 |
| 1856 void _ensureTypes() { | 1864 void _ensureTypes() { |
| 1857 if (_typeVariables == null) { | 1865 if (_typeVariables == null) { |
| 1858 _typeVariables = _getTypeVariables(); | 1866 _typeVariables = _getTypeVariables(); |
| 1859 _rawType = _createType(new List<DartType>.filled( | 1867 _rawType = _createType(new List<ResolutionDartType>.filled( |
| 1860 _typeVariables.length, const DynamicType())); | 1868 _typeVariables.length, const ResolutionDynamicType())); |
| 1861 _thisType = _createType(_typeVariables); | 1869 _thisType = _createType(_typeVariables); |
| 1862 } | 1870 } |
| 1863 } | 1871 } |
| 1864 | 1872 |
| 1865 T _createType(List<DartType> typeArguments); | 1873 T _createType(List<ResolutionDartType> typeArguments); |
| 1866 | 1874 |
| 1867 @override | 1875 @override |
| 1868 List<DartType> get typeVariables { | 1876 List<ResolutionDartType> get typeVariables { |
| 1869 _ensureTypes(); | 1877 _ensureTypes(); |
| 1870 return _typeVariables; | 1878 return _typeVariables; |
| 1871 } | 1879 } |
| 1872 | 1880 |
| 1873 @override | 1881 @override |
| 1874 T get rawType { | 1882 T get rawType { |
| 1875 _ensureTypes(); | 1883 _ensureTypes(); |
| 1876 return _rawType; | 1884 return _rawType; |
| 1877 } | 1885 } |
| 1878 | 1886 |
| 1879 @override | 1887 @override |
| 1880 T get thisType { | 1888 T get thisType { |
| 1881 _ensureTypes(); | 1889 _ensureTypes(); |
| 1882 return _thisType; | 1890 return _thisType; |
| 1883 } | 1891 } |
| 1884 | 1892 |
| 1885 @override | 1893 @override |
| 1886 T computeType(Resolution resolution) => thisType; | 1894 T computeType(Resolution resolution) => thisType; |
| 1887 | 1895 |
| 1888 @override | 1896 @override |
| 1889 bool get isResolved => true; | 1897 bool get isResolved => true; |
| 1890 } | 1898 } |
| 1891 | 1899 |
| 1892 class TypedefElementZ extends DeserializedElementZ | 1900 class TypedefElementZ extends DeserializedElementZ |
| 1893 with | 1901 with |
| 1894 AnalyzableElementMixin, | 1902 AnalyzableElementMixin, |
| 1895 AstElementMixinZ, | 1903 AstElementMixinZ, |
| 1896 LibraryMemberMixin, | 1904 LibraryMemberMixin, |
| 1897 ParametersMixin, | 1905 ParametersMixin, |
| 1898 TypeDeclarationMixin<TypedefType> | 1906 TypeDeclarationMixin<ResolutionTypedefType> |
| 1899 implements TypedefElement { | 1907 implements TypedefElement { |
| 1900 DartType _alias; | 1908 ResolutionDartType _alias; |
| 1901 | 1909 |
| 1902 TypedefElementZ(ObjectDecoder decoder) : super(decoder); | 1910 TypedefElementZ(ObjectDecoder decoder) : super(decoder); |
| 1903 | 1911 |
| 1904 TypedefType _createType(List<DartType> typeArguments) { | 1912 ResolutionTypedefType _createType(List<ResolutionDartType> typeArguments) { |
| 1905 return new TypedefType(this, typeArguments); | 1913 return new ResolutionTypedefType(this, typeArguments); |
| 1906 } | 1914 } |
| 1907 | 1915 |
| 1908 @override | 1916 @override |
| 1909 List<DartType> _getTypeVariables() { | 1917 List<ResolutionDartType> _getTypeVariables() { |
| 1910 return _decoder.getTypes(Key.TYPE_VARIABLES, isOptional: true); | 1918 return _decoder.getTypes(Key.TYPE_VARIABLES, isOptional: true); |
| 1911 } | 1919 } |
| 1912 | 1920 |
| 1913 @override | 1921 @override |
| 1914 ElementKind get kind => ElementKind.TYPEDEF; | 1922 ElementKind get kind => ElementKind.TYPEDEF; |
| 1915 | 1923 |
| 1916 @override | 1924 @override |
| 1917 accept(ElementVisitor visitor, arg) { | 1925 accept(ElementVisitor visitor, arg) { |
| 1918 return visitor.visitTypedefElement(this, arg); | 1926 return visitor.visitTypedefElement(this, arg); |
| 1919 } | 1927 } |
| 1920 | 1928 |
| 1921 @override | 1929 @override |
| 1922 DartType get alias { | 1930 ResolutionDartType get alias { |
| 1923 if (_alias == null) { | 1931 if (_alias == null) { |
| 1924 _alias = _decoder.getType(Key.ALIAS); | 1932 _alias = _decoder.getType(Key.ALIAS); |
| 1925 } | 1933 } |
| 1926 return _alias; | 1934 return _alias; |
| 1927 } | 1935 } |
| 1928 | 1936 |
| 1929 @override | 1937 @override |
| 1930 void ensureResolved(Resolution resolution) {} | 1938 void ensureResolved(Resolution resolution) {} |
| 1931 | 1939 |
| 1932 @override | 1940 @override |
| 1933 void checkCyclicReference(Resolution resolution) {} | 1941 void checkCyclicReference(Resolution resolution) {} |
| 1934 } | 1942 } |
| 1935 | 1943 |
| 1936 class TypeVariableElementZ extends DeserializedElementZ | 1944 class TypeVariableElementZ extends DeserializedElementZ |
| 1937 with AnalyzableElementMixin, AstElementMixinZ, TypedElementMixin | 1945 with AnalyzableElementMixin, AstElementMixinZ, TypedElementMixin |
| 1938 implements TypeVariableElement { | 1946 implements TypeVariableElement { |
| 1939 GenericElement _typeDeclaration; | 1947 GenericElement _typeDeclaration; |
| 1940 TypeVariableType _type; | 1948 ResolutionTypeVariableType _type; |
| 1941 DartType _bound; | 1949 ResolutionDartType _bound; |
| 1942 Name _memberName; | 1950 Name _memberName; |
| 1943 | 1951 |
| 1944 TypeVariableElementZ(ObjectDecoder decoder) : super(decoder); | 1952 TypeVariableElementZ(ObjectDecoder decoder) : super(decoder); |
| 1945 | 1953 |
| 1946 Name get memberName { | 1954 Name get memberName { |
| 1947 if (_memberName == null) { | 1955 if (_memberName == null) { |
| 1948 _memberName = new Name(name, library); | 1956 _memberName = new Name(name, library); |
| 1949 } | 1957 } |
| 1950 return _memberName; | 1958 return _memberName; |
| 1951 } | 1959 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1973 int get index => _decoder.getInt(Key.INDEX); | 1981 int get index => _decoder.getInt(Key.INDEX); |
| 1974 | 1982 |
| 1975 @override | 1983 @override |
| 1976 GenericElement get typeDeclaration { | 1984 GenericElement get typeDeclaration { |
| 1977 if (_typeDeclaration == null) { | 1985 if (_typeDeclaration == null) { |
| 1978 _typeDeclaration = _decoder.getElement(Key.TYPE_DECLARATION); | 1986 _typeDeclaration = _decoder.getElement(Key.TYPE_DECLARATION); |
| 1979 } | 1987 } |
| 1980 return _typeDeclaration; | 1988 return _typeDeclaration; |
| 1981 } | 1989 } |
| 1982 | 1990 |
| 1983 DartType get bound { | 1991 ResolutionDartType get bound { |
| 1984 if (_bound == null) { | 1992 if (_bound == null) { |
| 1985 _bound = _decoder.getType(Key.BOUND); | 1993 _bound = _decoder.getType(Key.BOUND); |
| 1986 } | 1994 } |
| 1987 return _bound; | 1995 return _bound; |
| 1988 } | 1996 } |
| 1989 | 1997 |
| 1990 @override | 1998 @override |
| 1991 LibraryElement get library => typeDeclaration.library; | 1999 LibraryElement get library => typeDeclaration.library; |
| 1992 } | 2000 } |
| 1993 | 2001 |
| 1994 class SyntheticTypeVariableElementZ extends ElementZ | 2002 class SyntheticTypeVariableElementZ extends ElementZ |
| 1995 with AnalyzableElementMixin, AstElementMixinZ | 2003 with AnalyzableElementMixin, AstElementMixinZ |
| 1996 implements TypeVariableElement { | 2004 implements TypeVariableElement { |
| 1997 final TypeDeclarationElement typeDeclaration; | 2005 final TypeDeclarationElement typeDeclaration; |
| 1998 final int index; | 2006 final int index; |
| 1999 final String name; | 2007 final String name; |
| 2000 TypeVariableType _type; | 2008 ResolutionTypeVariableType _type; |
| 2001 DartType _bound; | 2009 ResolutionDartType _bound; |
| 2002 Name _memberName; | 2010 Name _memberName; |
| 2003 | 2011 |
| 2004 SyntheticTypeVariableElementZ(this.typeDeclaration, this.index, this.name); | 2012 SyntheticTypeVariableElementZ(this.typeDeclaration, this.index, this.name); |
| 2005 | 2013 |
| 2006 Name get memberName { | 2014 Name get memberName { |
| 2007 if (_memberName == null) { | 2015 if (_memberName == null) { |
| 2008 _memberName = new Name(name, library); | 2016 _memberName = new Name(name, library); |
| 2009 } | 2017 } |
| 2010 return _memberName; | 2018 return _memberName; |
| 2011 } | 2019 } |
| 2012 | 2020 |
| 2013 @override | 2021 @override |
| 2014 ElementKind get kind => ElementKind.TYPE_VARIABLE; | 2022 ElementKind get kind => ElementKind.TYPE_VARIABLE; |
| 2015 | 2023 |
| 2016 @override | 2024 @override |
| 2017 accept(ElementVisitor visitor, arg) { | 2025 accept(ElementVisitor visitor, arg) { |
| 2018 return visitor.visitTypeVariableElement(this, arg); | 2026 return visitor.visitTypeVariableElement(this, arg); |
| 2019 } | 2027 } |
| 2020 | 2028 |
| 2021 @override | 2029 @override |
| 2022 CompilationUnitElement get compilationUnit { | 2030 CompilationUnitElement get compilationUnit { |
| 2023 return typeDeclaration.compilationUnit; | 2031 return typeDeclaration.compilationUnit; |
| 2024 } | 2032 } |
| 2025 | 2033 |
| 2026 @override | 2034 @override |
| 2027 TypeVariableType get type { | 2035 ResolutionTypeVariableType get type { |
| 2028 assert(invariant(this, _type != null, | 2036 assert(invariant(this, _type != null, |
| 2029 message: "Type variable type has not been set on $this.")); | 2037 message: "Type variable type has not been set on $this.")); |
| 2030 return _type; | 2038 return _type; |
| 2031 } | 2039 } |
| 2032 | 2040 |
| 2033 @override | 2041 @override |
| 2034 TypeVariableType computeType(Resolution resolution) => type; | 2042 ResolutionTypeVariableType computeType(Resolution resolution) => type; |
| 2035 | 2043 |
| 2036 @override | 2044 @override |
| 2037 Element get enclosingElement => typeDeclaration; | 2045 Element get enclosingElement => typeDeclaration; |
| 2038 | 2046 |
| 2039 @override | 2047 @override |
| 2040 Element get enclosingClass => typeDeclaration; | 2048 Element get enclosingClass => typeDeclaration; |
| 2041 | 2049 |
| 2042 DartType get bound { | 2050 ResolutionDartType get bound { |
| 2043 assert(invariant(this, _bound != null, | 2051 assert(invariant(this, _bound != null, |
| 2044 message: "Type variable bound has not been set on $this.")); | 2052 message: "Type variable bound has not been set on $this.")); |
| 2045 return _bound; | 2053 return _bound; |
| 2046 } | 2054 } |
| 2047 | 2055 |
| 2048 @override | 2056 @override |
| 2049 LibraryElement get library => typeDeclaration.library; | 2057 LibraryElement get library => typeDeclaration.library; |
| 2050 | 2058 |
| 2051 @override | 2059 @override |
| 2052 int get sourceOffset => typeDeclaration.sourceOffset; | 2060 int get sourceOffset => typeDeclaration.sourceOffset; |
| 2053 | 2061 |
| 2054 @override | 2062 @override |
| 2055 SourceSpan get sourcePosition => typeDeclaration.sourcePosition; | 2063 SourceSpan get sourcePosition => typeDeclaration.sourcePosition; |
| 2056 } | 2064 } |
| 2057 | 2065 |
| 2058 abstract class ParameterElementZ extends DeserializedElementZ | 2066 abstract class ParameterElementZ extends DeserializedElementZ |
| 2059 with AnalyzableElementMixin, AstElementMixinZ, TypedElementMixin | 2067 with AnalyzableElementMixin, AstElementMixinZ, TypedElementMixin |
| 2060 implements ParameterElement { | 2068 implements ParameterElement { |
| 2061 FunctionElement _functionDeclaration; | 2069 FunctionElement _functionDeclaration; |
| 2062 ConstantExpression _constant; | 2070 ConstantExpression _constant; |
| 2063 DartType _type; | 2071 ResolutionDartType _type; |
| 2064 | 2072 |
| 2065 ParameterElementZ(ObjectDecoder decoder) : super(decoder); | 2073 ParameterElementZ(ObjectDecoder decoder) : super(decoder); |
| 2066 | 2074 |
| 2067 @override | 2075 @override |
| 2068 bool get isFinal => _decoder.getBool(Key.IS_FINAL); | 2076 bool get isFinal => _decoder.getBool(Key.IS_FINAL); |
| 2069 | 2077 |
| 2070 @override | 2078 @override |
| 2071 bool get isConst => false; | 2079 bool get isConst => false; |
| 2072 | 2080 |
| 2073 @override | 2081 @override |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2120 @override | 2128 @override |
| 2121 bool get isOptional => _decoder.getBool(Key.IS_OPTIONAL); | 2129 bool get isOptional => _decoder.getBool(Key.IS_OPTIONAL); |
| 2122 | 2130 |
| 2123 @override | 2131 @override |
| 2124 LibraryElement get library => executableContext.library; | 2132 LibraryElement get library => executableContext.library; |
| 2125 | 2133 |
| 2126 @override | 2134 @override |
| 2127 MemberElement get memberContext => executableContext.memberContext; | 2135 MemberElement get memberContext => executableContext.memberContext; |
| 2128 | 2136 |
| 2129 @override | 2137 @override |
| 2130 List<DartType> get typeVariables => functionSignature.typeVariables; | 2138 List<ResolutionDartType> get typeVariables => functionSignature.typeVariables; |
| 2131 } | 2139 } |
| 2132 | 2140 |
| 2133 class LocalParameterElementZ extends ParameterElementZ | 2141 class LocalParameterElementZ extends ParameterElementZ |
| 2134 implements LocalParameterElement { | 2142 implements LocalParameterElement { |
| 2135 LocalParameterElementZ(ObjectDecoder decoder) : super(decoder); | 2143 LocalParameterElementZ(ObjectDecoder decoder) : super(decoder); |
| 2136 | 2144 |
| 2137 @override | 2145 @override |
| 2138 accept(ElementVisitor visitor, arg) { | 2146 accept(ElementVisitor visitor, arg) { |
| 2139 return visitor.visitParameterElement(this, arg); | 2147 return visitor.visitParameterElement(this, arg); |
| 2140 } | 2148 } |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2398 } | 2406 } |
| 2399 | 2407 |
| 2400 @override | 2408 @override |
| 2401 Node get node => throw new UnsupportedError('${this}.node'); | 2409 Node get node => throw new UnsupportedError('${this}.node'); |
| 2402 | 2410 |
| 2403 @override | 2411 @override |
| 2404 bool get hasNode => false; | 2412 bool get hasNode => false; |
| 2405 | 2413 |
| 2406 String toString() => 'MetadataAnnotationZ(${constant.toDartText()})'; | 2414 String toString() => 'MetadataAnnotationZ(${constant.toDartText()})'; |
| 2407 } | 2415 } |
| OLD | NEW |