| 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 |