| 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 | 86 |
| 87 /** | 87 /** |
| 88 * 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 |
| 89 * objects which should be written to [PrelinkedUnit.references]. | 89 * objects which should be written to [PrelinkedUnit.references]. |
| 90 */ | 90 */ |
| 91 List<PrelinkedReferenceBuilder> prelinkedReferences; | 91 List<PrelinkedReferenceBuilder> prelinkedReferences; |
| 92 | 92 |
| 93 //final Map<String, int> prefixIndices = <String, int>{}; | 93 //final Map<String, int> prefixIndices = <String, int>{}; |
| 94 | 94 |
| 95 /** | 95 /** |
| 96 * Index into the "references table" representing `dynamic`, if such an index | |
| 97 * exists. `null` if no such entry has been made in the references table | |
| 98 * yet. | |
| 99 */ | |
| 100 int dynamicReferenceIndex = null; | |
| 101 | |
| 102 /** | |
| 103 * Index into the "references table" representing an unresolved reference, if | 96 * Index into the "references table" representing an unresolved reference, if |
| 104 * such an index exists. `null` if no such entry has been made in the | 97 * such an index exists. `null` if no such entry has been made in the |
| 105 * references table yet. | 98 * references table yet. |
| 106 */ | 99 */ |
| 107 int unresolvedReferenceIndex = null; | 100 int unresolvedReferenceIndex = null; |
| 108 | 101 |
| 109 /** | 102 /** |
| 110 * Set of libraries which have been seen so far while visiting the transitive | 103 * Set of libraries which have been seen so far while visiting the transitive |
| 111 * closure of exports. | 104 * closure of exports. |
| 112 */ | 105 */ |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 if (libraryElement.name.isNotEmpty) { | 140 if (libraryElement.name.isNotEmpty) { |
| 148 b.libraryName = libraryElement.name; | 141 b.libraryName = libraryElement.name; |
| 149 } | 142 } |
| 150 b.exports = libraryElement.exports.map(serializeExport).toList(); | 143 b.exports = libraryElement.exports.map(serializeExport).toList(); |
| 151 b.imports = libraryElement.imports.map(serializeImport).toList(); | 144 b.imports = libraryElement.imports.map(serializeImport).toList(); |
| 152 b.parts = libraryElement.parts | 145 b.parts = libraryElement.parts |
| 153 .map( | 146 .map( |
| 154 (CompilationUnitElement e) => encodeUnlinkedPart(ctx, uri: e.uri)) | 147 (CompilationUnitElement e) => encodeUnlinkedPart(ctx, uri: e.uri)) |
| 155 .toList(); | 148 .toList(); |
| 156 } | 149 } |
| 157 unlinkedReferences = <UnlinkedReferenceBuilder>[]; | 150 unlinkedReferences = <UnlinkedReferenceBuilder>[ |
| 158 prelinkedReferences = <PrelinkedReferenceBuilder>[]; | 151 encodeUnlinkedReference(ctx) |
| 152 ]; |
| 153 prelinkedReferences = <PrelinkedReferenceBuilder>[ |
| 154 encodePrelinkedReference(ctx, kind: PrelinkedReferenceKind.classOrEnum) |
| 155 ]; |
| 159 b.classes = element.types.map(serializeClass).toList(); | 156 b.classes = element.types.map(serializeClass).toList(); |
| 160 b.enums = element.enums.map(serializeEnum).toList(); | 157 b.enums = element.enums.map(serializeEnum).toList(); |
| 161 b.typedefs = element.functionTypeAliases.map(serializeTypedef).toList(); | 158 b.typedefs = element.functionTypeAliases.map(serializeTypedef).toList(); |
| 162 List<UnlinkedExecutableBuilder> executables = | 159 List<UnlinkedExecutableBuilder> executables = |
| 163 element.functions.map(serializeExecutable).toList(); | 160 element.functions.map(serializeExecutable).toList(); |
| 164 for (PropertyAccessorElement accessor in element.accessors) { | 161 for (PropertyAccessorElement accessor in element.accessors) { |
| 165 if (!accessor.isSynthetic) { | 162 if (!accessor.isSynthetic) { |
| 166 executables.add(serializeExecutable(accessor)); | 163 executables.add(serializeExecutable(accessor)); |
| 167 } | 164 } |
| 168 } | 165 } |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 int index = dependencies.length; | 300 int index = dependencies.length; |
| 304 dependencies.add(encodePrelinkedDependency(ctx, | 301 dependencies.add(encodePrelinkedDependency(ctx, |
| 305 uri: dependentLibrary.source.uri.toString())); | 302 uri: dependentLibrary.source.uri.toString())); |
| 306 return index; | 303 return index; |
| 307 }); | 304 }); |
| 308 } | 305 } |
| 309 | 306 |
| 310 /** | 307 /** |
| 311 * Return the index of the entry in the references table | 308 * Return the index of the entry in the references table |
| 312 * ([UnlinkedLibrary.references] and [PrelinkedLibrary.references]) | 309 * ([UnlinkedLibrary.references] and [PrelinkedLibrary.references]) |
| 313 * representing the pseudo-type `dynamic`. A new entry is added to the table | 310 * representing the pseudo-type `dynamic`. |
| 314 * if necessary to satisfy the request. | |
| 315 */ | 311 */ |
| 316 int serializeDynamicReference() { | 312 int serializeDynamicReference() => 0; |
| 317 if (dynamicReferenceIndex == null) { | |
| 318 assert(unlinkedReferences.length == prelinkedReferences.length); | |
| 319 dynamicReferenceIndex = unlinkedReferences.length; | |
| 320 unlinkedReferences.add(encodeUnlinkedReference(ctx)); | |
| 321 prelinkedReferences.add(encodePrelinkedReference(ctx, | |
| 322 kind: PrelinkedReferenceKind.classOrEnum)); | |
| 323 } | |
| 324 return dynamicReferenceIndex; | |
| 325 } | |
| 326 | 313 |
| 327 /** | 314 /** |
| 328 * Serialize the given [enumElement], creating an [UnlinkedEnum]. | 315 * Serialize the given [enumElement], creating an [UnlinkedEnum]. |
| 329 */ | 316 */ |
| 330 UnlinkedEnumBuilder serializeEnum(ClassElement enumElement) { | 317 UnlinkedEnumBuilder serializeEnum(ClassElement enumElement) { |
| 331 UnlinkedEnumBuilder b = new UnlinkedEnumBuilder(ctx); | 318 UnlinkedEnumBuilder b = new UnlinkedEnumBuilder(ctx); |
| 332 b.name = enumElement.name; | 319 b.name = enumElement.name; |
| 333 List<UnlinkedEnumValueBuilder> values = <UnlinkedEnumValueBuilder>[]; | 320 List<UnlinkedEnumValueBuilder> values = <UnlinkedEnumValueBuilder>[]; |
| 334 for (FieldElement field in enumElement.fields) { | 321 for (FieldElement field in enumElement.fields) { |
| 335 if (field.isConst && field.type.element == enumElement) { | 322 if (field.isConst && field.type.element == enumElement) { |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(ctx); | 560 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(ctx); |
| 574 b.name = variable.name; | 561 b.name = variable.name; |
| 575 b.type = serializeTypeRef(variable.type, variable); | 562 b.type = serializeTypeRef(variable.type, variable); |
| 576 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; | 563 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; |
| 577 b.isFinal = variable.isFinal; | 564 b.isFinal = variable.isFinal; |
| 578 b.isConst = variable.isConst; | 565 b.isConst = variable.isConst; |
| 579 b.hasImplicitType = variable.hasImplicitType; | 566 b.hasImplicitType = variable.hasImplicitType; |
| 580 return b; | 567 return b; |
| 581 } | 568 } |
| 582 } | 569 } |
| OLD | NEW |