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

Side by Side Diff: pkg/analyzer/lib/src/summary/summarize_elements.dart

Issue 1530503002: Organize summary declarations by unit rather than by library. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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/src/generated/element.dart'; 7 import 'package:analyzer/src/generated/element.dart';
8 import 'package:analyzer/src/generated/resolver.dart'; 8 import 'package:analyzer/src/generated/resolver.dart';
9 import 'package:analyzer/src/generated/utilities_dart.dart'; 9 import 'package:analyzer/src/generated/utilities_dart.dart';
10 import 'package:analyzer/src/summary/builder.dart'; 10 import 'package:analyzer/src/summary/builder.dart';
(...skipping 17 matching lines...) Expand all
28 * The library to be serialized. 28 * The library to be serialized.
29 */ 29 */
30 final LibraryElement libraryElement; 30 final LibraryElement libraryElement;
31 31
32 /** 32 /**
33 * The type provider. This is used to locate the library for `dart:core`. 33 * The type provider. This is used to locate the library for `dart:core`.
34 */ 34 */
35 final TypeProvider typeProvider; 35 final TypeProvider typeProvider;
36 36
37 /** 37 /**
38 * List of objects which should be written to [UnlinkedLibrary.classes]. 38 * List of objects which should be written to [PrelinkedLibrary.units].
39 */ 39 */
40 final List<UnlinkedClassBuilder> classes = <UnlinkedClassBuilder>[]; 40 final List<PrelinkedUnitBuilder> units = <PrelinkedUnitBuilder>[];
41
42 /**
43 * List of objects which should be written to [UnlinkedLibrary.enums].
44 */
45 final List<UnlinkedEnumBuilder> enums = <UnlinkedEnumBuilder>[];
46
47 /**
48 * List of objects which should be written to [UnlinkedLibrary.executables].
49 */
50 final List<UnlinkedExecutableBuilder> executables =
51 <UnlinkedExecutableBuilder>[];
52
53 /**
54 * List of objects which should be written to [UnlinkedLibrary.typedefs].
55 */
56 final List<UnlinkedTypedefBuilder> typedefs = <UnlinkedTypedefBuilder>[];
57
58 /**
59 * List of objects which should be written to [UnlinkedLibrary.units].
60 */
61 final List<UnlinkedUnitBuilder> units = <UnlinkedUnitBuilder>[];
62
63 /**
64 * List of objects which should be written to [UnlinkedLibrary.variables].
65 */
66 final List<UnlinkedVariableBuilder> variables = <UnlinkedVariableBuilder>[];
67 41
68 /** 42 /**
69 * Map from [LibraryElement] to the index of the entry in the "dependency 43 * Map from [LibraryElement] to the index of the entry in the "dependency
70 * table" that refers to it. 44 * table" that refers to it.
71 */ 45 */
72 final Map<LibraryElement, int> dependencyMap = <LibraryElement, int>{}; 46 final Map<LibraryElement, int> dependencyMap = <LibraryElement, int>{};
73 47
74 /** 48 /**
75 * The "dependency table". This is the list of objects which should be 49 * The "dependency table". This is the list of objects which should be
76 * written to [PrelinkedLibrary.dependencies]. 50 * written to [PrelinkedLibrary.dependencies].
77 */ 51 */
78 final List<PrelinkedDependencyBuilder> dependencies = 52 final List<PrelinkedDependencyBuilder> dependencies =
79 <PrelinkedDependencyBuilder>[]; 53 <PrelinkedDependencyBuilder>[];
80 54
81 /** 55 /**
82 * The unlinked portion of the "imports table". This is the list of objects
83 * which should be written to [UnlinkedLibrary.imports].
84 */
85 final List<UnlinkedImportBuilder> unlinkedImports = <UnlinkedImportBuilder>[];
86
87 /**
88 * The prelinked portion of the "imports table". This is the list of ints 56 * The prelinked portion of the "imports table". This is the list of ints
89 * which should be written to [PrelinkedLibrary.imports]. 57 * which should be written to [PrelinkedLibrary.imports].
90 */ 58 */
91 final List<int> prelinkedImports = <int>[]; 59 final List<int> prelinkedImports = <int>[];
92 60
93 /** 61 /**
94 * Map from prefix [String] to the index of the entry in the "prefix" table 62 * Map from prefix [String] to the index of the entry in the "prefix" table
95 * that refers to it. The empty prefix is not included in this map. 63 * that refers to it. The empty prefix is not included in this map.
96 */ 64 */
97 final Map<String, int> prefixMap = <String, int>{}; 65 final Map<String, int> prefixMap = <String, int>{};
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 LibraryElement get coreLibrary => typeProvider.objectType.element.library; 130 LibraryElement get coreLibrary => typeProvider.objectType.element.library;
163 131
164 /** 132 /**
165 * Add all classes, enums, typedefs, executables, and top level variables 133 * Add all classes, enums, typedefs, executables, and top level variables
166 * from the given compilation unit [element] to the library summary. 134 * from the given compilation unit [element] to the library summary.
167 * [unitNum] indicates the ordinal position of this compilation unit in the 135 * [unitNum] indicates the ordinal position of this compilation unit in the
168 * library. 136 * library.
169 */ 137 */
170 void addCompilationUnitElements(CompilationUnitElement element, int unitNum) { 138 void addCompilationUnitElements(CompilationUnitElement element, int unitNum) {
171 UnlinkedUnitBuilder b = new UnlinkedUnitBuilder(ctx); 139 UnlinkedUnitBuilder b = new UnlinkedUnitBuilder(ctx);
172 if (element.uri != null) { 140 if (unitNum == 0) {
173 b.uri = element.uri; 141 // TODO(paulberry): we need to figure out a way to record library, part,
Brian Wilkerson 2015/12/14 23:44:35 We might have discussed this already, but if not i
Paul Berry 2015/12/15 00:29:56 Agreed, that would be a good discussion to have.
142 // import, and export declarations that appear in non-defining
143 // compilation units (even though such declarations are prohibited by the
144 // language), so that if the user makes code changes that cause a
145 // non-defining compilation unit to become a defining compilation unit,
146 // we can create a correct summary by simply re-linking.
147 if (libraryElement.name.isNotEmpty) {
148 b.libraryName = libraryElement.name;
149 }
150 b.exports = libraryElement.exports.map(serializeExport).toList();
151 b.imports = libraryElement.imports.map(serializeImport).toList();
152 b.parts = libraryElement.parts
153 .map(
154 (CompilationUnitElement e) => encodeUnlinkedPart(ctx, uri: e.uri))
155 .toList();
174 } 156 }
175 units.add(b); 157 b.classes = element.types.map(serializeClass).toList();
176 for (ClassElement cls in element.types) { 158 b.enums = element.enums.map(serializeEnum).toList();
177 classes.add(serializeClass(cls, unitNum)); 159 b.typedefs = element.functionTypeAliases.map(serializeTypedef).toList();
178 } 160 List<UnlinkedExecutableBuilder> executables =
179 for (ClassElement e in element.enums) { 161 element.functions.map(serializeExecutable).toList();
180 enums.add(serializeEnum(e, unitNum));
181 }
182 for (FunctionTypeAliasElement type in element.functionTypeAliases) {
183 typedefs.add(serializeTypedef(type, unitNum));
184 }
185 for (FunctionElement executable in element.functions) {
186 executables.add(serializeExecutable(executable, unitNum));
187 }
188 for (PropertyAccessorElement accessor in element.accessors) { 162 for (PropertyAccessorElement accessor in element.accessors) {
189 if (!accessor.isSynthetic) { 163 if (!accessor.isSynthetic) {
190 executables.add(serializeExecutable(accessor, unitNum)); 164 executables.add(serializeExecutable(accessor));
191 } else if (accessor.isGetter) { 165 }
166 }
167 b.executables = executables;
168 List<UnlinkedVariableBuilder> variables = <UnlinkedVariableBuilder>[];
169 for (PropertyAccessorElement accessor in element.accessors) {
170 if (accessor.isSynthetic && accessor.isGetter) {
192 PropertyInducingElement variable = accessor.variable; 171 PropertyInducingElement variable = accessor.variable;
193 if (variable != null) { 172 if (variable != null) {
194 assert(!variable.isSynthetic); 173 assert(!variable.isSynthetic);
195 variables.add(serializeVariable(variable, unitNum)); 174 variables.add(serializeVariable(variable));
196 } 175 }
197 } 176 }
198 } 177 }
178 b.variables = variables;
179 units.add(encodePrelinkedUnit(ctx, unlinked: b));
199 } 180 }
200 181
201 /** 182 /**
202 * Add [exportedLibrary] (and the transitive closure of all libraries it 183 * Add [exportedLibrary] (and the transitive closure of all libraries it
203 * exports) to the dependency table ([PrelinkedLibrary.dependencies]). 184 * exports) to the dependency table ([PrelinkedLibrary.dependencies]).
204 */ 185 */
205 void addTransitiveExportClosure(LibraryElement exportedLibrary) { 186 void addTransitiveExportClosure(LibraryElement exportedLibrary) {
206 if (librariesAddedToTransitiveExportClosure.add(exportedLibrary)) { 187 if (librariesAddedToTransitiveExportClosure.add(exportedLibrary)) {
207 serializeDependency(exportedLibrary); 188 serializeDependency(exportedLibrary);
208 for (LibraryElement transitiveExport 189 for (LibraryElement transitiveExport
(...skipping 26 matching lines...) Expand all
235 } 216 }
236 } 217 }
237 index += typeParameters.length; 218 index += typeParameters.length;
238 } 219 }
239 context = context.enclosingElement; 220 context = context.enclosingElement;
240 } 221 }
241 throw new StateError('Unbound type parameter $type'); 222 throw new StateError('Unbound type parameter $type');
242 } 223 }
243 224
244 /** 225 /**
245 * Serialize the given [classElement], which exists in the unit numbered 226 * Serialize the given [classElement], creating an [UnlinkedClass].
246 * [unitNum], creating an [UnlinkedClass].
247 */ 227 */
248 UnlinkedClassBuilder serializeClass(ClassElement classElement, int unitNum) { 228 UnlinkedClassBuilder serializeClass(ClassElement classElement) {
249 UnlinkedClassBuilder b = new UnlinkedClassBuilder(ctx); 229 UnlinkedClassBuilder b = new UnlinkedClassBuilder(ctx);
250 b.name = classElement.name; 230 b.name = classElement.name;
251 b.unit = unitNum;
252 b.typeParameters = 231 b.typeParameters =
253 classElement.typeParameters.map(serializeTypeParam).toList(); 232 classElement.typeParameters.map(serializeTypeParam).toList();
254 if (classElement.supertype != null && !classElement.supertype.isObject) { 233 if (classElement.supertype != null && !classElement.supertype.isObject) {
255 b.supertype = serializeTypeRef(classElement.supertype, classElement); 234 b.supertype = serializeTypeRef(classElement.supertype, classElement);
256 } 235 }
257 b.mixins = classElement.mixins 236 b.mixins = classElement.mixins
258 .map((InterfaceType t) => serializeTypeRef(t, classElement)) 237 .map((InterfaceType t) => serializeTypeRef(t, classElement))
259 .toList(); 238 .toList();
260 b.interfaces = classElement.interfaces 239 b.interfaces = classElement.interfaces
261 .map((InterfaceType t) => serializeTypeRef(t, classElement)) 240 .map((InterfaceType t) => serializeTypeRef(t, classElement))
262 .toList(); 241 .toList();
263 List<UnlinkedVariableBuilder> fields = <UnlinkedVariableBuilder>[]; 242 List<UnlinkedVariableBuilder> fields = <UnlinkedVariableBuilder>[];
264 List<UnlinkedExecutableBuilder> executables = <UnlinkedExecutableBuilder>[]; 243 List<UnlinkedExecutableBuilder> executables = <UnlinkedExecutableBuilder>[];
265 for (ConstructorElement executable in classElement.constructors) { 244 for (ConstructorElement executable in classElement.constructors) {
266 if (!executable.isSynthetic) { 245 if (!executable.isSynthetic) {
267 executables.add(serializeExecutable(executable, 0)); 246 executables.add(serializeExecutable(executable));
268 } 247 }
269 } 248 }
270 for (MethodElement executable in classElement.methods) { 249 for (MethodElement executable in classElement.methods) {
271 executables.add(serializeExecutable(executable, 0)); 250 executables.add(serializeExecutable(executable));
272 } 251 }
273 for (PropertyAccessorElement accessor in classElement.accessors) { 252 for (PropertyAccessorElement accessor in classElement.accessors) {
274 if (!accessor.isSynthetic) { 253 if (!accessor.isSynthetic) {
275 executables.add(serializeExecutable(accessor, 0)); 254 executables.add(serializeExecutable(accessor));
276 } else if (accessor.isGetter) { 255 } else if (accessor.isGetter) {
277 PropertyInducingElement field = accessor.variable; 256 PropertyInducingElement field = accessor.variable;
278 if (field != null && !field.isSynthetic) { 257 if (field != null && !field.isSynthetic) {
279 fields.add(serializeVariable(field, 0)); 258 fields.add(serializeVariable(field));
280 } 259 }
281 } 260 }
282 } 261 }
283 b.fields = fields; 262 b.fields = fields;
284 b.executables = executables; 263 b.executables = executables;
285 b.isAbstract = classElement.isAbstract; 264 b.isAbstract = classElement.isAbstract;
286 b.isMixinApplication = classElement.isMixinApplication; 265 b.isMixinApplication = classElement.isMixinApplication;
287 return b; 266 return b;
288 } 267 }
289 268
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 assert(unlinkedReferences.length == prelinkedReferences.length); 312 assert(unlinkedReferences.length == prelinkedReferences.length);
334 dynamicReferenceIndex = unlinkedReferences.length; 313 dynamicReferenceIndex = unlinkedReferences.length;
335 unlinkedReferences.add(encodeUnlinkedReference(ctx)); 314 unlinkedReferences.add(encodeUnlinkedReference(ctx));
336 prelinkedReferences.add(encodePrelinkedReference(ctx, 315 prelinkedReferences.add(encodePrelinkedReference(ctx,
337 kind: PrelinkedReferenceKind.classOrEnum)); 316 kind: PrelinkedReferenceKind.classOrEnum));
338 } 317 }
339 return dynamicReferenceIndex; 318 return dynamicReferenceIndex;
340 } 319 }
341 320
342 /** 321 /**
343 * Serialize the given [enumElement], which exists in the unit numbered 322 * Serialize the given [enumElement], creating an [UnlinkedEnum].
344 * [unitNum], creating an [UnlinkedEnum].
345 */ 323 */
346 UnlinkedEnumBuilder serializeEnum(ClassElement enumElement, int unitNum) { 324 UnlinkedEnumBuilder serializeEnum(ClassElement enumElement) {
347 UnlinkedEnumBuilder b = new UnlinkedEnumBuilder(ctx); 325 UnlinkedEnumBuilder b = new UnlinkedEnumBuilder(ctx);
348 b.name = enumElement.name; 326 b.name = enumElement.name;
349 List<UnlinkedEnumValueBuilder> values = <UnlinkedEnumValueBuilder>[]; 327 List<UnlinkedEnumValueBuilder> values = <UnlinkedEnumValueBuilder>[];
350 for (FieldElement field in enumElement.fields) { 328 for (FieldElement field in enumElement.fields) {
351 if (field.isConst && field.type.element == enumElement) { 329 if (field.isConst && field.type.element == enumElement) {
352 values.add(encodeUnlinkedEnumValue(ctx, name: field.name)); 330 values.add(encodeUnlinkedEnumValue(ctx, name: field.name));
353 } 331 }
354 } 332 }
355 b.values = values; 333 b.values = values;
356 b.unit = unitNum;
357 return b; 334 return b;
358 } 335 }
359 336
360 /** 337 /**
361 * Serialize the given [executableElement], which exists in the unit numbered 338 * Serialize the given [executableElement], creating an [UnlinkedExecutable].
362 * [unitNum], creating an [UnlinkedExecutable]. For elements declared inside
363 * a class, [unitNum] should be zero.
364 */ 339 */
365 UnlinkedExecutableBuilder serializeExecutable( 340 UnlinkedExecutableBuilder serializeExecutable(
366 ExecutableElement executableElement, int unitNum) { 341 ExecutableElement executableElement) {
367 if (executableElement.enclosingElement is ClassElement) {
368 assert(unitNum == 0);
369 }
370 UnlinkedExecutableBuilder b = new UnlinkedExecutableBuilder(ctx); 342 UnlinkedExecutableBuilder b = new UnlinkedExecutableBuilder(ctx);
371 b.name = executableElement.name; 343 b.name = executableElement.name;
372 b.unit = unitNum;
373 if (!executableElement.type.returnType.isVoid) { 344 if (!executableElement.type.returnType.isVoid) {
374 b.returnType = serializeTypeRef( 345 b.returnType = serializeTypeRef(
375 executableElement.type.returnType, executableElement); 346 executableElement.type.returnType, executableElement);
376 } 347 }
377 b.typeParameters = 348 b.typeParameters =
378 executableElement.typeParameters.map(serializeTypeParam).toList(); 349 executableElement.typeParameters.map(serializeTypeParam).toList();
379 b.parameters = 350 b.parameters =
380 executableElement.type.parameters.map(serializeParam).toList(); 351 executableElement.type.parameters.map(serializeParam).toList();
381 if (executableElement is PropertyAccessorElement) { 352 if (executableElement is PropertyAccessorElement) {
382 if (executableElement.isGetter) { 353 if (executableElement.isGetter) {
(...skipping 19 matching lines...) Expand all
402 * Serialize the given [exportElement] into an [UnlinkedExport]. 373 * Serialize the given [exportElement] into an [UnlinkedExport].
403 */ 374 */
404 UnlinkedExportBuilder serializeExport(ExportElement exportElement) { 375 UnlinkedExportBuilder serializeExport(ExportElement exportElement) {
405 UnlinkedExportBuilder b = new UnlinkedExportBuilder(ctx); 376 UnlinkedExportBuilder b = new UnlinkedExportBuilder(ctx);
406 b.uri = exportElement.uri; 377 b.uri = exportElement.uri;
407 b.combinators = exportElement.combinators.map(serializeCombinator).toList(); 378 b.combinators = exportElement.combinators.map(serializeCombinator).toList();
408 return b; 379 return b;
409 } 380 }
410 381
411 /** 382 /**
412 * Serialize the given [importElement], adding information about it to 383 * Serialize the given [importElement] yielding an [UnlinkedImportBuilder].
413 * the [unlinkedImports] and [prelinkedImports] lists. 384 * Also, add pre-linked information about it to the [prelinkedImports] list.
414 */ 385 */
415 void serializeImport(ImportElement importElement) { 386 UnlinkedImportBuilder serializeImport(ImportElement importElement) {
416 assert(unlinkedImports.length == prelinkedImports.length);
417 UnlinkedImportBuilder b = new UnlinkedImportBuilder(ctx); 387 UnlinkedImportBuilder b = new UnlinkedImportBuilder(ctx);
418 b.isDeferred = importElement.isDeferred; 388 b.isDeferred = importElement.isDeferred;
419 b.offset = importElement.nameOffset; 389 b.offset = importElement.nameOffset;
420 b.combinators = importElement.combinators.map(serializeCombinator).toList(); 390 b.combinators = importElement.combinators.map(serializeCombinator).toList();
421 if (importElement.prefix != null) { 391 if (importElement.prefix != null) {
422 b.prefix = prefixMap.putIfAbsent(importElement.prefix.name, () { 392 b.prefix = prefixMap.putIfAbsent(importElement.prefix.name, () {
423 int index = prefixes.length; 393 int index = prefixes.length;
424 prefixes 394 prefixes
425 .add(encodeUnlinkedPrefix(ctx, name: importElement.prefix.name)); 395 .add(encodeUnlinkedPrefix(ctx, name: importElement.prefix.name));
426 return index; 396 return index;
427 }); 397 });
428 } 398 }
429 if (importElement.isSynthetic) { 399 if (importElement.isSynthetic) {
430 b.isImplicit = true; 400 b.isImplicit = true;
431 } else { 401 } else {
432 b.uri = importElement.uri; 402 b.uri = importElement.uri;
433 } 403 }
434 addTransitiveExportClosure(importElement.importedLibrary); 404 addTransitiveExportClosure(importElement.importedLibrary);
435 unlinkedImports.add(b);
436 prelinkedImports.add(serializeDependency(importElement.importedLibrary)); 405 prelinkedImports.add(serializeDependency(importElement.importedLibrary));
406 return b;
437 } 407 }
438 408
439 /** 409 /**
440 * Serialize the whole library element into a [PrelinkedLibrary]. Should be 410 * Serialize the whole library element into a [PrelinkedLibrary]. Should be
441 * called exactly once for each instance of [_LibrarySerializer]. 411 * called exactly once for each instance of [_LibrarySerializer].
442 */ 412 */
443 PrelinkedLibraryBuilder serializeLibrary() { 413 PrelinkedLibraryBuilder serializeLibrary() {
444 UnlinkedLibraryBuilder ub = new UnlinkedLibraryBuilder(ctx); 414 UnlinkedLibraryBuilder ub = new UnlinkedLibraryBuilder(ctx);
445 PrelinkedLibraryBuilder pb = new PrelinkedLibraryBuilder(ctx); 415 PrelinkedLibraryBuilder pb = new PrelinkedLibraryBuilder(ctx);
446 if (libraryElement.name.isNotEmpty) {
447 ub.name = libraryElement.name;
448 }
449 for (ImportElement importElement in libraryElement.imports) {
450 serializeImport(importElement);
451 }
452 ub.exports = libraryElement.exports.map(serializeExport).toList();
453 addCompilationUnitElements(libraryElement.definingCompilationUnit, 0); 416 addCompilationUnitElements(libraryElement.definingCompilationUnit, 0);
454 for (int i = 0; i < libraryElement.parts.length; i++) { 417 for (int i = 0; i < libraryElement.parts.length; i++) {
455 addCompilationUnitElements(libraryElement.parts[i], i + 1); 418 addCompilationUnitElements(libraryElement.parts[i], i + 1);
456 } 419 }
457 ub.classes = classes;
458 ub.enums = enums;
459 ub.executables = executables;
460 ub.imports = unlinkedImports;
461 ub.prefixes = prefixes; 420 ub.prefixes = prefixes;
462 ub.references = unlinkedReferences; 421 ub.references = unlinkedReferences;
463 ub.typedefs = typedefs; 422 pb.units = units;
464 ub.units = units;
465 ub.variables = variables;
466 pb.unlinked = ub; 423 pb.unlinked = ub;
467 pb.dependencies = dependencies; 424 pb.dependencies = dependencies;
468 pb.importDependencies = prelinkedImports; 425 pb.importDependencies = prelinkedImports;
469 pb.references = prelinkedReferences; 426 pb.references = prelinkedReferences;
470 return pb; 427 return pb;
471 } 428 }
472 429
473 /** 430 /**
474 * Serialize the given [parameter] into an [UnlinkedParam]. 431 * Serialize the given [parameter] into an [UnlinkedParam].
475 */ 432 */
(...skipping 20 matching lines...) Expand all
496 } 453 }
497 b.parameters = type.parameters.map(serializeParam).toList(); 454 b.parameters = type.parameters.map(serializeParam).toList();
498 } else { 455 } else {
499 b.type = serializeTypeRef(type, parameter); 456 b.type = serializeTypeRef(type, parameter);
500 b.hasImplicitType = parameter.hasImplicitType; 457 b.hasImplicitType = parameter.hasImplicitType;
501 } 458 }
502 return b; 459 return b;
503 } 460 }
504 461
505 /** 462 /**
506 * Serialize the given [typedefElement], which exists in the unit numbered 463 * Serialize the given [typedefElement], creating an [UnlinkedTypedef].
507 * [unitNum], creating an [UnlinkedTypedef].
508 */ 464 */
509 UnlinkedTypedefBuilder serializeTypedef( 465 UnlinkedTypedefBuilder serializeTypedef(
510 FunctionTypeAliasElement typedefElement, int unitNum) { 466 FunctionTypeAliasElement typedefElement) {
511 UnlinkedTypedefBuilder b = new UnlinkedTypedefBuilder(ctx); 467 UnlinkedTypedefBuilder b = new UnlinkedTypedefBuilder(ctx);
512 b.name = typedefElement.name; 468 b.name = typedefElement.name;
513 b.unit = unitNum;
514 b.typeParameters = 469 b.typeParameters =
515 typedefElement.typeParameters.map(serializeTypeParam).toList(); 470 typedefElement.typeParameters.map(serializeTypeParam).toList();
516 if (!typedefElement.returnType.isVoid) { 471 if (!typedefElement.returnType.isVoid) {
517 b.returnType = 472 b.returnType =
518 serializeTypeRef(typedefElement.returnType, typedefElement); 473 serializeTypeRef(typedefElement.returnType, typedefElement);
519 } 474 }
520 b.parameters = typedefElement.parameters.map(serializeParam).toList(); 475 b.parameters = typedefElement.parameters.map(serializeParam).toList();
521 return b; 476 return b;
522 } 477 }
523 478
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 assert(unlinkedReferences.length == prelinkedReferences.length); 556 assert(unlinkedReferences.length == prelinkedReferences.length);
602 unresolvedReferenceIndex = unlinkedReferences.length; 557 unresolvedReferenceIndex = unlinkedReferences.length;
603 unlinkedReferences.add(encodeUnlinkedReference(ctx)); 558 unlinkedReferences.add(encodeUnlinkedReference(ctx));
604 prelinkedReferences.add(encodePrelinkedReference(ctx, 559 prelinkedReferences.add(encodePrelinkedReference(ctx,
605 kind: PrelinkedReferenceKind.unresolved)); 560 kind: PrelinkedReferenceKind.unresolved));
606 } 561 }
607 return unresolvedReferenceIndex; 562 return unresolvedReferenceIndex;
608 } 563 }
609 564
610 /** 565 /**
611 * Serialize the given [variable], which exists in the unit numbered 566 * Serialize the given [variable], creating an [UnlinkedVariable].
612 * [unitNum], creating an [UnlinkedVariable]. For variables declared inside
613 * a class (i.e. fields), [unitNum] should be zero.
614 */ 567 */
615 UnlinkedVariableBuilder serializeVariable( 568 UnlinkedVariableBuilder serializeVariable(PropertyInducingElement variable) {
616 PropertyInducingElement variable, int unitNum) {
617 if (variable.enclosingElement is ClassElement) {
618 assert(unitNum == 0);
619 }
620 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(ctx); 569 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(ctx);
621 b.name = variable.name; 570 b.name = variable.name;
622 b.unit = unitNum;
623 b.type = serializeTypeRef(variable.type, variable); 571 b.type = serializeTypeRef(variable.type, variable);
624 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; 572 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement;
625 b.isFinal = variable.isFinal; 573 b.isFinal = variable.isFinal;
626 b.isConst = variable.isConst; 574 b.isConst = variable.isConst;
627 b.hasImplicitType = variable.hasImplicitType; 575 b.hasImplicitType = variable.hasImplicitType;
628 return b; 576 return b;
629 } 577 }
630 } 578 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/format.dart ('k') | pkg/analyzer/test/src/summary/summary_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698