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

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

Issue 2023393003: Move constant expression resynthesis into ConstVariableElement mixin. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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 6ce99401ebb2bfe458052ae9b0d6260aaff4bfa6..25e5ede2c97e483a82d2dd454f38330f0fce49b3 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1665,25 +1665,6 @@ class ConstFieldElementImpl extends FieldElementImpl with ConstVariableElement {
ConstFieldElementImpl.forSerialized(
UnlinkedVariable unlinkedVariable, ElementImpl enclosingElement)
: super.forSerialized(unlinkedVariable, enclosingElement);
-
- @override
- Expression get constantInitializer {
- if (_unlinkedVariable != null) {
- UnlinkedConst defaultValue = _unlinkedVariable.initializer?.bodyExpr;
- if (defaultValue == null) {
- return null;
- }
- return super.constantInitializer ??= enclosingUnit.resynthesizerContext
- .buildExpression(this, defaultValue);
- }
- return super.constantInitializer;
- }
-
- @override
- void set constantInitializer(Expression initializer) {
- assert(_unlinkedVariable == null);
- super.constantInitializer = initializer;
- }
}
/**
@@ -1709,25 +1690,6 @@ class ConstLocalVariableElementImpl extends LocalVariableElementImpl
ConstLocalVariableElementImpl.forSerialized(UnlinkedVariable unlinkedVariable,
ExecutableElementImpl enclosingExecutable)
: super.forSerialized(unlinkedVariable, enclosingExecutable);
-
- @override
- Expression get constantInitializer {
- if (_unlinkedVariable != null) {
- UnlinkedConst defaultValue = _unlinkedVariable.initializer?.bodyExpr;
- if (defaultValue == null) {
- return null;
- }
- return super.constantInitializer ??= enclosingUnit.resynthesizerContext
- .buildExpression(this, defaultValue);
- }
- return super.constantInitializer;
- }
-
- @override
- void set constantInitializer(Expression initializer) {
- assert(_unlinkedVariable == null);
- super.constantInitializer = initializer;
- }
}
/**
@@ -1971,7 +1933,8 @@ class ConstTopLevelVariableElementImpl extends TopLevelVariableElementImpl
*
* This class is not intended to be part of the public API for analyzer.
*/
-abstract class ConstVariableElement implements ConstantEvaluationTarget {
+abstract class ConstVariableElement
+ implements ElementImpl, ConstantEvaluationTarget {
/**
* If this element represents a constant variable, and it has an initializer,
* a copy of the initializer for the constant. Otherwise `null`.
@@ -1981,11 +1944,30 @@ abstract class ConstVariableElement implements ConstantEvaluationTarget {
* in which case there might be some constant variables that lack
* initializers.
*/
- Expression constantInitializer;
+ Expression _constantInitializer;
@override
EvaluationResultImpl evaluationResult;
+ Expression get constantInitializer {
+ if (_constantInitializer == null && _unlinkedConst != null) {
+ _constantInitializer = enclosingUnit.resynthesizerContext
+ .buildExpression(this, _unlinkedConst);
+ }
+ return _constantInitializer;
+ }
+
+ void set constantInitializer(Expression constantInitializer) {
+ assert(_unlinkedConst == null);
+ _constantInitializer = constantInitializer;
+ }
+
+ /**
+ * If this element is resynthesized from the summary, return the unlinked
+ * initializer, otherwise return `null`.
+ */
+ UnlinkedConst get _unlinkedConst;
+
/**
* Return a representation of the value of this variable, forcing the value
* to be computed if it had not previously been computed, or `null` if either
@@ -2024,25 +2006,6 @@ class DefaultFieldFormalParameterElementImpl
DefaultFieldFormalParameterElementImpl.forSerialized(
UnlinkedParam unlinkedParam, ElementImpl enclosingElement)
: super.forSerialized(unlinkedParam, enclosingElement);
-
- @override
- Expression get constantInitializer {
- if (_unlinkedParam != null) {
- UnlinkedConst defaultValue = _unlinkedParam.initializer?.bodyExpr;
- if (defaultValue == null) {
- return null;
- }
- return super.constantInitializer ??= enclosingUnit.resynthesizerContext
- .buildExpression(this, defaultValue);
- }
- return super.constantInitializer;
- }
-
- @override
- void set constantInitializer(Expression initializer) {
- assert(_unlinkedParam == null);
- super.constantInitializer = initializer;
- }
}
/**
@@ -2070,25 +2033,6 @@ class DefaultParameterElementImpl extends ParameterElementImpl
: super.forSerialized(unlinkedParam, enclosingElement);
@override
- Expression get constantInitializer {
- if (_unlinkedParam != null) {
- UnlinkedConst defaultValue = _unlinkedParam.initializer?.bodyExpr;
- if (defaultValue == null) {
- return null;
- }
- return super.constantInitializer ??= enclosingUnit.resynthesizerContext
- .buildExpression(this, defaultValue);
- }
- return super.constantInitializer;
- }
-
- @override
- void set constantInitializer(Expression initializer) {
- assert(_unlinkedParam == null);
- super.constantInitializer = initializer;
- }
-
- @override
DefaultFormalParameter computeNode() =>
getNodeMatching((node) => node is DefaultFormalParameter);
}
@@ -6410,6 +6354,11 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
assert(_unlinkedVariable == null);
_type = type;
}
+
+ /**
+ * Subclasses need this getter, see [ConstVariableElement._unlinkedConst].
+ */
+ UnlinkedConst get _unlinkedConst => _unlinkedVariable?.initializer?.bodyExpr;
}
/**
@@ -6735,6 +6684,11 @@ class ParameterElementImpl extends VariableElementImpl
return new SourceRange(_visibleRangeOffset, _visibleRangeLength);
}
+ /**
+ * Subclasses need this getter, see [ConstVariableElement._unlinkedConst].
+ */
+ UnlinkedConst get _unlinkedConst => _unlinkedParam?.initializer?.bodyExpr;
+
@override
accept(ElementVisitor visitor) => visitor.visitParameterElement(this);
« 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