| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |