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