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]. |
*/ |