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

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

Issue 2991753002: Add export dependencies to Kernel libraries and use them to resynthesize ExportElement(s) in Analyz… (Closed)
Patch Set: Extract exportedLibrary. 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 f8ef863f12c058c5776282ae60d78d6b802c422a..5e4dd8cf752a5b8bb9a4d77c61de513ac018c146 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -4293,6 +4293,11 @@ class ExportElementImpl extends UriReferencedElementImpl
final UnlinkedExportNonPublic _unlinkedExportNonPublic;
/**
+ * The kernel of the element.
+ */
+ final kernel.LibraryDependency _kernel;
+
+ /**
* The library that is exported from this library by this export directive.
*/
LibraryElement _exportedLibrary;
@@ -4314,14 +4319,24 @@ class ExportElementImpl extends UriReferencedElementImpl
ExportElementImpl(int offset)
: _unlinkedExportPublic = null,
_unlinkedExportNonPublic = null,
+ _kernel = null,
super(null, offset);
/**
+ * Initialize using the given kernel.
+ */
+ ExportElementImpl.forKernel(LibraryElementImpl enclosingLibrary, this._kernel)
+ : _unlinkedExportPublic = null,
+ _unlinkedExportNonPublic = null,
+ super.forSerialized(enclosingLibrary);
+
+ /**
* Initialize using the given serialized information.
*/
ExportElementImpl.forSerialized(this._unlinkedExportPublic,
this._unlinkedExportNonPublic, LibraryElementImpl enclosingLibrary)
- : super.forSerialized(enclosingLibrary);
+ : _kernel = null,
+ super.forSerialized(enclosingLibrary);
@override
List<NamespaceCombinator> get combinators {
@@ -4339,9 +4354,18 @@ class ExportElementImpl extends UriReferencedElementImpl
@override
LibraryElement get exportedLibrary {
- if (_unlinkedExportNonPublic != null && _exportedLibrary == null) {
- LibraryElementImpl library = enclosingElement as LibraryElementImpl;
- _exportedLibrary = library.resynthesizerContext.buildExportedLibrary(uri);
+ if (_exportedLibrary == null) {
+ if (_kernel != null) {
+ Uri exportedUri = _kernel.targetLibrary.importUri;
+ String exportedUriStr = exportedUri.toString();
+ LibraryElementImpl library = enclosingElement as LibraryElementImpl;
+ _exportedLibrary = library._kernelContext.getLibrary(exportedUriStr);
+ }
+ if (_unlinkedExportNonPublic != null) {
+ LibraryElementImpl library = enclosingElement as LibraryElementImpl;
+ _exportedLibrary =
+ library.resynthesizerContext.buildExportedLibrary(uri);
+ }
}
return _exportedLibrary;
}
@@ -6235,28 +6259,37 @@ class LibraryElementImpl extends ElementImpl implements LibraryElement {
@override
List<ExportElement> get exports {
- if (_unlinkedDefiningUnit != null && _exports == null) {
- List<UnlinkedExportNonPublic> unlinkedNonPublicExports =
- _unlinkedDefiningUnit.exports;
- List<UnlinkedExportPublic> unlinkedPublicExports =
- _unlinkedDefiningUnit.publicNamespace.exports;
- assert(
- _unlinkedDefiningUnit.exports.length == unlinkedPublicExports.length);
- int length = unlinkedNonPublicExports.length;
- if (length != 0) {
- List<ExportElement> exports = new List<ExportElement>();
- for (int i = 0; i < length; i++) {
- UnlinkedExportPublic serializedExportPublic =
- unlinkedPublicExports[i];
- UnlinkedExportNonPublic serializedExportNonPublic =
- unlinkedNonPublicExports[i];
- ExportElementImpl exportElement = new ExportElementImpl.forSerialized(
- serializedExportPublic, serializedExportNonPublic, library);
- exports.add(exportElement);
+ if (_exports == null) {
+ if (_kernelContext != null) {
+ _exports = _kernelContext.library.dependencies
+ .where((k) => k.isExport)
+ .map((k) => new ExportElementImpl.forKernel(this, k))
+ .toList(growable: false);
+ }
+ if (_unlinkedDefiningUnit != null) {
+ List<UnlinkedExportNonPublic> unlinkedNonPublicExports =
+ _unlinkedDefiningUnit.exports;
+ List<UnlinkedExportPublic> unlinkedPublicExports =
+ _unlinkedDefiningUnit.publicNamespace.exports;
+ assert(_unlinkedDefiningUnit.exports.length ==
+ unlinkedPublicExports.length);
+ int length = unlinkedNonPublicExports.length;
+ if (length != 0) {
+ List<ExportElement> exports = new List<ExportElement>();
+ for (int i = 0; i < length; i++) {
+ UnlinkedExportPublic serializedExportPublic =
+ unlinkedPublicExports[i];
+ UnlinkedExportNonPublic serializedExportNonPublic =
+ unlinkedNonPublicExports[i];
+ ExportElementImpl exportElement =
+ new ExportElementImpl.forSerialized(
+ serializedExportPublic, serializedExportNonPublic, library);
+ exports.add(exportElement);
+ }
+ _exports = exports;
+ } else {
+ _exports = const <ExportElement>[];
}
- _exports = exports;
- } else {
- _exports = const <ExportElement>[];
}
}
return _exports ?? const <ExportElement>[];

Powered by Google App Engine
This is Rietveld 408576698