| 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 ca7f284106b4cf623d403c55261d78ef57eb12cb..b5682dd18142df2c262691fefe4db34cf4005926 100644
|
| --- a/pkg/analyzer/lib/src/dart/element/element.dart
|
| +++ b/pkg/analyzer/lib/src/dart/element/element.dart
|
| @@ -5502,6 +5502,11 @@ class ImportElementImpl extends ElementImpl implements ImportElement {
|
| final int _linkedDependency;
|
|
|
| /**
|
| + * The kernel of the element.
|
| + */
|
| + final kernel.LibraryDependency _kernel;
|
| +
|
| + /**
|
| * The offset of the prefix of this import in the file that contains the this
|
| * import directive, or `-1` if this import is synthetic.
|
| */
|
| @@ -5531,14 +5536,24 @@ class ImportElementImpl extends ElementImpl implements ImportElement {
|
| ImportElementImpl(int offset)
|
| : _unlinkedImport = null,
|
| _linkedDependency = null,
|
| + _kernel = null,
|
| super(null, offset);
|
|
|
| /**
|
| + * Initialize using the given kernel.
|
| + */
|
| + ImportElementImpl.forKernel(LibraryElementImpl enclosingLibrary, this._kernel)
|
| + : _unlinkedImport = null,
|
| + _linkedDependency = null,
|
| + super.forSerialized(enclosingLibrary);
|
| +
|
| + /**
|
| * Initialize using the given serialized information.
|
| */
|
| ImportElementImpl.forSerialized(this._unlinkedImport, this._linkedDependency,
|
| LibraryElementImpl enclosingLibrary)
|
| - : super.forSerialized(enclosingLibrary);
|
| + : _kernel = null,
|
| + super.forSerialized(enclosingLibrary);
|
|
|
| @override
|
| List<NamespaceCombinator> get combinators {
|
| @@ -5566,6 +5581,14 @@ class ImportElementImpl extends ElementImpl implements ImportElement {
|
|
|
| @override
|
| LibraryElement get importedLibrary {
|
| + if (_kernel != null) {
|
| + if (_importedLibrary == null) {
|
| + Uri importedUri = _kernel.targetLibrary.importUri;
|
| + String importedUriStr = importedUri.toString();
|
| + LibraryElementImpl library = enclosingElement as LibraryElementImpl;
|
| + _importedLibrary = library._kernelContext.getLibrary(importedUriStr);
|
| + }
|
| + }
|
| if (_linkedDependency != null) {
|
| if (_importedLibrary == null) {
|
| LibraryElementImpl library = enclosingElement as LibraryElementImpl;
|
| @@ -5711,6 +5734,11 @@ abstract class KernelLibraryResynthesizerContext {
|
| InterfaceType getInterfaceType(ElementImpl context, kernel.Supertype type);
|
|
|
| /**
|
| + * Return the [LibraryElement] for the given absolute [uriStr].
|
| + */
|
| + LibraryElement getLibrary(String uriStr);
|
| +
|
| + /**
|
| * Return the [DartType] for the given Kernel [type], or `null` if the [type]
|
| * does not correspond to a [DartType].
|
| */
|
| @@ -6091,21 +6119,30 @@ class LibraryElementImpl extends ElementImpl implements LibraryElement {
|
|
|
| @override
|
| List<ImportElement> get imports {
|
| - if (_unlinkedDefiningUnit != null && _imports == null) {
|
| - List<UnlinkedImport> unlinkedImports = _unlinkedDefiningUnit.imports;
|
| - int length = unlinkedImports.length;
|
| - if (length != 0) {
|
| - List<ImportElement> imports = new List<ImportElement>();
|
| - LinkedLibrary linkedLibrary = resynthesizerContext.linkedLibrary;
|
| - for (int i = 0; i < length; i++) {
|
| - int dependency = linkedLibrary.importDependencies[i];
|
| - ImportElementImpl importElement = new ImportElementImpl.forSerialized(
|
| - unlinkedImports[i], dependency, library);
|
| - imports.add(importElement);
|
| + if (_imports == null) {
|
| + if (_kernelContext != null) {
|
| + _imports = _kernelContext.library.dependencies
|
| + .where((k) => k.isImport)
|
| + .map((k) => new ImportElementImpl.forKernel(this, k))
|
| + .toList(growable: false);
|
| + }
|
| + if (_unlinkedDefiningUnit != null) {
|
| + List<UnlinkedImport> unlinkedImports = _unlinkedDefiningUnit.imports;
|
| + int length = unlinkedImports.length;
|
| + if (length != 0) {
|
| + List<ImportElement> imports = new List<ImportElement>();
|
| + LinkedLibrary linkedLibrary = resynthesizerContext.linkedLibrary;
|
| + for (int i = 0; i < length; i++) {
|
| + int dependency = linkedLibrary.importDependencies[i];
|
| + ImportElementImpl importElement =
|
| + new ImportElementImpl.forSerialized(
|
| + unlinkedImports[i], dependency, library);
|
| + imports.add(importElement);
|
| + }
|
| + _imports = imports;
|
| + } else {
|
| + _imports = const <ImportElement>[];
|
| }
|
| - _imports = imports;
|
| - } else {
|
| - _imports = const <ImportElement>[];
|
| }
|
| }
|
| return _imports ?? ImportElement.EMPTY_LIST;
|
|
|