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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library serialization.elements; 5 library serialization.elements;
6 6
7 import 'package:analyzer/dart/element/element.dart'; 7 import 'package:analyzer/dart/element/element.dart';
8 import 'package:analyzer/dart/element/type.dart'; 8 import 'package:analyzer/dart/element/type.dart';
9 import 'package:analyzer/src/dart/element/type.dart'; 9 import 'package:analyzer/src/dart/element/type.dart';
10 import 'package:analyzer/src/generated/resolver.dart'; 10 import 'package:analyzer/src/generated/resolver.dart';
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 UnlinkedUnitBuilder b = new UnlinkedUnitBuilder(); 159 UnlinkedUnitBuilder b = new UnlinkedUnitBuilder();
160 referenceMap.clear(); 160 referenceMap.clear();
161 unlinkedReferences = <UnlinkedReferenceBuilder>[encodeUnlinkedReference()]; 161 unlinkedReferences = <UnlinkedReferenceBuilder>[encodeUnlinkedReference()];
162 prelinkedReferences = <PrelinkedReferenceBuilder>[ 162 prelinkedReferences = <PrelinkedReferenceBuilder>[
163 encodePrelinkedReference(kind: PrelinkedReferenceKind.classOrEnum) 163 encodePrelinkedReference(kind: PrelinkedReferenceKind.classOrEnum)
164 ]; 164 ];
165 List<UnlinkedPublicNameBuilder> names = <UnlinkedPublicNameBuilder>[]; 165 List<UnlinkedPublicNameBuilder> names = <UnlinkedPublicNameBuilder>[];
166 for (PropertyAccessorElement accessor in element.accessors) { 166 for (PropertyAccessorElement accessor in element.accessors) {
167 if (accessor.isPublic) { 167 if (accessor.isPublic) {
168 names.add(encodeUnlinkedPublicName( 168 names.add(encodeUnlinkedPublicName(
169 kind: PrelinkedReferenceKind.other, 169 kind: PrelinkedReferenceKind.topLevelPropertyAccessor,
170 name: accessor.name, 170 name: accessor.name,
171 numTypeParameters: accessor.typeParameters.length)); 171 numTypeParameters: accessor.typeParameters.length));
172 } 172 }
173 } 173 }
174 for (ClassElement cls in element.types) { 174 for (ClassElement cls in element.types) {
175 if (cls.isPublic) { 175 if (cls.isPublic) {
176 names.add(encodeUnlinkedPublicName( 176 names.add(encodeUnlinkedPublicName(
177 kind: PrelinkedReferenceKind.classOrEnum, 177 kind: PrelinkedReferenceKind.classOrEnum,
178 name: cls.name, 178 name: cls.name,
179 numTypeParameters: cls.typeParameters.length)); 179 numTypeParameters: cls.typeParameters.length));
180 } 180 }
181 } 181 }
182 for (ClassElement enm in element.enums) { 182 for (ClassElement enm in element.enums) {
183 if (enm.isPublic) { 183 if (enm.isPublic) {
184 names.add(encodeUnlinkedPublicName( 184 names.add(encodeUnlinkedPublicName(
185 kind: PrelinkedReferenceKind.classOrEnum, name: enm.name)); 185 kind: PrelinkedReferenceKind.classOrEnum, name: enm.name));
186 } 186 }
187 } 187 }
188 for (FunctionElement function in element.functions) { 188 for (FunctionElement function in element.functions) {
189 if (function.isPublic) { 189 if (function.isPublic) {
190 names.add(encodeUnlinkedPublicName( 190 names.add(encodeUnlinkedPublicName(
191 kind: PrelinkedReferenceKind.other, 191 kind: PrelinkedReferenceKind.topLevelFunction,
192 name: function.name, 192 name: function.name,
193 numTypeParameters: function.typeParameters.length)); 193 numTypeParameters: function.typeParameters.length));
194 } 194 }
195 } 195 }
196 for (FunctionTypeAliasElement typedef in element.functionTypeAliases) { 196 for (FunctionTypeAliasElement typedef in element.functionTypeAliases) {
197 if (typedef.isPublic) { 197 if (typedef.isPublic) {
198 names.add(encodeUnlinkedPublicName( 198 names.add(encodeUnlinkedPublicName(
199 kind: PrelinkedReferenceKind.typedef, 199 kind: PrelinkedReferenceKind.typedef,
200 name: typedef.name, 200 name: typedef.name,
201 numTypeParameters: typedef.typeParameters.length)); 201 numTypeParameters: typedef.typeParameters.length));
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 b.uriOffset = exportElement.uriOffset; 492 b.uriOffset = exportElement.uriOffset;
493 b.uriEnd = exportElement.uriEnd; 493 b.uriEnd = exportElement.uriEnd;
494 return b; 494 return b;
495 } 495 }
496 496
497 /** 497 /**
498 * Serialize the given [exportElement] into an [UnlinkedExportPublic]. 498 * Serialize the given [exportElement] into an [UnlinkedExportPublic].
499 */ 499 */
500 UnlinkedExportPublicBuilder serializeExportPublic( 500 UnlinkedExportPublicBuilder serializeExportPublic(
501 ExportElement exportElement) { 501 ExportElement exportElement) {
502 addTransitiveExportClosure(exportElement.exportedLibrary);
502 UnlinkedExportPublicBuilder b = new UnlinkedExportPublicBuilder(); 503 UnlinkedExportPublicBuilder b = new UnlinkedExportPublicBuilder();
503 b.uri = exportElement.uri; 504 b.uri = exportElement.uri;
504 b.combinators = exportElement.combinators.map(serializeCombinator).toList(); 505 b.combinators = exportElement.combinators.map(serializeCombinator).toList();
505 return b; 506 return b;
506 } 507 }
507 508
508 /** 509 /**
509 * Serialize the given [importElement] yielding an [UnlinkedImportBuilder]. 510 * Serialize the given [importElement] yielding an [UnlinkedImportBuilder].
510 * Also, add pre-linked information about it to the [prelinkedImports] list. 511 * Also, add pre-linked information about it to the [prelinkedImports] list.
511 */ 512 */
(...skipping 28 matching lines...) Expand all
540 PrelinkedLibraryBuilder serializeLibrary() { 541 PrelinkedLibraryBuilder serializeLibrary() {
541 computePrefixMap(); 542 computePrefixMap();
542 PrelinkedLibraryBuilder pb = new PrelinkedLibraryBuilder(); 543 PrelinkedLibraryBuilder pb = new PrelinkedLibraryBuilder();
543 addCompilationUnitElements(libraryElement.definingCompilationUnit, 0); 544 addCompilationUnitElements(libraryElement.definingCompilationUnit, 0);
544 for (int i = 0; i < libraryElement.parts.length; i++) { 545 for (int i = 0; i < libraryElement.parts.length; i++) {
545 addCompilationUnitElements(libraryElement.parts[i], i + 1); 546 addCompilationUnitElements(libraryElement.parts[i], i + 1);
546 } 547 }
547 pb.units = prelinkedUnits; 548 pb.units = prelinkedUnits;
548 pb.dependencies = dependencies; 549 pb.dependencies = dependencies;
549 pb.importDependencies = prelinkedImports; 550 pb.importDependencies = prelinkedImports;
551 List<String> exportedNames =
552 libraryElement.exportNamespace.definedNames.keys.toList();
553 exportedNames.sort();
554 List<PrelinkedExportNameBuilder> exportNames =
555 <PrelinkedExportNameBuilder>[];
556 for (String name in exportedNames) {
557 if (libraryElement.publicNamespace.definedNames.containsKey(name)) {
558 continue;
559 }
560 Element element = libraryElement.exportNamespace.get(name);
561 LibraryElement dependentLibrary = element.library;
562 CompilationUnitElement unitElement =
563 element.getAncestor((Element e) => e is CompilationUnitElement);
564 int unit = dependentLibrary.units.indexOf(unitElement);
565 assert(unit != -1);
566 PrelinkedReferenceKind kind;
567 if (element is PropertyAccessorElement) {
568 kind = PrelinkedReferenceKind.topLevelPropertyAccessor;
569 } else if (element is FunctionTypeAliasElement) {
570 kind = PrelinkedReferenceKind.typedef;
571 } else if (element is ClassElement) {
572 kind = PrelinkedReferenceKind.classOrEnum;
573 } else if (element is FunctionElement) {
574 kind = PrelinkedReferenceKind.topLevelFunction;
575 } else {
576 throw new Exception('Unexpected element kind: ${element.runtimeType}');
577 }
578 exportNames.add(encodePrelinkedExportName(
579 name: name,
580 dependency: serializeDependency(dependentLibrary),
581 unit: unit,
582 kind: kind));
583 }
584 pb.exportNames = exportNames;
550 return pb; 585 return pb;
551 } 586 }
552 587
553 /** 588 /**
554 * Serialize the given [parameter] into an [UnlinkedParam]. 589 * Serialize the given [parameter] into an [UnlinkedParam].
555 */ 590 */
556 UnlinkedParamBuilder serializeParam(ParameterElement parameter, 591 UnlinkedParamBuilder serializeParam(ParameterElement parameter,
557 [Element context]) { 592 [Element context]) {
558 context ??= parameter; 593 context ??= parameter;
559 UnlinkedParamBuilder b = new UnlinkedParamBuilder(); 594 UnlinkedParamBuilder b = new UnlinkedParamBuilder();
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 b.nameOffset = variable.nameOffset; 766 b.nameOffset = variable.nameOffset;
732 b.type = serializeTypeRef(variable.type, variable); 767 b.type = serializeTypeRef(variable.type, variable);
733 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; 768 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement;
734 b.isFinal = variable.isFinal; 769 b.isFinal = variable.isFinal;
735 b.isConst = variable.isConst; 770 b.isConst = variable.isConst;
736 b.hasImplicitType = variable.hasImplicitType; 771 b.hasImplicitType = variable.hasImplicitType;
737 b.documentationComment = serializeDocumentation(variable); 772 b.documentationComment = serializeDocumentation(variable);
738 return b; 773 return b;
739 } 774 }
740 } 775 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698