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

Unified 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: Extract ParameterElementImpl.resynthesizeList(). Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/resynthesize.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/dart/element/element.dart
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 2897282b2b001ec88064d678d5af4b77e3fb30ca..1acac44494f2ed5453356df12c96f94bdbab2708 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3117,6 +3117,10 @@ abstract class ExecutableElementImpl extends ElementImpl
@override
List<ParameterElement> get parameters {
+ if (serializedExecutable != null) {
+ _parameters ??= ParameterElementImpl.resynthesizeList(
+ serializedExecutable.parameters, this);
+ }
return _parameters ?? const <ParameterElement>[];
}
@@ -3125,6 +3129,7 @@ abstract class ExecutableElementImpl extends ElementImpl
* [parameters].
*/
void set parameters(List<ParameterElement> parameters) {
+ assert(serializedExecutable == null);
for (ParameterElement parameter in parameters) {
(parameter as ParameterElementImpl).enclosingElement = this;
}
@@ -3730,12 +3735,47 @@ class FunctionElementImpl_forLUB extends FunctionElementImpl {
@override
final TypeParameterizedElementMixin enclosingTypeParameterContext;
+ final EntityRef _entityRef;
+
FunctionElementImpl_forLUB(
- this.enclosingUnit, this.enclosingTypeParameterContext)
+ this.enclosingUnit, this.enclosingTypeParameterContext, this._entityRef)
: super('', -1);
@override
bool get isSynthetic => true;
+
+ @override
+ List<ParameterElement> get parameters {
+ return _parameters ??= ParameterElementImpl
+ .resynthesizeList(_entityRef.syntheticParams, this, synthetic: true);
+ }
+
+ @override
+ void set parameters(List<ParameterElement> parameters) {
+ assert(false);
+ }
+
+ @override
+ DartType get returnType {
+ return _returnType ??= enclosingUnit.resynthesizerContext
+ .resolveTypeRef(_entityRef.syntheticReturnType, typeParameterContext);
+ }
+
+ @override
+ void set returnType(DartType returnType) {
+ assert(false);
+ }
+
+ @override
+ FunctionType get type {
+ return _type ??=
+ new FunctionTypeImpl.elementWithNameAndArgs(this, null, null, false);
+ }
+
+ @override
+ void set type(FunctionType type) {
+ assert(false);
+ }
}
/**
@@ -3752,7 +3792,7 @@ class FunctionTypeAliasElementImpl extends ElementImpl
/**
* A list containing all of the parameters defined by this type alias.
*/
- List<ParameterElement> _parameters = ParameterElement.EMPTY_LIST;
+ List<ParameterElement> _parameters;
/**
* The return type defined by this type alias.
@@ -3873,12 +3913,19 @@ class FunctionTypeAliasElementImpl extends ElementImpl
}
@override
- List<ParameterElement> get parameters => _parameters;
+ List<ParameterElement> get parameters {
+ if (_unlinkedTypedef != null) {
+ _parameters ??= ParameterElementImpl.resynthesizeList(
+ _unlinkedTypedef.parameters, this);
+ }
+ return _parameters ?? const <ParameterElement>[];
+ }
/**
* Set the parameters defined by this type alias to the given [parameters].
*/
void set parameters(List<ParameterElement> parameters) {
+ assert(_unlinkedTypedef == null);
if (parameters != null) {
for (ParameterElement parameter in parameters) {
(parameter as ParameterElementImpl).enclosingElement = this;
@@ -3983,7 +4030,7 @@ class FunctionTypeAliasElementImpl extends ElementImpl
@override
ElementImpl getChild(String identifier) {
- for (ParameterElement parameter in _parameters) {
+ for (ParameterElement parameter in parameters) {
ParameterElementImpl parameterImpl = parameter;
if (parameterImpl.identifier == identifier) {
return parameterImpl;
@@ -4001,7 +4048,7 @@ class FunctionTypeAliasElementImpl extends ElementImpl
@override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
- safelyVisitChildren(_parameters, visitor);
+ safelyVisitChildren(parameters, visitor);
safelyVisitChildren(_typeParameters, visitor);
}
}
@@ -6354,11 +6401,9 @@ class ParameterElementImpl extends VariableElementImpl
if (!isSynthetic) {
parameterTypeElement.enclosingElement = this;
}
- List<ParameterElement> subParameters = _unlinkedParam.parameters
- .map((UnlinkedParam p) =>
- new ParameterElementImpl.forSerializedFactory(p, this,
- synthetic: isSynthetic))
- .toList(growable: false);
+ List<ParameterElement> subParameters = ParameterElementImpl
+ .resynthesizeList(_unlinkedParam.parameters, this,
+ synthetic: isSynthetic);
if (isSynthetic) {
parameterTypeElement.parameters = subParameters;
} else {
@@ -6380,6 +6425,26 @@ class ParameterElementImpl extends VariableElementImpl
}
}
}
+
+ /**
+ * Create and return [ParameterElement]s for the given [unlinkedParameters].
+ */
+ static List<ParameterElement> resynthesizeList(
+ List<UnlinkedParam> unlinkedParameters, ElementImpl enclosingElement,
+ {bool synthetic: false}) {
+ int length = unlinkedParameters.length;
+ if (length != 0) {
+ List<ParameterElement> parameters = new List<ParameterElement>(length);
+ for (int i = 0; i < length; i++) {
+ parameters[i] = new ParameterElementImpl.forSerializedFactory(
+ unlinkedParameters[i], enclosingElement,
+ synthetic: synthetic);
+ }
+ return parameters;
+ } else {
+ return const <ParameterElement>[];
+ }
+ }
}
/**
« 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