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

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

Issue 2978113002: Resynthesize literal expressions 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 0c295a4e7bf1c0a870b0df95b4297eef713b36c6..3034b9591f679088e062a1bafa79998b85d1baf1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1613,9 +1613,13 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl
@override
List<TopLevelVariableElement> get topLevelVariables {
if (_kernelContext != null) {
- return _variables ??= _kernelContext.library.fields
- .map((k) => new TopLevelVariableElementImpl.forKernel(this, k))
- .toList(growable: false);
+ return _variables ??= _kernelContext.library.fields.map((k) {
+ if (k.isConst && k.initializer != null) {
+ return new ConstTopLevelVariableElementImpl.forKernel(this, k);
+ } else {
+ return new TopLevelVariableElementImpl.forKernel(this, k);
+ }
+ }).toList(growable: false);
}
if (_unlinkedUnit != null) {
if (_variables == null) {
@@ -2381,6 +2385,13 @@ class ConstTopLevelVariableElementImpl extends TopLevelVariableElementImpl
: super(name, offset);
/**
+ * Initialize using the given kernel.
+ */
+ ConstTopLevelVariableElementImpl.forKernel(
+ ElementImpl enclosingElement, kernel.Field kernel)
+ : super.forKernel(enclosingElement, kernel);
+
+ /**
* Initialize a newly created top-level variable element to have the given
* [name].
*/
@@ -2422,9 +2433,15 @@ abstract class ConstVariableElement
EvaluationResultImpl _evaluationResult;
Expression get constantInitializer {
- if (_constantInitializer == null && _unlinkedConst != null) {
- _constantInitializer = enclosingUnit.resynthesizerContext
- .buildExpression(this, _unlinkedConst);
+ if (_constantInitializer == null) {
+ if (_kernelInitializer != null) {
+ _constantInitializer =
+ enclosingUnit._kernelContext.getExpression(_kernelInitializer);
+ }
+ if (_unlinkedConst != null) {
+ _constantInitializer = enclosingUnit.resynthesizerContext
+ .buildExpression(this, _unlinkedConst);
+ }
}
return _constantInitializer;
}
@@ -2441,6 +2458,12 @@ abstract class ConstVariableElement
}
/**
+ * If this element is resynthesized from Kernel, return the Kernel
+ * initializer, otherwise return `null`.
+ */
+ kernel.Expression get _kernelInitializer;
+
+ /**
* If this element is resynthesized from the summary, return the unlinked
* initializer, otherwise return `null`.
*/
@@ -5668,6 +5691,11 @@ abstract class KernelLibraryResynthesizerContext {
kernel.Library get library;
/**
+ * Return the [Expression] for the given kernel.
+ */
+ Expression getExpression(kernel.Expression expression);
+
+ /**
* Return the [InterfaceType] for the given Kernel [type], or `null` if the
* [type] does not correspond to an [InterfaceType].
*/
@@ -7381,6 +7409,11 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
}
/**
+ * Subclasses need this getter, see [ConstVariableElement._kernelInitializer].
+ */
+ kernel.Expression get _kernelInitializer => _kernel?.initializer;
+
+ /**
* Subclasses need this getter, see [ConstVariableElement._unlinkedConst].
*/
UnlinkedExpr get _unlinkedConst => _unlinkedVariable?.initializer?.bodyExpr;
@@ -7808,6 +7841,11 @@ class ParameterElementImpl extends VariableElementImpl
}
/**
+ * Subclasses need this getter, see [ConstVariableElement._kernelInitializer].
+ */
+ kernel.Expression get _kernelInitializer => _kernel?.initializer;
+
+ /**
* Subclasses need this getter, see [ConstVariableElement._unlinkedConst].
*/
UnlinkedExpr get _unlinkedConst => _unlinkedParam?.initializer?.bodyExpr;
« 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