| 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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 final List<UnlinkedPrefixBuilder> prefixes = <UnlinkedPrefixBuilder>[]; | 73 final List<UnlinkedPrefixBuilder> prefixes = <UnlinkedPrefixBuilder>[]; |
| 74 | 74 |
| 75 /** | 75 /** |
| 76 * Map from [Element] to the index of the entry in the "references table" | 76 * Map from [Element] to the index of the entry in the "references table" |
| 77 * that refers to it. | 77 * that refers to it. |
| 78 */ | 78 */ |
| 79 final Map<Element, int> referenceMap = <Element, int>{}; | 79 final Map<Element, int> referenceMap = <Element, int>{}; |
| 80 | 80 |
| 81 /** | 81 /** |
| 82 * The unlinked portion of the "references table". This is the list of | 82 * The unlinked portion of the "references table". This is the list of |
| 83 * objects which should be written to [UnlinkedLibrary.references]. | 83 * objects which should be written to [UnlinkedUnit.references]. |
| 84 */ | 84 */ |
| 85 final List<UnlinkedReferenceBuilder> unlinkedReferences = | 85 List<UnlinkedReferenceBuilder> unlinkedReferences; |
| 86 <UnlinkedReferenceBuilder>[]; | |
| 87 | 86 |
| 88 /** | 87 /** |
| 89 * The prelinked portion of the "references table". This is the list of | 88 * The prelinked portion of the "references table". This is the list of |
| 90 * objects which should be written to [PrelinkedLibrary.references]. | 89 * objects which should be written to [PrelinkedUnit.references]. |
| 91 */ | 90 */ |
| 92 final List<PrelinkedReferenceBuilder> prelinkedReferences = | 91 List<PrelinkedReferenceBuilder> prelinkedReferences; |
| 93 <PrelinkedReferenceBuilder>[]; | |
| 94 | 92 |
| 95 //final Map<String, int> prefixIndices = <String, int>{}; | 93 //final Map<String, int> prefixIndices = <String, int>{}; |
| 96 | 94 |
| 97 /** | 95 /** |
| 98 * Index into the "references table" representing `dynamic`, if such an index | 96 * Index into the "references table" representing `dynamic`, if such an index |
| 99 * exists. `null` if no such entry has been made in the references table | 97 * exists. `null` if no such entry has been made in the references table |
| 100 * yet. | 98 * yet. |
| 101 */ | 99 */ |
| 102 int dynamicReferenceIndex = null; | 100 int dynamicReferenceIndex = null; |
| 103 | 101 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 if (libraryElement.name.isNotEmpty) { | 147 if (libraryElement.name.isNotEmpty) { |
| 150 b.libraryName = libraryElement.name; | 148 b.libraryName = libraryElement.name; |
| 151 } | 149 } |
| 152 b.exports = libraryElement.exports.map(serializeExport).toList(); | 150 b.exports = libraryElement.exports.map(serializeExport).toList(); |
| 153 b.imports = libraryElement.imports.map(serializeImport).toList(); | 151 b.imports = libraryElement.imports.map(serializeImport).toList(); |
| 154 b.parts = libraryElement.parts | 152 b.parts = libraryElement.parts |
| 155 .map( | 153 .map( |
| 156 (CompilationUnitElement e) => encodeUnlinkedPart(ctx, uri: e.uri)) | 154 (CompilationUnitElement e) => encodeUnlinkedPart(ctx, uri: e.uri)) |
| 157 .toList(); | 155 .toList(); |
| 158 } | 156 } |
| 157 unlinkedReferences = <UnlinkedReferenceBuilder>[]; |
| 158 prelinkedReferences = <PrelinkedReferenceBuilder>[]; |
| 159 b.classes = element.types.map(serializeClass).toList(); | 159 b.classes = element.types.map(serializeClass).toList(); |
| 160 b.enums = element.enums.map(serializeEnum).toList(); | 160 b.enums = element.enums.map(serializeEnum).toList(); |
| 161 b.typedefs = element.functionTypeAliases.map(serializeTypedef).toList(); | 161 b.typedefs = element.functionTypeAliases.map(serializeTypedef).toList(); |
| 162 List<UnlinkedExecutableBuilder> executables = | 162 List<UnlinkedExecutableBuilder> executables = |
| 163 element.functions.map(serializeExecutable).toList(); | 163 element.functions.map(serializeExecutable).toList(); |
| 164 for (PropertyAccessorElement accessor in element.accessors) { | 164 for (PropertyAccessorElement accessor in element.accessors) { |
| 165 if (!accessor.isSynthetic) { | 165 if (!accessor.isSynthetic) { |
| 166 executables.add(serializeExecutable(accessor)); | 166 executables.add(serializeExecutable(accessor)); |
| 167 } | 167 } |
| 168 } | 168 } |
| 169 b.executables = executables; | 169 b.executables = executables; |
| 170 List<UnlinkedVariableBuilder> variables = <UnlinkedVariableBuilder>[]; | 170 List<UnlinkedVariableBuilder> variables = <UnlinkedVariableBuilder>[]; |
| 171 for (PropertyAccessorElement accessor in element.accessors) { | 171 for (PropertyAccessorElement accessor in element.accessors) { |
| 172 if (accessor.isSynthetic && accessor.isGetter) { | 172 if (accessor.isSynthetic && accessor.isGetter) { |
| 173 PropertyInducingElement variable = accessor.variable; | 173 PropertyInducingElement variable = accessor.variable; |
| 174 if (variable != null) { | 174 if (variable != null) { |
| 175 assert(!variable.isSynthetic); | 175 assert(!variable.isSynthetic); |
| 176 variables.add(serializeVariable(variable)); | 176 variables.add(serializeVariable(variable)); |
| 177 } | 177 } |
| 178 } | 178 } |
| 179 } | 179 } |
| 180 b.variables = variables; | 180 b.variables = variables; |
| 181 units.add(encodePrelinkedUnit(ctx, unlinked: b)); | 181 b.references = unlinkedReferences; |
| 182 units.add( |
| 183 encodePrelinkedUnit(ctx, unlinked: b, references: prelinkedReferences)); |
| 184 unlinkedReferences = null; |
| 185 prelinkedReferences = null; |
| 182 } | 186 } |
| 183 | 187 |
| 184 /** | 188 /** |
| 185 * Add [exportedLibrary] (and the transitive closure of all libraries it | 189 * Add [exportedLibrary] (and the transitive closure of all libraries it |
| 186 * exports) to the dependency table ([PrelinkedLibrary.dependencies]). | 190 * exports) to the dependency table ([PrelinkedLibrary.dependencies]). |
| 187 */ | 191 */ |
| 188 void addTransitiveExportClosure(LibraryElement exportedLibrary) { | 192 void addTransitiveExportClosure(LibraryElement exportedLibrary) { |
| 189 if (librariesAddedToTransitiveExportClosure.add(exportedLibrary)) { | 193 if (librariesAddedToTransitiveExportClosure.add(exportedLibrary)) { |
| 190 serializeDependency(exportedLibrary); | 194 serializeDependency(exportedLibrary); |
| 191 for (LibraryElement transitiveExport | 195 for (LibraryElement transitiveExport |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 * called exactly once for each instance of [_LibrarySerializer]. | 417 * called exactly once for each instance of [_LibrarySerializer]. |
| 414 */ | 418 */ |
| 415 PrelinkedLibraryBuilder serializeLibrary() { | 419 PrelinkedLibraryBuilder serializeLibrary() { |
| 416 UnlinkedLibraryBuilder ub = new UnlinkedLibraryBuilder(ctx); | 420 UnlinkedLibraryBuilder ub = new UnlinkedLibraryBuilder(ctx); |
| 417 PrelinkedLibraryBuilder pb = new PrelinkedLibraryBuilder(ctx); | 421 PrelinkedLibraryBuilder pb = new PrelinkedLibraryBuilder(ctx); |
| 418 addCompilationUnitElements(libraryElement.definingCompilationUnit, 0); | 422 addCompilationUnitElements(libraryElement.definingCompilationUnit, 0); |
| 419 for (int i = 0; i < libraryElement.parts.length; i++) { | 423 for (int i = 0; i < libraryElement.parts.length; i++) { |
| 420 addCompilationUnitElements(libraryElement.parts[i], i + 1); | 424 addCompilationUnitElements(libraryElement.parts[i], i + 1); |
| 421 } | 425 } |
| 422 ub.prefixes = prefixes; | 426 ub.prefixes = prefixes; |
| 423 ub.references = unlinkedReferences; | |
| 424 pb.units = units; | 427 pb.units = units; |
| 425 pb.unlinked = ub; | 428 pb.unlinked = ub; |
| 426 pb.dependencies = dependencies; | 429 pb.dependencies = dependencies; |
| 427 pb.importDependencies = prelinkedImports; | 430 pb.importDependencies = prelinkedImports; |
| 428 pb.references = prelinkedReferences; | |
| 429 return pb; | 431 return pb; |
| 430 } | 432 } |
| 431 | 433 |
| 432 /** | 434 /** |
| 433 * Serialize the given [parameter] into an [UnlinkedParam]. | 435 * Serialize the given [parameter] into an [UnlinkedParam]. |
| 434 */ | 436 */ |
| 435 UnlinkedParamBuilder serializeParam(ParameterElement parameter) { | 437 UnlinkedParamBuilder serializeParam(ParameterElement parameter) { |
| 436 UnlinkedParamBuilder b = new UnlinkedParamBuilder(ctx); | 438 UnlinkedParamBuilder b = new UnlinkedParamBuilder(ctx); |
| 437 b.name = parameter.name; | 439 b.name = parameter.name; |
| 438 switch (parameter.parameterKind) { | 440 switch (parameter.parameterKind) { |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(ctx); | 573 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(ctx); |
| 572 b.name = variable.name; | 574 b.name = variable.name; |
| 573 b.type = serializeTypeRef(variable.type, variable); | 575 b.type = serializeTypeRef(variable.type, variable); |
| 574 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; | 576 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; |
| 575 b.isFinal = variable.isFinal; | 577 b.isFinal = variable.isFinal; |
| 576 b.isConst = variable.isConst; | 578 b.isConst = variable.isConst; |
| 577 b.hasImplicitType = variable.hasImplicitType; | 579 b.hasImplicitType = variable.hasImplicitType; |
| 578 return b; | 580 return b; |
| 579 } | 581 } |
| 580 } | 582 } |
| OLD | NEW |