| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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.summarize_ast; | 5 library serialization.summarize_ast; |
| 6 | 6 |
| 7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
| 8 import 'package:analyzer/dart/ast/token.dart'; | 8 import 'package:analyzer/dart/ast/token.dart'; |
| 9 import 'package:analyzer/dart/ast/visitor.dart'; | 9 import 'package:analyzer/dart/ast/visitor.dart'; |
| 10 import 'package:analyzer/src/generated/utilities_dart.dart'; | 10 import 'package:analyzer/src/generated/utilities_dart.dart'; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 'Unexpected identifier type: ${identifier.runtimeType}'); | 86 'Unexpected identifier type: ${identifier.runtimeType}'); |
| 87 } | 87 } |
| 88 return b; | 88 return b; |
| 89 } | 89 } |
| 90 | 90 |
| 91 @override | 91 @override |
| 92 EntityRefBuilder serializePropertyAccess(PropertyAccess access) { | 92 EntityRefBuilder serializePropertyAccess(PropertyAccess access) { |
| 93 Expression target = access.target; | 93 Expression target = access.target; |
| 94 if (target is Identifier) { | 94 if (target is Identifier) { |
| 95 EntityRefBuilder targetRef = serializeIdentifier(target); | 95 EntityRefBuilder targetRef = serializeIdentifier(target); |
| 96 return new EntityRefBuilder( | 96 return new EntityRefBuilder(reference: visitor.serializeReference( |
| 97 reference: visitor.serializeReference( | 97 targetRef.reference, access.propertyName.name)); |
| 98 targetRef.reference, access.propertyName.name)); | |
| 99 } else { | 98 } else { |
| 100 // TODO(scheglov) should we handle other targets in malformed constants? | 99 // TODO(scheglov) should we handle other targets in malformed constants? |
| 101 throw new StateError('Unexpected target type: ${target.runtimeType}'); | 100 throw new StateError('Unexpected target type: ${target.runtimeType}'); |
| 102 } | 101 } |
| 103 } | 102 } |
| 104 | 103 |
| 105 @override | 104 @override |
| 106 EntityRefBuilder serializeType(TypeName node) { | 105 EntityRefBuilder serializeType(TypeName node) { |
| 107 return visitor.serializeTypeName(node); | 106 return visitor.serializeTypeName(node); |
| 108 } | 107 } |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 serializer.serializeAnnotation(a); | 341 serializer.serializeAnnotation(a); |
| 343 return serializer.toBuilder(); | 342 return serializer.toBuilder(); |
| 344 }).toList(); | 343 }).toList(); |
| 345 } | 344 } |
| 346 | 345 |
| 347 /** | 346 /** |
| 348 * Serialize a [ClassDeclaration] or [ClassTypeAlias] into an [UnlinkedClass] | 347 * Serialize a [ClassDeclaration] or [ClassTypeAlias] into an [UnlinkedClass] |
| 349 * and store the result in [classes]. | 348 * and store the result in [classes]. |
| 350 */ | 349 */ |
| 351 void serializeClass( | 350 void serializeClass( |
| 351 AstNode node, |
| 352 Token abstractKeyword, | 352 Token abstractKeyword, |
| 353 String name, | 353 String name, |
| 354 int nameOffset, | 354 int nameOffset, |
| 355 TypeParameterList typeParameters, | 355 TypeParameterList typeParameters, |
| 356 TypeName superclass, | 356 TypeName superclass, |
| 357 WithClause withClause, | 357 WithClause withClause, |
| 358 ImplementsClause implementsClause, | 358 ImplementsClause implementsClause, |
| 359 NodeList<ClassMember> members, | 359 NodeList<ClassMember> members, |
| 360 bool isMixinApplication, | 360 bool isMixinApplication, |
| 361 Comment documentationComment, | 361 Comment documentationComment, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 388 for (ClassMember member in members) { | 388 for (ClassMember member in members) { |
| 389 member.accept(this); | 389 member.accept(this); |
| 390 } | 390 } |
| 391 scopes.removeLast(); | 391 scopes.removeLast(); |
| 392 } | 392 } |
| 393 b.executables = executables; | 393 b.executables = executables; |
| 394 b.fields = variables; | 394 b.fields = variables; |
| 395 b.isAbstract = abstractKeyword != null; | 395 b.isAbstract = abstractKeyword != null; |
| 396 b.documentationComment = serializeDocumentation(documentationComment); | 396 b.documentationComment = serializeDocumentation(documentationComment); |
| 397 b.annotations = serializeAnnotations(annotations); | 397 b.annotations = serializeAnnotations(annotations); |
| 398 serializeCodeRange(b, node); |
| 398 classes.add(b); | 399 classes.add(b); |
| 399 scopes.removeLast(); | 400 scopes.removeLast(); |
| 400 assert(scopes.length == oldScopesLength); | 401 assert(scopes.length == oldScopesLength); |
| 401 executables = oldExecutables; | 402 executables = oldExecutables; |
| 402 variables = oldVariables; | 403 variables = oldVariables; |
| 403 } | 404 } |
| 404 | 405 |
| 406 void serializeCodeRange(Object b, AstNode node) { |
| 407 if (b is UnlinkedClassBuilder) { |
| 408 b.hasCodeRange = true; |
| 409 b.codeOffset = node.offset; |
| 410 b.codeLength = node.length; |
| 411 } else if (b is UnlinkedEnumBuilder) { |
| 412 b.hasCodeRange = true; |
| 413 b.codeOffset = node.offset; |
| 414 b.codeLength = node.length; |
| 415 } else if (b is UnlinkedExecutableBuilder) { |
| 416 b.hasCodeRange = true; |
| 417 b.codeOffset = node.offset; |
| 418 b.codeLength = node.length; |
| 419 } else if (b is UnlinkedParamBuilder) { |
| 420 b.hasCodeRange = true; |
| 421 b.codeOffset = node.offset; |
| 422 b.codeLength = node.length; |
| 423 } else if (b is UnlinkedTypedefBuilder) { |
| 424 b.hasCodeRange = true; |
| 425 b.codeOffset = node.offset; |
| 426 b.codeLength = node.length; |
| 427 } else if (b is UnlinkedTypeParamBuilder) { |
| 428 b.hasCodeRange = true; |
| 429 b.codeOffset = node.offset; |
| 430 b.codeLength = node.length; |
| 431 } else if (b is UnlinkedUnitBuilder) { |
| 432 b.hasCodeRange = true; |
| 433 b.codeOffset = node.offset; |
| 434 b.codeLength = node.length; |
| 435 } else if (b is UnlinkedVariableBuilder) { |
| 436 b.hasCodeRange = true; |
| 437 b.codeOffset = node.offset; |
| 438 b.codeLength = node.length; |
| 439 } |
| 440 } |
| 441 |
| 405 /** | 442 /** |
| 406 * Serialize a [Combinator] into an [UnlinkedCombinator]. | 443 * Serialize a [Combinator] into an [UnlinkedCombinator]. |
| 407 */ | 444 */ |
| 408 UnlinkedCombinatorBuilder serializeCombinator(Combinator combinator) { | 445 UnlinkedCombinatorBuilder serializeCombinator(Combinator combinator) { |
| 409 UnlinkedCombinatorBuilder b = new UnlinkedCombinatorBuilder(); | 446 UnlinkedCombinatorBuilder b = new UnlinkedCombinatorBuilder(); |
| 410 if (combinator is ShowCombinator) { | 447 if (combinator is ShowCombinator) { |
| 411 b.shows = | 448 b.shows = |
| 412 combinator.shownNames.map((SimpleIdentifier id) => id.name).toList(); | 449 combinator.shownNames.map((SimpleIdentifier id) => id.name).toList(); |
| 413 b.offset = combinator.offset; | 450 b.offset = combinator.offset; |
| 414 b.end = combinator.end; | 451 b.end = combinator.end; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 431 if (!hasCoreBeenImported) { | 468 if (!hasCoreBeenImported) { |
| 432 unlinkedImports.add(new UnlinkedImportBuilder(isImplicit: true)); | 469 unlinkedImports.add(new UnlinkedImportBuilder(isImplicit: true)); |
| 433 } | 470 } |
| 434 compilationUnit.declarations.accept(this); | 471 compilationUnit.declarations.accept(this); |
| 435 UnlinkedUnitBuilder b = new UnlinkedUnitBuilder(); | 472 UnlinkedUnitBuilder b = new UnlinkedUnitBuilder(); |
| 436 b.libraryName = libraryName; | 473 b.libraryName = libraryName; |
| 437 b.libraryNameOffset = libraryNameOffset; | 474 b.libraryNameOffset = libraryNameOffset; |
| 438 b.libraryNameLength = libraryNameLength; | 475 b.libraryNameLength = libraryNameLength; |
| 439 b.libraryDocumentationComment = libraryDocumentationComment; | 476 b.libraryDocumentationComment = libraryDocumentationComment; |
| 440 b.libraryAnnotations = libraryAnnotations; | 477 b.libraryAnnotations = libraryAnnotations; |
| 478 serializeCodeRange(b, compilationUnit); |
| 441 b.classes = classes; | 479 b.classes = classes; |
| 442 b.enums = enums; | 480 b.enums = enums; |
| 443 b.executables = executables; | 481 b.executables = executables; |
| 444 b.exports = exports; | 482 b.exports = exports; |
| 445 b.imports = unlinkedImports; | 483 b.imports = unlinkedImports; |
| 446 b.parts = parts; | 484 b.parts = parts; |
| 447 b.references = unlinkedReferences; | 485 b.references = unlinkedReferences; |
| 448 b.typedefs = typedefs; | 486 b.typedefs = typedefs; |
| 449 b.variables = variables; | 487 b.variables = variables; |
| 450 b.publicNamespace = computePublicNamespace(compilationUnit); | 488 b.publicNamespace = computePublicNamespace(compilationUnit); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 478 text: text, | 516 text: text, |
| 479 offset: documentationComment.offset, | 517 offset: documentationComment.offset, |
| 480 length: documentationComment.length); | 518 length: documentationComment.length); |
| 481 } | 519 } |
| 482 | 520 |
| 483 /** | 521 /** |
| 484 * Serialize a [FunctionDeclaration] or [MethodDeclaration] into an | 522 * Serialize a [FunctionDeclaration] or [MethodDeclaration] into an |
| 485 * [UnlinkedExecutable]. | 523 * [UnlinkedExecutable]. |
| 486 */ | 524 */ |
| 487 UnlinkedExecutableBuilder serializeExecutable( | 525 UnlinkedExecutableBuilder serializeExecutable( |
| 526 AstNode node, |
| 488 String name, | 527 String name, |
| 489 int nameOffset, | 528 int nameOffset, |
| 490 bool isGetter, | 529 bool isGetter, |
| 491 bool isSetter, | 530 bool isSetter, |
| 492 TypeName returnType, | 531 TypeName returnType, |
| 493 FormalParameterList formalParameters, | 532 FormalParameterList formalParameters, |
| 494 FunctionBody body, | 533 FunctionBody body, |
| 495 bool isTopLevel, | 534 bool isTopLevel, |
| 496 bool isDeclaredStatic, | 535 bool isDeclaredStatic, |
| 497 Comment documentationComment, | 536 Comment documentationComment, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 for (int i = 0; i < formalParameters.parameters.length; i++) { | 569 for (int i = 0; i < formalParameters.parameters.length; i++) { |
| 531 if (!b.parameters[i].isFunctionTyped && | 570 if (!b.parameters[i].isFunctionTyped && |
| 532 b.parameters[i].type == null) { | 571 b.parameters[i].type == null) { |
| 533 b.parameters[i].inferredTypeSlot = assignSlot(); | 572 b.parameters[i].inferredTypeSlot = assignSlot(); |
| 534 } | 573 } |
| 535 } | 574 } |
| 536 } | 575 } |
| 537 } | 576 } |
| 538 b.documentationComment = serializeDocumentation(documentationComment); | 577 b.documentationComment = serializeDocumentation(documentationComment); |
| 539 b.annotations = serializeAnnotations(annotations); | 578 b.annotations = serializeAnnotations(annotations); |
| 579 serializeCodeRange(b, node); |
| 540 if (returnType == null && !isSemanticallyStatic) { | 580 if (returnType == null && !isSemanticallyStatic) { |
| 541 b.inferredReturnTypeSlot = assignSlot(); | 581 b.inferredReturnTypeSlot = assignSlot(); |
| 542 } | 582 } |
| 543 b.visibleOffset = enclosingBlock?.offset; | 583 b.visibleOffset = enclosingBlock?.offset; |
| 544 b.visibleLength = enclosingBlock?.length; | 584 b.visibleLength = enclosingBlock?.length; |
| 545 serializeFunctionBody(b, body); | 585 serializeFunctionBody(b, body); |
| 546 scopes.removeLast(); | 586 scopes.removeLast(); |
| 547 assert(scopes.length == oldScopesLength); | 587 assert(scopes.length == oldScopesLength); |
| 548 return b; | 588 return b; |
| 549 } | 589 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 | 648 |
| 609 /** | 649 /** |
| 610 * Serialize a [FieldFormalParameter], [FunctionTypedFormalParameter], or | 650 * Serialize a [FieldFormalParameter], [FunctionTypedFormalParameter], or |
| 611 * [SimpleFormalParameter] into an [UnlinkedParam]. | 651 * [SimpleFormalParameter] into an [UnlinkedParam]. |
| 612 */ | 652 */ |
| 613 UnlinkedParamBuilder serializeParameter(NormalFormalParameter node) { | 653 UnlinkedParamBuilder serializeParameter(NormalFormalParameter node) { |
| 614 UnlinkedParamBuilder b = new UnlinkedParamBuilder(); | 654 UnlinkedParamBuilder b = new UnlinkedParamBuilder(); |
| 615 b.name = node.identifier.name; | 655 b.name = node.identifier.name; |
| 616 b.nameOffset = node.identifier.offset; | 656 b.nameOffset = node.identifier.offset; |
| 617 b.annotations = serializeAnnotations(node.metadata); | 657 b.annotations = serializeAnnotations(node.metadata); |
| 658 serializeCodeRange(b, node); |
| 618 switch (node.kind) { | 659 switch (node.kind) { |
| 619 case ParameterKind.REQUIRED: | 660 case ParameterKind.REQUIRED: |
| 620 b.kind = UnlinkedParamKind.required; | 661 b.kind = UnlinkedParamKind.required; |
| 621 break; | 662 break; |
| 622 case ParameterKind.POSITIONAL: | 663 case ParameterKind.POSITIONAL: |
| 623 b.kind = UnlinkedParamKind.positional; | 664 b.kind = UnlinkedParamKind.positional; |
| 624 break; | 665 break; |
| 625 case ParameterKind.NAMED: | 666 case ParameterKind.NAMED: |
| 626 b.kind = UnlinkedParamKind.named; | 667 b.kind = UnlinkedParamKind.named; |
| 627 break; | 668 break; |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 for (VariableDeclaration variable in variables.variables) { | 806 for (VariableDeclaration variable in variables.variables) { |
| 766 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(); | 807 UnlinkedVariableBuilder b = new UnlinkedVariableBuilder(); |
| 767 b.isFinal = variables.isFinal; | 808 b.isFinal = variables.isFinal; |
| 768 b.isConst = variables.isConst; | 809 b.isConst = variables.isConst; |
| 769 b.isStatic = isDeclaredStatic; | 810 b.isStatic = isDeclaredStatic; |
| 770 b.name = variable.name.name; | 811 b.name = variable.name.name; |
| 771 b.nameOffset = variable.name.offset; | 812 b.nameOffset = variable.name.offset; |
| 772 b.type = serializeTypeName(variables.type); | 813 b.type = serializeTypeName(variables.type); |
| 773 b.documentationComment = serializeDocumentation(documentationComment); | 814 b.documentationComment = serializeDocumentation(documentationComment); |
| 774 b.annotations = serializeAnnotations(annotations); | 815 b.annotations = serializeAnnotations(annotations); |
| 816 serializeCodeRange(b, variables.parent); |
| 775 if (variable.isConst || | 817 if (variable.isConst || |
| 776 variable.isFinal && isField && !isDeclaredStatic) { | 818 variable.isFinal && isField && !isDeclaredStatic) { |
| 777 Expression initializer = variable.initializer; | 819 Expression initializer = variable.initializer; |
| 778 if (initializer != null) { | 820 if (initializer != null) { |
| 779 b.constExpr = serializeConstExpr(initializer); | 821 b.constExpr = serializeConstExpr(initializer); |
| 780 } | 822 } |
| 781 } | 823 } |
| 782 if (variable.initializer != null && | 824 if (variable.initializer != null && |
| 783 (variables.isFinal || variables.isConst)) { | 825 (variables.isFinal || variables.isConst)) { |
| 784 b.propagatedTypeSlot = assignSlot(); | 826 b.propagatedTypeSlot = assignSlot(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 801 enclosingBlock = node; | 843 enclosingBlock = node; |
| 802 super.visitBlock(node); | 844 super.visitBlock(node); |
| 803 enclosingBlock = oldBlock; | 845 enclosingBlock = oldBlock; |
| 804 } | 846 } |
| 805 | 847 |
| 806 @override | 848 @override |
| 807 void visitClassDeclaration(ClassDeclaration node) { | 849 void visitClassDeclaration(ClassDeclaration node) { |
| 808 TypeName superclass = | 850 TypeName superclass = |
| 809 node.extendsClause == null ? null : node.extendsClause.superclass; | 851 node.extendsClause == null ? null : node.extendsClause.superclass; |
| 810 serializeClass( | 852 serializeClass( |
| 853 node, |
| 811 node.abstractKeyword, | 854 node.abstractKeyword, |
| 812 node.name.name, | 855 node.name.name, |
| 813 node.name.offset, | 856 node.name.offset, |
| 814 node.typeParameters, | 857 node.typeParameters, |
| 815 superclass, | 858 superclass, |
| 816 node.withClause, | 859 node.withClause, |
| 817 node.implementsClause, | 860 node.implementsClause, |
| 818 node.members, | 861 node.members, |
| 819 false, | 862 false, |
| 820 node.documentationComment, | 863 node.documentationComment, |
| 821 node.metadata); | 864 node.metadata); |
| 822 } | 865 } |
| 823 | 866 |
| 824 @override | 867 @override |
| 825 void visitClassTypeAlias(ClassTypeAlias node) { | 868 void visitClassTypeAlias(ClassTypeAlias node) { |
| 826 serializeClass( | 869 serializeClass( |
| 870 node, |
| 827 node.abstractKeyword, | 871 node.abstractKeyword, |
| 828 node.name.name, | 872 node.name.name, |
| 829 node.name.offset, | 873 node.name.offset, |
| 830 node.typeParameters, | 874 node.typeParameters, |
| 831 node.superclass, | 875 node.superclass, |
| 832 node.withClause, | 876 node.withClause, |
| 833 node.implementsClause, | 877 node.implementsClause, |
| 834 null, | 878 null, |
| 835 true, | 879 true, |
| 836 node.documentationComment, | 880 node.documentationComment, |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 908 b.nameOffset = node.name.offset; | 952 b.nameOffset = node.name.offset; |
| 909 b.values = node.constants | 953 b.values = node.constants |
| 910 .map((EnumConstantDeclaration value) => new UnlinkedEnumValueBuilder( | 954 .map((EnumConstantDeclaration value) => new UnlinkedEnumValueBuilder( |
| 911 documentationComment: | 955 documentationComment: |
| 912 serializeDocumentation(value.documentationComment), | 956 serializeDocumentation(value.documentationComment), |
| 913 name: value.name.name, | 957 name: value.name.name, |
| 914 nameOffset: value.name.offset)) | 958 nameOffset: value.name.offset)) |
| 915 .toList(); | 959 .toList(); |
| 916 b.documentationComment = serializeDocumentation(node.documentationComment); | 960 b.documentationComment = serializeDocumentation(node.documentationComment); |
| 917 b.annotations = serializeAnnotations(node.metadata); | 961 b.annotations = serializeAnnotations(node.metadata); |
| 962 serializeCodeRange(b, node); |
| 918 enums.add(b); | 963 enums.add(b); |
| 919 } | 964 } |
| 920 | 965 |
| 921 @override | 966 @override |
| 922 void visitExportDirective(ExportDirective node) { | 967 void visitExportDirective(ExportDirective node) { |
| 923 UnlinkedExportNonPublicBuilder b = new UnlinkedExportNonPublicBuilder( | 968 UnlinkedExportNonPublicBuilder b = new UnlinkedExportNonPublicBuilder( |
| 924 uriOffset: node.uri.offset, uriEnd: node.uri.end, offset: node.offset); | 969 uriOffset: node.uri.offset, uriEnd: node.uri.end, offset: node.offset); |
| 925 b.annotations = serializeAnnotations(node.metadata); | 970 b.annotations = serializeAnnotations(node.metadata); |
| 926 exports.add(b); | 971 exports.add(b); |
| 927 } | 972 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 943 } else { | 988 } else { |
| 944 b.type = serializeTypeName(node.type); | 989 b.type = serializeTypeName(node.type); |
| 945 } | 990 } |
| 946 } | 991 } |
| 947 return b; | 992 return b; |
| 948 } | 993 } |
| 949 | 994 |
| 950 @override | 995 @override |
| 951 void visitFunctionDeclaration(FunctionDeclaration node) { | 996 void visitFunctionDeclaration(FunctionDeclaration node) { |
| 952 executables.add(serializeExecutable( | 997 executables.add(serializeExecutable( |
| 998 node, |
| 953 node.name.name, | 999 node.name.name, |
| 954 node.name.offset, | 1000 node.name.offset, |
| 955 node.isGetter, | 1001 node.isGetter, |
| 956 node.isSetter, | 1002 node.isSetter, |
| 957 node.returnType, | 1003 node.returnType, |
| 958 node.functionExpression.parameters, | 1004 node.functionExpression.parameters, |
| 959 node.functionExpression.body, | 1005 node.functionExpression.body, |
| 960 true, | 1006 true, |
| 961 false, | 1007 false, |
| 962 node.documentationComment, | 1008 node.documentationComment, |
| 963 node.metadata, | 1009 node.metadata, |
| 964 node.functionExpression.typeParameters, | 1010 node.functionExpression.typeParameters, |
| 965 node.externalKeyword != null)); | 1011 node.externalKeyword != null)); |
| 966 } | 1012 } |
| 967 | 1013 |
| 968 @override | 1014 @override |
| 969 void visitFunctionExpression(FunctionExpression node) { | 1015 void visitFunctionExpression(FunctionExpression node) { |
| 970 if (node.parent is! FunctionDeclaration) { | 1016 if (node.parent is! FunctionDeclaration) { |
| 971 executables.add(serializeExecutable( | 1017 executables.add(serializeExecutable( |
| 1018 node, |
| 972 null, | 1019 null, |
| 973 node.offset, | 1020 node.offset, |
| 974 false, | 1021 false, |
| 975 false, | 1022 false, |
| 976 null, | 1023 null, |
| 977 node.parameters, | 1024 node.parameters, |
| 978 node.body, | 1025 node.body, |
| 979 false, | 1026 false, |
| 980 false, | 1027 false, |
| 981 null, | 1028 null, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 997 serializeTypeParameters(node.typeParameters, typeParameterScope); | 1044 serializeTypeParameters(node.typeParameters, typeParameterScope); |
| 998 EntityRefBuilder serializedReturnType = serializeTypeName(node.returnType); | 1045 EntityRefBuilder serializedReturnType = serializeTypeName(node.returnType); |
| 999 if (serializedReturnType != null) { | 1046 if (serializedReturnType != null) { |
| 1000 b.returnType = serializedReturnType; | 1047 b.returnType = serializedReturnType; |
| 1001 } | 1048 } |
| 1002 b.parameters = node.parameters.parameters | 1049 b.parameters = node.parameters.parameters |
| 1003 .map((FormalParameter p) => p.accept(this)) | 1050 .map((FormalParameter p) => p.accept(this)) |
| 1004 .toList(); | 1051 .toList(); |
| 1005 b.documentationComment = serializeDocumentation(node.documentationComment); | 1052 b.documentationComment = serializeDocumentation(node.documentationComment); |
| 1006 b.annotations = serializeAnnotations(node.metadata); | 1053 b.annotations = serializeAnnotations(node.metadata); |
| 1054 serializeCodeRange(b, node); |
| 1007 typedefs.add(b); | 1055 typedefs.add(b); |
| 1008 scopes.removeLast(); | 1056 scopes.removeLast(); |
| 1009 assert(scopes.length == oldScopesLength); | 1057 assert(scopes.length == oldScopesLength); |
| 1010 } | 1058 } |
| 1011 | 1059 |
| 1012 @override | 1060 @override |
| 1013 UnlinkedParamBuilder visitFunctionTypedFormalParameter( | 1061 UnlinkedParamBuilder visitFunctionTypedFormalParameter( |
| 1014 FunctionTypedFormalParameter node) { | 1062 FunctionTypedFormalParameter node) { |
| 1015 UnlinkedParamBuilder b = serializeParameter(node); | 1063 UnlinkedParamBuilder b = serializeParameter(node); |
| 1016 b.isFunctionTyped = true; | 1064 b.isFunctionTyped = true; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1056 libraryNameOffset = node.name.offset; | 1104 libraryNameOffset = node.name.offset; |
| 1057 libraryNameLength = node.name.length; | 1105 libraryNameLength = node.name.length; |
| 1058 libraryDocumentationComment = | 1106 libraryDocumentationComment = |
| 1059 serializeDocumentation(node.documentationComment); | 1107 serializeDocumentation(node.documentationComment); |
| 1060 libraryAnnotations = serializeAnnotations(node.metadata); | 1108 libraryAnnotations = serializeAnnotations(node.metadata); |
| 1061 } | 1109 } |
| 1062 | 1110 |
| 1063 @override | 1111 @override |
| 1064 void visitMethodDeclaration(MethodDeclaration node) { | 1112 void visitMethodDeclaration(MethodDeclaration node) { |
| 1065 executables.add(serializeExecutable( | 1113 executables.add(serializeExecutable( |
| 1114 node, |
| 1066 node.name.name, | 1115 node.name.name, |
| 1067 node.name.offset, | 1116 node.name.offset, |
| 1068 node.isGetter, | 1117 node.isGetter, |
| 1069 node.isSetter, | 1118 node.isSetter, |
| 1070 node.returnType, | 1119 node.returnType, |
| 1071 node.parameters, | 1120 node.parameters, |
| 1072 node.body, | 1121 node.body, |
| 1073 false, | 1122 false, |
| 1074 node.isStatic, | 1123 node.isStatic, |
| 1075 node.documentationComment, | 1124 node.documentationComment, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1104 | 1153 |
| 1105 @override | 1154 @override |
| 1106 UnlinkedTypeParamBuilder visitTypeParameter(TypeParameter node) { | 1155 UnlinkedTypeParamBuilder visitTypeParameter(TypeParameter node) { |
| 1107 UnlinkedTypeParamBuilder b = new UnlinkedTypeParamBuilder(); | 1156 UnlinkedTypeParamBuilder b = new UnlinkedTypeParamBuilder(); |
| 1108 b.name = node.name.name; | 1157 b.name = node.name.name; |
| 1109 b.nameOffset = node.name.offset; | 1158 b.nameOffset = node.name.offset; |
| 1110 if (node.bound != null) { | 1159 if (node.bound != null) { |
| 1111 b.bound = serializeTypeName(node.bound); | 1160 b.bound = serializeTypeName(node.bound); |
| 1112 } | 1161 } |
| 1113 b.annotations = serializeAnnotations(node.metadata); | 1162 b.annotations = serializeAnnotations(node.metadata); |
| 1163 serializeCodeRange(b, node); |
| 1114 return b; | 1164 return b; |
| 1115 } | 1165 } |
| 1116 | 1166 |
| 1117 @override | 1167 @override |
| 1118 void visitVariableDeclarationStatement(VariableDeclarationStatement node) { | 1168 void visitVariableDeclarationStatement(VariableDeclarationStatement node) { |
| 1119 serializeVariables(node.variables, false, null, null, false); | 1169 serializeVariables(node.variables, false, null, null, false); |
| 1120 } | 1170 } |
| 1121 | 1171 |
| 1122 /** | 1172 /** |
| 1123 * Helper method to determine if a given [typeName] refers to `dynamic`. | 1173 * Helper method to determine if a given [typeName] refers to `dynamic`. |
| 1124 */ | 1174 */ |
| 1125 static bool isDynamic(TypeName typeName) { | 1175 static bool isDynamic(TypeName typeName) { |
| 1126 Identifier name = typeName.name; | 1176 Identifier name = typeName.name; |
| 1127 return name is SimpleIdentifier && name.name == 'dynamic'; | 1177 return name is SimpleIdentifier && name.name == 'dynamic'; |
| 1128 } | 1178 } |
| 1129 } | 1179 } |
| 1130 | 1180 |
| 1131 /** | 1181 /** |
| 1132 * A [_TypeParameterScope] is a [_Scope] which defines [_ScopedTypeParameter]s. | 1182 * A [_TypeParameterScope] is a [_Scope] which defines [_ScopedTypeParameter]s. |
| 1133 */ | 1183 */ |
| 1134 class _TypeParameterScope extends _Scope { | 1184 class _TypeParameterScope extends _Scope { |
| 1135 /** | 1185 /** |
| 1136 * Get the number of [_ScopedTypeParameter]s defined in this | 1186 * Get the number of [_ScopedTypeParameter]s defined in this |
| 1137 * [_TypeParameterScope]. | 1187 * [_TypeParameterScope]. |
| 1138 */ | 1188 */ |
| 1139 int get length => _definedNames.length; | 1189 int get length => _definedNames.length; |
| 1140 } | 1190 } |
| OLD | NEW |