OLD | NEW |
---|---|
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library analyzer.src.dart.element.element; | 5 library analyzer.src.dart.element.element; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:math' show min; | 8 import 'dart:math' show min; |
9 | 9 |
10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
(...skipping 3099 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3110 @override | 3110 @override |
3111 int get nameOffset { | 3111 int get nameOffset { |
3112 if (serializedExecutable != null) { | 3112 if (serializedExecutable != null) { |
3113 return serializedExecutable.nameOffset; | 3113 return serializedExecutable.nameOffset; |
3114 } | 3114 } |
3115 return super.nameOffset; | 3115 return super.nameOffset; |
3116 } | 3116 } |
3117 | 3117 |
3118 @override | 3118 @override |
3119 List<ParameterElement> get parameters { | 3119 List<ParameterElement> get parameters { |
3120 if (serializedExecutable != null && _parameters == null) { | |
3121 List<UnlinkedParam> unlinkedParameters = serializedExecutable.parameters; | |
3122 int length = unlinkedParameters.length; | |
3123 if (length != 0) { | |
3124 List<ParameterElementImpl> parameters = | |
3125 new List<ParameterElementImpl>(length); | |
3126 for (int i = 0; i < length; i++) { | |
3127 parameters[i] = new ParameterElementImpl.forSerializedFactory( | |
3128 unlinkedParameters[i], this); | |
3129 } | |
3130 _parameters = parameters; | |
3131 } else { | |
3132 _parameters = const <ParameterElement>[]; | |
3133 } | |
3134 } | |
3120 return _parameters ?? const <ParameterElement>[]; | 3135 return _parameters ?? const <ParameterElement>[]; |
3121 } | 3136 } |
3122 | 3137 |
3123 /** | 3138 /** |
3124 * Set the parameters defined by this executable element to the given | 3139 * Set the parameters defined by this executable element to the given |
3125 * [parameters]. | 3140 * [parameters]. |
3126 */ | 3141 */ |
3127 void set parameters(List<ParameterElement> parameters) { | 3142 void set parameters(List<ParameterElement> parameters) { |
3143 assert(serializedExecutable == null); | |
3128 for (ParameterElement parameter in parameters) { | 3144 for (ParameterElement parameter in parameters) { |
3129 (parameter as ParameterElementImpl).enclosingElement = this; | 3145 (parameter as ParameterElementImpl).enclosingElement = this; |
3130 } | 3146 } |
3131 this._parameters = parameters; | 3147 this._parameters = parameters; |
3132 } | 3148 } |
3133 | 3149 |
3134 @override | 3150 @override |
3135 DartType get returnType { | 3151 DartType get returnType { |
3136 if (serializedExecutable != null && _returnType == null) { | 3152 if (serializedExecutable != null && _returnType == null) { |
3137 bool isSetter = | 3153 bool isSetter = |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3723 * Implementation of [FunctionElementImpl] for a synthetic function element | 3739 * Implementation of [FunctionElementImpl] for a synthetic function element |
3724 * that was synthesized by a LUB computation. | 3740 * that was synthesized by a LUB computation. |
3725 */ | 3741 */ |
3726 class FunctionElementImpl_forLUB extends FunctionElementImpl { | 3742 class FunctionElementImpl_forLUB extends FunctionElementImpl { |
3727 @override | 3743 @override |
3728 final CompilationUnitElementImpl enclosingUnit; | 3744 final CompilationUnitElementImpl enclosingUnit; |
3729 | 3745 |
3730 @override | 3746 @override |
3731 final TypeParameterizedElementMixin enclosingTypeParameterContext; | 3747 final TypeParameterizedElementMixin enclosingTypeParameterContext; |
3732 | 3748 |
3749 final EntityRef _entityRef; | |
3750 | |
3733 FunctionElementImpl_forLUB( | 3751 FunctionElementImpl_forLUB( |
3734 this.enclosingUnit, this.enclosingTypeParameterContext) | 3752 this.enclosingUnit, this.enclosingTypeParameterContext, this._entityRef) |
3735 : super('', -1); | 3753 : super('', -1); |
3736 | 3754 |
3737 @override | 3755 @override |
3738 bool get isSynthetic => true; | 3756 bool get isSynthetic => true; |
3757 | |
3758 @override | |
3759 List<ParameterElement> get parameters { | |
3760 return _parameters ??= _entityRef.syntheticParams | |
3761 .map((UnlinkedParam param) => | |
3762 new ParameterElementImpl.forSerializedFactory(param, this, | |
3763 synthetic: true)) | |
3764 .toList(growable: false); | |
3765 } | |
3766 | |
3767 @override | |
3768 void set parameters(List<ParameterElement> parameters) { | |
3769 assert(false); | |
3770 } | |
3771 | |
3772 @override | |
3773 DartType get returnType { | |
3774 return _returnType ??= enclosingUnit.resynthesizerContext | |
3775 .resolveTypeRef(_entityRef.syntheticReturnType, typeParameterContext); | |
3776 } | |
3777 | |
3778 @override | |
3779 void set returnType(DartType returnType) { | |
3780 assert(false); | |
3781 } | |
3782 | |
3783 @override | |
3784 FunctionType get type { | |
3785 return _type ??= | |
3786 new FunctionTypeImpl.elementWithNameAndArgs(this, null, null, false); | |
3787 } | |
3788 | |
3789 @override | |
3790 void set type(FunctionType type) { | |
3791 assert(false); | |
3792 } | |
3739 } | 3793 } |
3740 | 3794 |
3741 /** | 3795 /** |
3742 * A concrete implementation of a [FunctionTypeAliasElement]. | 3796 * A concrete implementation of a [FunctionTypeAliasElement]. |
3743 */ | 3797 */ |
3744 class FunctionTypeAliasElementImpl extends ElementImpl | 3798 class FunctionTypeAliasElementImpl extends ElementImpl |
3745 with TypeParameterizedElementMixin | 3799 with TypeParameterizedElementMixin |
3746 implements FunctionTypeAliasElement { | 3800 implements FunctionTypeAliasElement { |
3747 /** | 3801 /** |
3748 * The unlinked representation of the type in the summary. | 3802 * The unlinked representation of the type in the summary. |
3749 */ | 3803 */ |
3750 final UnlinkedTypedef _unlinkedTypedef; | 3804 final UnlinkedTypedef _unlinkedTypedef; |
3751 | 3805 |
3752 /** | 3806 /** |
3753 * A list containing all of the parameters defined by this type alias. | 3807 * A list containing all of the parameters defined by this type alias. |
3754 */ | 3808 */ |
3755 List<ParameterElement> _parameters = ParameterElement.EMPTY_LIST; | 3809 List<ParameterElement> _parameters; |
3756 | 3810 |
3757 /** | 3811 /** |
3758 * The return type defined by this type alias. | 3812 * The return type defined by this type alias. |
3759 */ | 3813 */ |
3760 DartType _returnType; | 3814 DartType _returnType; |
3761 | 3815 |
3762 /** | 3816 /** |
3763 * The type of function defined by this type alias. | 3817 * The type of function defined by this type alias. |
3764 */ | 3818 */ |
3765 FunctionType _type; | 3819 FunctionType _type; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3866 | 3920 |
3867 @override | 3921 @override |
3868 int get nameOffset { | 3922 int get nameOffset { |
3869 if (_unlinkedTypedef != null) { | 3923 if (_unlinkedTypedef != null) { |
3870 return _unlinkedTypedef.nameOffset; | 3924 return _unlinkedTypedef.nameOffset; |
3871 } | 3925 } |
3872 return super.nameOffset; | 3926 return super.nameOffset; |
3873 } | 3927 } |
3874 | 3928 |
3875 @override | 3929 @override |
3876 List<ParameterElement> get parameters => _parameters; | 3930 List<ParameterElement> get parameters { |
3931 if (_unlinkedTypedef != null && _parameters == null) { | |
3932 List<UnlinkedParam> unlinkedParameters = _unlinkedTypedef.parameters; | |
3933 int length = unlinkedParameters.length; | |
3934 if (length != 0) { | |
3935 List<ParameterElementImpl> parameters = | |
3936 new List<ParameterElementImpl>(length); | |
3937 for (int i = 0; i < length; i++) { | |
3938 parameters[i] = new ParameterElementImpl.forSerializedFactory( | |
3939 unlinkedParameters[i], this); | |
3940 } | |
3941 _parameters = parameters; | |
3942 } else { | |
3943 _parameters = const <ParameterElement>[]; | |
3944 } | |
3945 } | |
3946 return _parameters ?? const <ParameterElement>[]; | |
Brian Wilkerson
2016/05/27 22:38:15
Seems like I've seen a lot of code with this same
scheglov
2016/05/28 02:00:35
Good point.
Done.
| |
3947 } | |
3877 | 3948 |
3878 /** | 3949 /** |
3879 * Set the parameters defined by this type alias to the given [parameters]. | 3950 * Set the parameters defined by this type alias to the given [parameters]. |
3880 */ | 3951 */ |
3881 void set parameters(List<ParameterElement> parameters) { | 3952 void set parameters(List<ParameterElement> parameters) { |
3953 assert(_unlinkedTypedef == null); | |
3882 if (parameters != null) { | 3954 if (parameters != null) { |
3883 for (ParameterElement parameter in parameters) { | 3955 for (ParameterElement parameter in parameters) { |
3884 (parameter as ParameterElementImpl).enclosingElement = this; | 3956 (parameter as ParameterElementImpl).enclosingElement = this; |
3885 } | 3957 } |
3886 } | 3958 } |
3887 this._parameters = parameters; | 3959 this._parameters = parameters; |
3888 } | 3960 } |
3889 | 3961 |
3890 @override | 3962 @override |
3891 DartType get returnType { | 3963 DartType get returnType { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3976 buffer.write(returnType); | 4048 buffer.write(returnType); |
3977 } | 4049 } |
3978 } | 4050 } |
3979 | 4051 |
3980 @override | 4052 @override |
3981 FunctionTypeAlias computeNode() => | 4053 FunctionTypeAlias computeNode() => |
3982 getNodeMatching((node) => node is FunctionTypeAlias); | 4054 getNodeMatching((node) => node is FunctionTypeAlias); |
3983 | 4055 |
3984 @override | 4056 @override |
3985 ElementImpl getChild(String identifier) { | 4057 ElementImpl getChild(String identifier) { |
3986 for (ParameterElement parameter in _parameters) { | 4058 for (ParameterElement parameter in parameters) { |
3987 ParameterElementImpl parameterImpl = parameter; | 4059 ParameterElementImpl parameterImpl = parameter; |
3988 if (parameterImpl.identifier == identifier) { | 4060 if (parameterImpl.identifier == identifier) { |
3989 return parameterImpl; | 4061 return parameterImpl; |
3990 } | 4062 } |
3991 } | 4063 } |
3992 for (TypeParameterElement typeParameter in _typeParameters) { | 4064 for (TypeParameterElement typeParameter in _typeParameters) { |
3993 TypeParameterElementImpl typeParameterImpl = typeParameter; | 4065 TypeParameterElementImpl typeParameterImpl = typeParameter; |
3994 if (typeParameterImpl.identifier == identifier) { | 4066 if (typeParameterImpl.identifier == identifier) { |
3995 return typeParameterImpl; | 4067 return typeParameterImpl; |
3996 } | 4068 } |
3997 } | 4069 } |
3998 return null; | 4070 return null; |
3999 } | 4071 } |
4000 | 4072 |
4001 @override | 4073 @override |
4002 void visitChildren(ElementVisitor visitor) { | 4074 void visitChildren(ElementVisitor visitor) { |
4003 super.visitChildren(visitor); | 4075 super.visitChildren(visitor); |
4004 safelyVisitChildren(_parameters, visitor); | 4076 safelyVisitChildren(parameters, visitor); |
4005 safelyVisitChildren(_typeParameters, visitor); | 4077 safelyVisitChildren(_typeParameters, visitor); |
4006 } | 4078 } |
4007 } | 4079 } |
4008 | 4080 |
4009 /** | 4081 /** |
4010 * A concrete implementation of a [HideElementCombinator]. | 4082 * A concrete implementation of a [HideElementCombinator]. |
4011 */ | 4083 */ |
4012 class HideElementCombinatorImpl implements HideElementCombinator { | 4084 class HideElementCombinatorImpl implements HideElementCombinator { |
4013 /** | 4085 /** |
4014 * The unlinked representation of the combinator in the summary. | 4086 * The unlinked representation of the combinator in the summary. |
(...skipping 3528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7543 | 7615 |
7544 @override | 7616 @override |
7545 void visitElement(Element element) { | 7617 void visitElement(Element element) { |
7546 int offset = element.nameOffset; | 7618 int offset = element.nameOffset; |
7547 if (offset != -1) { | 7619 if (offset != -1) { |
7548 map[offset] = element; | 7620 map[offset] = element; |
7549 } | 7621 } |
7550 super.visitElement(element); | 7622 super.visitElement(element); |
7551 } | 7623 } |
7552 } | 7624 } |
OLD | NEW |