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

Unified Diff: pkg/analyzer/lib/src/summary/summarize_elements.dart

Issue 1589573003: Include the export namespace in the prelinked summary. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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/summary/summarize_elements.dart
diff --git a/pkg/analyzer/lib/src/summary/summarize_elements.dart b/pkg/analyzer/lib/src/summary/summarize_elements.dart
index 0eac9105870c2b1f9a7e16479a27614c8999e83d..b6d42da7d6ece2abe75b2a4dc360cd2b4d04e832 100644
--- a/pkg/analyzer/lib/src/summary/summarize_elements.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_elements.dart
@@ -166,7 +166,7 @@ class _LibrarySerializer {
for (PropertyAccessorElement accessor in element.accessors) {
if (accessor.isPublic) {
names.add(encodeUnlinkedPublicName(
- kind: PrelinkedReferenceKind.other,
+ kind: PrelinkedReferenceKind.topLevelPropertyAccessor,
name: accessor.name,
numTypeParameters: accessor.typeParameters.length));
}
@@ -188,7 +188,7 @@ class _LibrarySerializer {
for (FunctionElement function in element.functions) {
if (function.isPublic) {
names.add(encodeUnlinkedPublicName(
- kind: PrelinkedReferenceKind.other,
+ kind: PrelinkedReferenceKind.topLevelFunction,
name: function.name,
numTypeParameters: function.typeParameters.length));
}
@@ -499,6 +499,7 @@ class _LibrarySerializer {
*/
UnlinkedExportPublicBuilder serializeExportPublic(
ExportElement exportElement) {
+ addTransitiveExportClosure(exportElement.exportedLibrary);
UnlinkedExportPublicBuilder b = new UnlinkedExportPublicBuilder();
b.uri = exportElement.uri;
b.combinators = exportElement.combinators.map(serializeCombinator).toList();
@@ -547,6 +548,40 @@ class _LibrarySerializer {
pb.units = prelinkedUnits;
pb.dependencies = dependencies;
pb.importDependencies = prelinkedImports;
+ List<String> exportedNames =
+ libraryElement.exportNamespace.definedNames.keys.toList();
+ exportedNames.sort();
+ List<PrelinkedExportNameBuilder> exportNames =
+ <PrelinkedExportNameBuilder>[];
+ for (String name in exportedNames) {
+ if (libraryElement.publicNamespace.definedNames.containsKey(name)) {
+ continue;
+ }
+ Element element = libraryElement.exportNamespace.get(name);
+ LibraryElement dependentLibrary = element.library;
+ CompilationUnitElement unitElement =
+ element.getAncestor((Element e) => e is CompilationUnitElement);
+ int unit = dependentLibrary.units.indexOf(unitElement);
+ assert(unit != -1);
+ PrelinkedReferenceKind kind;
+ if (element is PropertyAccessorElement) {
+ kind = PrelinkedReferenceKind.topLevelPropertyAccessor;
+ } else if (element is FunctionTypeAliasElement) {
+ kind = PrelinkedReferenceKind.typedef;
+ } else if (element is ClassElement) {
+ kind = PrelinkedReferenceKind.classOrEnum;
+ } else if (element is FunctionElement) {
+ kind = PrelinkedReferenceKind.topLevelFunction;
+ } else {
+ throw new Exception('Unexpected element kind: ${element.runtimeType}');
+ }
+ exportNames.add(encodePrelinkedExportName(
+ name: name,
+ dependency: serializeDependency(dependentLibrary),
+ unit: unit,
+ kind: kind));
+ }
+ pb.exportNames = exportNames;
return pb;
}

Powered by Google App Engine
This is Rietveld 408576698