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

Side by Side Diff: pkg/analyzer/lib/src/dart/element/element.dart

Issue 2024453002: Resynthesize parameters lazily. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/resynthesize.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/resynthesize.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698