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

Unified Diff: pkg/analyzer/lib/src/dart/element/element.dart

Issue 2979133002: Resynthesize parameters from Kernel. (Closed)
Patch Set: Created 3 years, 5 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/test/src/summary/resynthesize_kernel_test.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 4c8b9c74ad6bb34f7ba2b0e23ca2c3231ef9a941..ee0739bc5b894bb97ea4835698f69885fd5b40e1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3932,9 +3932,15 @@ abstract class ExecutableElementImpl extends ElementImpl
@override
List<ParameterElement> get parameters {
- if (serializedExecutable != null) {
- _parameters ??= ParameterElementImpl.resynthesizeList(
- serializedExecutable.parameters, this);
+ if (_parameters == null) {
+ if (_kernel != null) {
+ _parameters =
+ ParameterElementImpl.forKernelFunction(this, _kernel.function);
+ }
+ if (serializedExecutable != null) {
+ _parameters = ParameterElementImpl.resynthesizeList(
+ serializedExecutable.parameters, this);
+ }
}
return _parameters ?? const <ParameterElement>[];
}
@@ -7379,6 +7385,11 @@ class ParameterElementImpl extends VariableElementImpl
final UnlinkedParam _unlinkedParam;
/**
+ * The kernel of the element;
+ */
+ final kernel.VariableDeclaration _kernel;
+
+ /**
* A list containing all of the parameters defined by this parameter element.
* There will only be parameters if this parameter is a function typed
* parameter.
@@ -7421,13 +7432,23 @@ class ParameterElementImpl extends VariableElementImpl
*/
ParameterElementImpl(String name, int nameOffset)
: _unlinkedParam = null,
+ _kernel = null,
super(name, nameOffset);
/**
+ * Initialize using the given kernel.
+ */
+ ParameterElementImpl.forKernel(
+ ElementImpl enclosingElement, this._kernel, this._parameterKind)
+ : _unlinkedParam = null,
+ super.forSerialized(enclosingElement);
+
+ /**
* Initialize a newly created parameter element to have the given [name].
*/
ParameterElementImpl.forNode(Identifier name)
: _unlinkedParam = null,
+ _kernel = null,
super.forNode(name);
/**
@@ -7435,7 +7456,8 @@ class ParameterElementImpl extends VariableElementImpl
*/
ParameterElementImpl.forSerialized(
this._unlinkedParam, ElementImpl enclosingElement)
- : super.forSerialized(enclosingElement);
+ : _kernel = null,
+ super.forSerialized(enclosingElement);
/**
* Initialize using the given serialized information.
@@ -7574,6 +7596,9 @@ class ParameterElementImpl extends VariableElementImpl
@override
bool get isConst {
+ if (_kernel != null) {
+ return false;
+ }
if (_unlinkedParam != null) {
return false;
}
@@ -7619,6 +7644,9 @@ class ParameterElementImpl extends VariableElementImpl
@override
bool get isFinal {
+ if (_kernel != null) {
+ return _kernel.isFinal;
+ }
if (_unlinkedParam != null) {
return _unlinkedParam.isFinal;
}
@@ -7654,6 +7682,9 @@ class ParameterElementImpl extends VariableElementImpl
@override
String get name {
+ if (_kernel != null) {
+ return _kernel.name;
+ }
if (_unlinkedParam != null) {
return _unlinkedParam.name;
}
@@ -7677,7 +7708,7 @@ class ParameterElementImpl extends VariableElementImpl
@override
ParameterKind get parameterKind {
- if (_unlinkedParam != null && _parameterKind == null) {
+ if (_parameterKind == null && _unlinkedParam != null) {
Paul Berry 2017/07/17 16:56:32 What's the purpose of swapping these? Consider re
switch (_unlinkedParam.kind) {
case UnlinkedParamKind.named:
_parameterKind = ParameterKind.NAMED;
@@ -7717,6 +7748,9 @@ class ParameterElementImpl extends VariableElementImpl
@override
DartType get type {
+ if (_kernel != null) {
+ return _type ??= enclosingUnit._kernelContext.getType(this, _kernel.type);
+ }
_resynthesizeTypeAndParameters();
return super.type;
}
@@ -7858,6 +7892,32 @@ class ParameterElementImpl extends VariableElementImpl
}
/**
+ * Create and return [ParameterElement]s for the given [function].
+ */
+ static List<ParameterElement> forKernelFunction(
+ ElementImpl enclosingElement, kernel.FunctionNode function) {
+ if (function.positionalParameters.isNotEmpty ||
+ function.namedParameters.isNotEmpty) {
+ var parameters = <ParameterElement>[];
+ for (int i = 0; i < function.positionalParameters.length; i++) {
+ parameters.add(new ParameterElementImpl.forKernel(
+ enclosingElement,
+ function.positionalParameters[i],
+ i < function.requiredParameterCount
+ ? ParameterKind.REQUIRED
+ : ParameterKind.POSITIONAL));
+ }
+ for (var k in function.namedParameters) {
+ parameters.add(new ParameterElementImpl.forKernel(
+ enclosingElement, k, ParameterKind.NAMED));
+ }
+ return parameters;
+ } else {
+ return const <ParameterElement>[];
+ }
+ }
+
+ /**
* Create and return [ParameterElement]s for the given [unlinkedParameters].
*/
static List<ParameterElement> resynthesizeList(
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698