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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 if (typedef.isPublic) { | 198 if (typedef.isPublic) { |
199 names.add(encodeUnlinkedPublicName(ctx, | 199 names.add(encodeUnlinkedPublicName(ctx, |
200 kind: PrelinkedReferenceKind.typedef, | 200 kind: PrelinkedReferenceKind.typedef, |
201 name: typedef.name, | 201 name: typedef.name, |
202 numTypeParameters: typedef.typeParameters.length)); | 202 numTypeParameters: typedef.typeParameters.length)); |
203 } | 203 } |
204 } | 204 } |
205 if (unitNum == 0) { | 205 if (unitNum == 0) { |
206 if (libraryElement.name.isNotEmpty) { | 206 if (libraryElement.name.isNotEmpty) { |
207 b.libraryName = libraryElement.name; | 207 b.libraryName = libraryElement.name; |
| 208 b.libraryNameOffset = libraryElement.nameOffset; |
| 209 b.libraryNameLength = libraryElement.nameLength; |
208 } | 210 } |
209 b.publicNamespace = encodeUnlinkedPublicNamespace(ctx, | 211 b.publicNamespace = encodeUnlinkedPublicNamespace(ctx, |
210 exports: libraryElement.exports.map(serializeExportPublic).toList(), | 212 exports: libraryElement.exports.map(serializeExportPublic).toList(), |
211 parts: libraryElement.parts | 213 parts: libraryElement.parts |
212 .map((CompilationUnitElement e) => e.uri) | 214 .map((CompilationUnitElement e) => e.uri) |
213 .toList(), | 215 .toList(), |
214 names: names); | 216 names: names); |
215 b.exports = libraryElement.exports.map(serializeExportNonPublic).toList(); | 217 b.exports = libraryElement.exports.map(serializeExportNonPublic).toList(); |
216 b.imports = libraryElement.imports.map(serializeImport).toList(); | 218 b.imports = libraryElement.imports.map(serializeImport).toList(); |
217 b.parts = libraryElement.parts | 219 b.parts = libraryElement.parts |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 } | 302 } |
301 throw new StateError('Unbound type parameter $type'); | 303 throw new StateError('Unbound type parameter $type'); |
302 } | 304 } |
303 | 305 |
304 /** | 306 /** |
305 * Serialize the given [classElement], creating an [UnlinkedClass]. | 307 * Serialize the given [classElement], creating an [UnlinkedClass]. |
306 */ | 308 */ |
307 UnlinkedClassBuilder serializeClass(ClassElement classElement) { | 309 UnlinkedClassBuilder serializeClass(ClassElement classElement) { |
308 UnlinkedClassBuilder b = new UnlinkedClassBuilder(ctx); | 310 UnlinkedClassBuilder b = new UnlinkedClassBuilder(ctx); |
309 b.name = classElement.name; | 311 b.name = classElement.name; |
| 312 b.nameOffset = classElement.nameOffset; |
310 b.typeParameters = | 313 b.typeParameters = |
311 classElement.typeParameters.map(serializeTypeParam).toList(); | 314 classElement.typeParameters.map(serializeTypeParam).toList(); |
312 if (classElement.supertype == null) { | 315 if (classElement.supertype == null) { |
313 b.hasNoSupertype = true; | 316 b.hasNoSupertype = true; |
314 } else if (!classElement.supertype.isObject) { | 317 } else if (!classElement.supertype.isObject) { |
315 b.supertype = serializeTypeRef(classElement.supertype, classElement); | 318 b.supertype = serializeTypeRef(classElement.supertype, classElement); |
316 } | 319 } |
317 b.mixins = classElement.mixins | 320 b.mixins = classElement.mixins |
318 .map((InterfaceType t) => serializeTypeRef(t, classElement)) | 321 .map((InterfaceType t) => serializeTypeRef(t, classElement)) |
319 .toList(); | 322 .toList(); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 * representing the pseudo-type `dynamic`. | 384 * representing the pseudo-type `dynamic`. |
382 */ | 385 */ |
383 int serializeDynamicReference() => 0; | 386 int serializeDynamicReference() => 0; |
384 | 387 |
385 /** | 388 /** |
386 * Serialize the given [enumElement], creating an [UnlinkedEnum]. | 389 * Serialize the given [enumElement], creating an [UnlinkedEnum]. |
387 */ | 390 */ |
388 UnlinkedEnumBuilder serializeEnum(ClassElement enumElement) { | 391 UnlinkedEnumBuilder serializeEnum(ClassElement enumElement) { |
389 UnlinkedEnumBuilder b = new UnlinkedEnumBuilder(ctx); | 392 UnlinkedEnumBuilder b = new UnlinkedEnumBuilder(ctx); |
390 b.name = enumElement.name; | 393 b.name = enumElement.name; |
| 394 b.nameOffset = enumElement.nameOffset; |
391 List<UnlinkedEnumValueBuilder> values = <UnlinkedEnumValueBuilder>[]; | 395 List<UnlinkedEnumValueBuilder> values = <UnlinkedEnumValueBuilder>[]; |
392 for (FieldElement field in enumElement.fields) { | 396 for (FieldElement field in enumElement.fields) { |
393 if (field.isConst && field.type.element == enumElement) { | 397 if (field.isConst && field.type.element == enumElement) { |
394 values.add(encodeUnlinkedEnumValue(ctx, name: field.name)); | 398 values.add(encodeUnlinkedEnumValue(ctx, |
| 399 name: field.name, nameOffset: field.nameOffset)); |
395 } | 400 } |
396 } | 401 } |
397 b.values = values; | 402 b.values = values; |
398 return b; | 403 return b; |
399 } | 404 } |
400 | 405 |
401 /** | 406 /** |
402 * Serialize the given [executableElement], creating an [UnlinkedExecutable]. | 407 * Serialize the given [executableElement], creating an [UnlinkedExecutable]. |
403 */ | 408 */ |
404 UnlinkedExecutableBuilder serializeExecutable( | 409 UnlinkedExecutableBuilder serializeExecutable( |
405 ExecutableElement executableElement) { | 410 ExecutableElement executableElement) { |
406 UnlinkedExecutableBuilder b = new UnlinkedExecutableBuilder(ctx); | 411 UnlinkedExecutableBuilder b = new UnlinkedExecutableBuilder(ctx); |
407 b.name = executableElement.name; | 412 b.name = executableElement.name; |
| 413 b.nameOffset = executableElement.nameOffset; |
408 if (executableElement is! ConstructorElement && | 414 if (executableElement is! ConstructorElement && |
409 !executableElement.type.returnType.isVoid) { | 415 !executableElement.type.returnType.isVoid) { |
410 b.returnType = serializeTypeRef( | 416 b.returnType = serializeTypeRef( |
411 executableElement.type.returnType, executableElement); | 417 executableElement.type.returnType, executableElement); |
412 } | 418 } |
413 b.typeParameters = | 419 b.typeParameters = |
414 executableElement.typeParameters.map(serializeTypeParam).toList(); | 420 executableElement.typeParameters.map(serializeTypeParam).toList(); |
415 b.parameters = | 421 b.parameters = |
416 executableElement.type.parameters.map(serializeParam).toList(); | 422 executableElement.type.parameters.map(serializeParam).toList(); |
417 if (executableElement is PropertyAccessorElement) { | 423 if (executableElement is PropertyAccessorElement) { |
(...skipping 16 matching lines...) Expand all Loading... |
434 b.isExternal = executableElement.isExternal; | 440 b.isExternal = executableElement.isExternal; |
435 return b; | 441 return b; |
436 } | 442 } |
437 | 443 |
438 /** | 444 /** |
439 * Serialize the given [exportElement] into an [UnlinkedExportNonPublic]. | 445 * Serialize the given [exportElement] into an [UnlinkedExportNonPublic]. |
440 */ | 446 */ |
441 UnlinkedExportNonPublicBuilder serializeExportNonPublic( | 447 UnlinkedExportNonPublicBuilder serializeExportNonPublic( |
442 ExportElement exportElement) { | 448 ExportElement exportElement) { |
443 UnlinkedExportNonPublicBuilder b = new UnlinkedExportNonPublicBuilder(ctx); | 449 UnlinkedExportNonPublicBuilder b = new UnlinkedExportNonPublicBuilder(ctx); |
| 450 b.offset = exportElement.nameOffset; |
444 b.uriOffset = exportElement.uriOffset; | 451 b.uriOffset = exportElement.uriOffset; |
445 b.uriEnd = exportElement.uriEnd; | 452 b.uriEnd = exportElement.uriEnd; |
446 return b; | 453 return b; |
447 } | 454 } |
448 | 455 |
449 /** | 456 /** |
450 * Serialize the given [exportElement] into an [UnlinkedExportPublic]. | 457 * Serialize the given [exportElement] into an [UnlinkedExportPublic]. |
451 */ | 458 */ |
452 UnlinkedExportPublicBuilder serializeExportPublic( | 459 UnlinkedExportPublicBuilder serializeExportPublic( |
453 ExportElement exportElement) { | 460 ExportElement exportElement) { |
454 UnlinkedExportPublicBuilder b = new UnlinkedExportPublicBuilder(ctx); | 461 UnlinkedExportPublicBuilder b = new UnlinkedExportPublicBuilder(ctx); |
455 b.uri = exportElement.uri; | 462 b.uri = exportElement.uri; |
456 b.combinators = exportElement.combinators.map(serializeCombinator).toList(); | 463 b.combinators = exportElement.combinators.map(serializeCombinator).toList(); |
457 return b; | 464 return b; |
458 } | 465 } |
459 | 466 |
460 /** | 467 /** |
461 * Serialize the given [importElement] yielding an [UnlinkedImportBuilder]. | 468 * Serialize the given [importElement] yielding an [UnlinkedImportBuilder]. |
462 * Also, add pre-linked information about it to the [prelinkedImports] list. | 469 * Also, add pre-linked information about it to the [prelinkedImports] list. |
463 */ | 470 */ |
464 UnlinkedImportBuilder serializeImport(ImportElement importElement) { | 471 UnlinkedImportBuilder serializeImport(ImportElement importElement) { |
465 UnlinkedImportBuilder b = new UnlinkedImportBuilder(ctx); | 472 UnlinkedImportBuilder b = new UnlinkedImportBuilder(ctx); |
466 b.isDeferred = importElement.isDeferred; | 473 b.isDeferred = importElement.isDeferred; |
467 b.offset = importElement.nameOffset; | 474 b.offset = importElement.nameOffset; |
468 b.combinators = importElement.combinators.map(serializeCombinator).toList(); | 475 b.combinators = importElement.combinators.map(serializeCombinator).toList(); |
469 if (importElement.prefix != null) { | 476 if (importElement.prefix != null) { |
470 b.prefixReference = serializePrefix(importElement.prefix); | 477 b.prefixReference = serializePrefix(importElement.prefix); |
| 478 b.prefixOffset = importElement.prefix.nameOffset; |
471 } | 479 } |
472 if (importElement.isSynthetic) { | 480 if (importElement.isSynthetic) { |
473 b.isImplicit = true; | 481 b.isImplicit = true; |
474 } else { | 482 } else { |
475 b.uri = importElement.uri; | 483 b.uri = importElement.uri; |
476 b.uriOffset = importElement.uriOffset; | 484 b.uriOffset = importElement.uriOffset; |
477 b.uriEnd = importElement.uriEnd; | 485 b.uriEnd = importElement.uriEnd; |
478 } | 486 } |
479 addTransitiveExportClosure(importElement.importedLibrary); | 487 addTransitiveExportClosure(importElement.importedLibrary); |
480 prelinkedImports.add(serializeDependency(importElement.importedLibrary)); | 488 prelinkedImports.add(serializeDependency(importElement.importedLibrary)); |
(...skipping 20 matching lines...) Expand all Loading... |
501 } | 509 } |
502 | 510 |
503 /** | 511 /** |
504 * Serialize the given [parameter] into an [UnlinkedParam]. | 512 * Serialize the given [parameter] into an [UnlinkedParam]. |
505 */ | 513 */ |
506 UnlinkedParamBuilder serializeParam(ParameterElement parameter, | 514 UnlinkedParamBuilder serializeParam(ParameterElement parameter, |
507 [Element context]) { | 515 [Element context]) { |
508 context ??= parameter; | 516 context ??= parameter; |
509 UnlinkedParamBuilder b = new UnlinkedParamBuilder(ctx); | 517 UnlinkedParamBuilder b = new UnlinkedParamBuilder(ctx); |
510 b.name = parameter.name; | 518 b.name = parameter.name; |
| 519 b.nameOffset = parameter.nameOffset; |
511 switch (parameter.parameterKind) { | 520 switch (parameter.parameterKind) { |
512 case ParameterKind.REQUIRED: | 521 case ParameterKind.REQUIRED: |
513 b.kind = UnlinkedParamKind.required; | 522 b.kind = UnlinkedParamKind.required; |
514 break; | 523 break; |
515 case ParameterKind.POSITIONAL: | 524 case ParameterKind.POSITIONAL: |
516 b.kind = UnlinkedParamKind.positional; | 525 b.kind = UnlinkedParamKind.positional; |
517 break; | 526 break; |
518 case ParameterKind.NAMED: | 527 case ParameterKind.NAMED: |
519 b.kind = UnlinkedParamKind.named; | 528 b.kind = UnlinkedParamKind.named; |
520 break; | 529 break; |
(...skipping 29 matching lines...) Expand all Loading... |
550 }); | 559 }); |
551 } | 560 } |
552 | 561 |
553 /** | 562 /** |
554 * Serialize the given [typedefElement], creating an [UnlinkedTypedef]. | 563 * Serialize the given [typedefElement], creating an [UnlinkedTypedef]. |
555 */ | 564 */ |
556 UnlinkedTypedefBuilder serializeTypedef( | 565 UnlinkedTypedefBuilder serializeTypedef( |
557 FunctionTypeAliasElement typedefElement) { | 566 FunctionTypeAliasElement typedefElement) { |
558 UnlinkedTypedefBuilder b = new UnlinkedTypedefBuilder(ctx); | 567 UnlinkedTypedefBuilder b = new UnlinkedTypedefBuilder(ctx); |
559 b.name = typedefElement.name; | 568 b.name = typedefElement.name; |
| 569 b.nameOffset = typedefElement.nameOffset; |
560 b.typeParameters = | 570 b.typeParameters = |
561 typedefElement.typeParameters.map(serializeTypeParam).toList(); | 571 typedefElement.typeParameters.map(serializeTypeParam).toList(); |
562 if (!typedefElement.returnType.isVoid) { | 572 if (!typedefElement.returnType.isVoid) { |
563 b.returnType = | 573 b.returnType = |
564 serializeTypeRef(typedefElement.returnType, typedefElement); | 574 serializeTypeRef(typedefElement.returnType, typedefElement); |
565 } | 575 } |
566 b.parameters = typedefElement.parameters.map(serializeParam).toList(); | 576 b.parameters = typedefElement.parameters.map(serializeParam).toList(); |
567 return b; | 577 return b; |
568 } | 578 } |
569 | 579 |
570 /** | 580 /** |
571 * Serialize the given [typeParameter] into an [UnlinkedTypeParam]. | 581 * Serialize the given [typeParameter] into an [UnlinkedTypeParam]. |
572 */ | 582 */ |
573 UnlinkedTypeParamBuilder serializeTypeParam( | 583 UnlinkedTypeParamBuilder serializeTypeParam( |
574 TypeParameterElement typeParameter) { | 584 TypeParameterElement typeParameter) { |
575 UnlinkedTypeParamBuilder b = new UnlinkedTypeParamBuilder(ctx); | 585 UnlinkedTypeParamBuilder b = new UnlinkedTypeParamBuilder(ctx); |
576 b.name = typeParameter.name; | 586 b.name = typeParameter.name; |
| 587 b.nameOffset = typeParameter.nameOffset; |
577 if (typeParameter.bound != null) { | 588 if (typeParameter.bound != null) { |
578 b.bound = serializeTypeRef(typeParameter.bound, typeParameter); | 589 b.bound = serializeTypeRef(typeParameter.bound, typeParameter); |
579 } | 590 } |
580 return b; | 591 return b; |
581 } | 592 } |
582 | 593 |
583 /** | 594 /** |
584 * Serialize the given [type] into an [UnlinkedTypeRef]. | 595 * Serialize the given [type] into an [UnlinkedTypeRef]. |
585 */ | 596 */ |
586 UnlinkedTypeRefBuilder serializeTypeRef(DartType type, Element context) { | 597 UnlinkedTypeRefBuilder serializeTypeRef(DartType type, Element context) { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 } | 668 } |
658 return unresolvedReferenceIndex; | 669 return unresolvedReferenceIndex; |
659 } | 670 } |
660 | 671 |
661 /** | 672 /** |
662 * Serialize the given [variable], creating an [UnlinkedVariable]. | 673 * Serialize the given [variable], creating an [UnlinkedVariable]. |
663 */ | 674 */ |
664 UnlinkedVariableBuilder serializeVariable(PropertyInducingElement variable) { | 675 UnlinkedVariableBuilder serializeVariable(PropertyInducingElement variable) { |
665 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(ctx); | 676 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(ctx); |
666 b.name = variable.name; | 677 b.name = variable.name; |
| 678 b.nameOffset = variable.nameOffset; |
667 b.type = serializeTypeRef(variable.type, variable); | 679 b.type = serializeTypeRef(variable.type, variable); |
668 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; | 680 b.isStatic = variable.isStatic && variable.enclosingElement is ClassElement; |
669 b.isFinal = variable.isFinal; | 681 b.isFinal = variable.isFinal; |
670 b.isConst = variable.isConst; | 682 b.isConst = variable.isConst; |
671 b.hasImplicitType = variable.hasImplicitType; | 683 b.hasImplicitType = variable.hasImplicitType; |
672 return b; | 684 return b; |
673 } | 685 } |
674 } | 686 } |
OLD | NEW |