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

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

Issue 2981943002: Resynthesize top-level variables 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
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 756fec6a6a8717a6b4a68f657b9443f85e1d48f3..2cc5df19f557e580d7097ae5892858446e8f03ff 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1588,6 +1588,11 @@ 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);
+ }
if (_unlinkedUnit != null) {
if (_variables == null) {
_explicitTopLevelAccessors ??=
@@ -7114,18 +7119,33 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
final UnlinkedVariable _unlinkedVariable;
/**
+ * The kernel of the element;
+ */
+ final kernel.Field _kernel;
+
+ /**
* Initialize a newly created variable element to have the given [name] and
* [offset].
*/
NonParameterVariableElementImpl(String name, int offset)
: _unlinkedVariable = null,
+ _kernel = null,
super(name, offset);
/**
+ * Initialize using the given kernel.
+ */
+ NonParameterVariableElementImpl.forKernel(
+ ElementImpl enclosingElement, this._kernel)
+ : _unlinkedVariable = null,
+ super.forSerialized(enclosingElement);
+
+ /**
* Initialize a newly created variable element to have the given [name].
*/
NonParameterVariableElementImpl.forNode(Identifier name)
: _unlinkedVariable = null,
+ _kernel = null,
super.forNode(name);
/**
@@ -7133,7 +7153,8 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
*/
NonParameterVariableElementImpl.forSerialized(
this._unlinkedVariable, ElementImpl enclosingElement)
- : super.forSerialized(enclosingElement);
+ : _kernel = null,
+ super.forSerialized(enclosingElement);
@override
int get codeLength {
@@ -7199,6 +7220,9 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
@override
bool get isConst {
+ if (_kernel != null) {
+ return _kernel.isConst;
+ }
if (_unlinkedVariable != null) {
return _unlinkedVariable.isConst;
}
@@ -7213,6 +7237,9 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
@override
bool get isFinal {
+ if (_kernel != null) {
+ return _kernel.isFinal;
+ }
if (_unlinkedVariable != null) {
return _unlinkedVariable.isFinal;
}
@@ -7236,6 +7263,9 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
@override
String get name {
+ if (_kernel != null) {
+ return _kernel.name.name;
+ }
if (_unlinkedVariable != null) {
return _unlinkedVariable.name;
}
@@ -7253,6 +7283,9 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
@override
DartType get type {
+ if (_kernel != null) {
+ return _type ??= enclosingUnit._kernelContext.getType(this, _kernel.type);
+ }
if (_unlinkedVariable != null && _declaredType == null && _type == null) {
_type = enclosingUnit.resynthesizerContext
.resolveLinkedType(this, _unlinkedVariable.inferredTypeSlot);
@@ -8251,6 +8284,18 @@ abstract class PropertyInducingElementImpl
PropertyInducingElementImpl(String name, int offset) : super(name, offset);
/**
+ * Initialize using the given kernel.
+ */
+ PropertyInducingElementImpl.forKernel(
+ ElementImpl enclosingElement, kernel.Field kernel)
+ : super.forKernel(enclosingElement, kernel) {
+ getter = new PropertyAccessorElementImpl_ImplicitGetter(this);
+ if (!isFinal && !isConst) {
+ setter = new PropertyAccessorElementImpl_ImplicitSetter(this);
+ }
+ }
+
+ /**
* Initialize a newly created element to have the given [name].
*/
PropertyInducingElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -8461,6 +8506,13 @@ class TopLevelVariableElementImpl extends PropertyInducingElementImpl
TopLevelVariableElementImpl(String name, int offset) : super(name, offset);
/**
+ * Initialize using the given kernel.
+ */
+ TopLevelVariableElementImpl.forKernel(
+ ElementImpl enclosingElement, kernel.Field kernel)
+ : super.forKernel(enclosingElement, kernel);
+
+ /**
* Initialize a newly created top-level variable element to have the given
* [name].
*/
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/element_text.dart » ('j') | pkg/analyzer/test/src/summary/element_text.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698