Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 analyzer.src.dart.element.builder; | 5 library analyzer.src.dart.element.builder; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 375 if (node.exceptionType == null) { | 375 if (node.exceptionType == null) { |
| 376 exception.hasImplicitType = true; | 376 exception.hasImplicitType = true; |
| 377 } | 377 } |
| 378 _currentHolder.addLocalVariable(exception); | 378 _currentHolder.addLocalVariable(exception); |
| 379 exceptionParameter.staticElement = exception; | 379 exceptionParameter.staticElement = exception; |
| 380 // stack trace | 380 // stack trace |
| 381 SimpleIdentifier stackTraceParameter = node.stackTraceParameter; | 381 SimpleIdentifier stackTraceParameter = node.stackTraceParameter; |
| 382 if (stackTraceParameter != null) { | 382 if (stackTraceParameter != null) { |
| 383 LocalVariableElementImpl stackTrace = | 383 LocalVariableElementImpl stackTrace = |
| 384 new LocalVariableElementImpl.forNode(stackTraceParameter); | 384 new LocalVariableElementImpl.forNode(stackTraceParameter); |
| 385 _setCodeRange(stackTrace, stackTraceParameter); | |
| 385 _currentHolder.addLocalVariable(stackTrace); | 386 _currentHolder.addLocalVariable(stackTrace); |
| 386 stackTraceParameter.staticElement = stackTrace; | 387 stackTraceParameter.staticElement = stackTrace; |
| 387 } | 388 } |
| 388 } | 389 } |
| 389 return super.visitCatchClause(node); | 390 return super.visitCatchClause(node); |
| 390 } | 391 } |
| 391 | 392 |
| 392 @override | 393 @override |
| 393 Object visitClassDeclaration(ClassDeclaration node) { | 394 Object visitClassDeclaration(ClassDeclaration node) { |
| 394 ElementHolder holder = new ElementHolder(); | 395 ElementHolder holder = new ElementHolder(); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 406 _buildFieldMap(holder.fieldsWithoutFlushing); | 407 _buildFieldMap(holder.fieldsWithoutFlushing); |
| 407 int count = nonFields.length; | 408 int count = nonFields.length; |
| 408 for (int i = 0; i < count; i++) { | 409 for (int i = 0; i < count; i++) { |
| 409 nonFields[i].accept(this); | 410 nonFields[i].accept(this); |
| 410 } | 411 } |
| 411 } finally { | 412 } finally { |
| 412 _currentHolder = previousHolder; | 413 _currentHolder = previousHolder; |
| 413 } | 414 } |
| 414 SimpleIdentifier className = node.name; | 415 SimpleIdentifier className = node.name; |
| 415 ClassElementImpl element = new ClassElementImpl.forNode(className); | 416 ClassElementImpl element = new ClassElementImpl.forNode(className); |
| 417 _setCodeRange(element, node); | |
| 416 element.metadata = _createElementAnnotations(node.metadata); | 418 element.metadata = _createElementAnnotations(node.metadata); |
| 417 List<TypeParameterElement> typeParameters = holder.typeParameters; | 419 List<TypeParameterElement> typeParameters = holder.typeParameters; |
| 418 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); | 420 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); |
| 419 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); | 421 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); |
| 420 interfaceType.typeArguments = typeArguments; | 422 interfaceType.typeArguments = typeArguments; |
| 421 element.type = interfaceType; | 423 element.type = interfaceType; |
| 422 element.typeParameters = typeParameters; | 424 element.typeParameters = typeParameters; |
| 423 setElementDocumentationComment(element, node); | 425 setElementDocumentationComment(element, node); |
| 424 element.abstract = node.isAbstract; | 426 element.abstract = node.isAbstract; |
| 425 element.accessors = holder.accessors; | 427 element.accessors = holder.accessors; |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 455 ClassElement classElement = node.element; | 457 ClassElement classElement = node.element; |
| 456 _buildFieldMap(classElement.fields); | 458 _buildFieldMap(classElement.fields); |
| 457 } | 459 } |
| 458 | 460 |
| 459 @override | 461 @override |
| 460 Object visitClassTypeAlias(ClassTypeAlias node) { | 462 Object visitClassTypeAlias(ClassTypeAlias node) { |
| 461 ElementHolder holder = new ElementHolder(); | 463 ElementHolder holder = new ElementHolder(); |
| 462 _visitChildren(holder, node); | 464 _visitChildren(holder, node); |
| 463 SimpleIdentifier className = node.name; | 465 SimpleIdentifier className = node.name; |
| 464 ClassElementImpl element = new ClassElementImpl.forNode(className); | 466 ClassElementImpl element = new ClassElementImpl.forNode(className); |
| 467 _setCodeRange(element, node); | |
| 465 element.metadata = _createElementAnnotations(node.metadata); | 468 element.metadata = _createElementAnnotations(node.metadata); |
| 466 element.abstract = node.abstractKeyword != null; | 469 element.abstract = node.abstractKeyword != null; |
| 467 element.mixinApplication = true; | 470 element.mixinApplication = true; |
| 468 List<TypeParameterElement> typeParameters = holder.typeParameters; | 471 List<TypeParameterElement> typeParameters = holder.typeParameters; |
| 469 element.typeParameters = typeParameters; | 472 element.typeParameters = typeParameters; |
| 470 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); | 473 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); |
| 471 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); | 474 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); |
| 472 interfaceType.typeArguments = typeArguments; | 475 interfaceType.typeArguments = typeArguments; |
| 473 element.type = interfaceType; | 476 element.type = interfaceType; |
| 474 setElementDocumentationComment(element, node); | 477 setElementDocumentationComment(element, node); |
| 475 _currentHolder.addType(element); | 478 _currentHolder.addType(element); |
| 476 className.staticElement = element; | 479 className.staticElement = element; |
| 477 holder.validate(); | 480 holder.validate(); |
| 478 return null; | 481 return null; |
| 479 } | 482 } |
| 480 | 483 |
| 481 @override | 484 @override |
| 485 Object visitCompilationUnit(CompilationUnit node) { | |
| 486 if (compilationUnitElement is ElementImpl) { | |
| 487 _setCodeRange(compilationUnitElement as ElementImpl, node); | |
| 488 } | |
| 489 return super.visitCompilationUnit(node); | |
| 490 } | |
| 491 | |
| 492 @override | |
| 482 Object visitConstructorDeclaration(ConstructorDeclaration node) { | 493 Object visitConstructorDeclaration(ConstructorDeclaration node) { |
| 483 ElementHolder holder = new ElementHolder(); | 494 ElementHolder holder = new ElementHolder(); |
| 484 bool wasInFunction = _inFunction; | 495 bool wasInFunction = _inFunction; |
| 485 _inFunction = true; | 496 _inFunction = true; |
| 486 try { | 497 try { |
| 487 _visitChildren(holder, node); | 498 _visitChildren(holder, node); |
| 488 } finally { | 499 } finally { |
| 489 _inFunction = wasInFunction; | 500 _inFunction = wasInFunction; |
| 490 } | 501 } |
| 491 FunctionBody body = node.body; | 502 FunctionBody body = node.body; |
| 492 SimpleIdentifier constructorName = node.name; | 503 SimpleIdentifier constructorName = node.name; |
| 493 ConstructorElementImpl element = | 504 ConstructorElementImpl element = |
| 494 new ConstructorElementImpl.forNode(constructorName); | 505 new ConstructorElementImpl.forNode(constructorName); |
| 506 _setCodeRange(element, node); | |
| 495 element.metadata = _createElementAnnotations(node.metadata); | 507 element.metadata = _createElementAnnotations(node.metadata); |
| 496 setElementDocumentationComment(element, node); | 508 setElementDocumentationComment(element, node); |
| 497 if (node.externalKeyword != null) { | 509 if (node.externalKeyword != null) { |
| 498 element.external = true; | 510 element.external = true; |
| 499 } | 511 } |
| 500 if (node.factoryKeyword != null) { | 512 if (node.factoryKeyword != null) { |
| 501 element.factory = true; | 513 element.factory = true; |
| 502 } | 514 } |
| 503 element.functions = holder.functions; | 515 element.functions = holder.functions; |
| 504 element.labels = holder.labels; | 516 element.labels = holder.labels; |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 526 } | 538 } |
| 527 holder.validate(); | 539 holder.validate(); |
| 528 return null; | 540 return null; |
| 529 } | 541 } |
| 530 | 542 |
| 531 @override | 543 @override |
| 532 Object visitDeclaredIdentifier(DeclaredIdentifier node) { | 544 Object visitDeclaredIdentifier(DeclaredIdentifier node) { |
| 533 SimpleIdentifier variableName = node.identifier; | 545 SimpleIdentifier variableName = node.identifier; |
| 534 LocalVariableElementImpl element = | 546 LocalVariableElementImpl element = |
| 535 new LocalVariableElementImpl.forNode(variableName); | 547 new LocalVariableElementImpl.forNode(variableName); |
| 548 _setCodeRange(element, node); | |
| 536 element.metadata = _createElementAnnotations(node.metadata); | 549 element.metadata = _createElementAnnotations(node.metadata); |
| 537 ForEachStatement statement = node.parent as ForEachStatement; | 550 ForEachStatement statement = node.parent as ForEachStatement; |
| 538 int declarationEnd = node.offset + node.length; | 551 int declarationEnd = node.offset + node.length; |
| 539 int statementEnd = statement.offset + statement.length; | 552 int statementEnd = statement.offset + statement.length; |
| 540 element.setVisibleRange(declarationEnd, statementEnd - declarationEnd - 1); | 553 element.setVisibleRange(declarationEnd, statementEnd - declarationEnd - 1); |
| 541 element.const3 = node.isConst; | 554 element.const3 = node.isConst; |
| 542 element.final2 = node.isFinal; | 555 element.final2 = node.isFinal; |
| 543 if (node.type == null) { | 556 if (node.type == null) { |
| 544 element.hasImplicitType = true; | 557 element.hasImplicitType = true; |
| 545 } | 558 } |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 558 parameter = | 571 parameter = |
| 559 new DefaultFieldFormalParameterElementImpl.forNode(parameterName); | 572 new DefaultFieldFormalParameterElementImpl.forNode(parameterName); |
| 560 FieldElement field = | 573 FieldElement field = |
| 561 _fieldMap == null ? null : _fieldMap[parameterName.name]; | 574 _fieldMap == null ? null : _fieldMap[parameterName.name]; |
| 562 if (field != null) { | 575 if (field != null) { |
| 563 (parameter as DefaultFieldFormalParameterElementImpl).field = field; | 576 (parameter as DefaultFieldFormalParameterElementImpl).field = field; |
| 564 } | 577 } |
| 565 } else { | 578 } else { |
| 566 parameter = new DefaultParameterElementImpl.forNode(parameterName); | 579 parameter = new DefaultParameterElementImpl.forNode(parameterName); |
| 567 } | 580 } |
| 581 _setCodeRange(parameter, node); | |
| 568 parameter.const3 = node.isConst; | 582 parameter.const3 = node.isConst; |
| 569 parameter.final2 = node.isFinal; | 583 parameter.final2 = node.isFinal; |
| 570 parameter.parameterKind = node.kind; | 584 parameter.parameterKind = node.kind; |
| 571 // set initializer, default value range | 585 // set initializer, default value range |
| 572 Expression defaultValue = node.defaultValue; | 586 Expression defaultValue = node.defaultValue; |
| 573 if (defaultValue != null) { | 587 if (defaultValue != null) { |
| 574 _visit(holder, defaultValue); | 588 _visit(holder, defaultValue); |
| 575 FunctionElementImpl initializer = | 589 FunctionElementImpl initializer = |
| 576 new FunctionElementImpl.forOffset(defaultValue.beginToken.offset); | 590 new FunctionElementImpl.forOffset(defaultValue.beginToken.offset); |
| 577 initializer.hasImplicitReturnType = true; | 591 initializer.hasImplicitReturnType = true; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 594 parameterName.staticElement = parameter; | 608 parameterName.staticElement = parameter; |
| 595 normalParameter.accept(this); | 609 normalParameter.accept(this); |
| 596 holder.validate(); | 610 holder.validate(); |
| 597 return null; | 611 return null; |
| 598 } | 612 } |
| 599 | 613 |
| 600 @override | 614 @override |
| 601 Object visitEnumDeclaration(EnumDeclaration node) { | 615 Object visitEnumDeclaration(EnumDeclaration node) { |
| 602 SimpleIdentifier enumName = node.name; | 616 SimpleIdentifier enumName = node.name; |
| 603 ClassElementImpl enumElement = new ClassElementImpl.forNode(enumName); | 617 ClassElementImpl enumElement = new ClassElementImpl.forNode(enumName); |
| 618 _setCodeRange(enumElement, node); | |
| 604 enumElement.metadata = _createElementAnnotations(node.metadata); | 619 enumElement.metadata = _createElementAnnotations(node.metadata); |
| 605 enumElement.enum2 = true; | 620 enumElement.enum2 = true; |
| 606 setElementDocumentationComment(enumElement, node); | 621 setElementDocumentationComment(enumElement, node); |
| 607 InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement); | 622 InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement); |
| 608 enumElement.type = enumType; | 623 enumElement.type = enumType; |
| 609 // The equivalent code for enums in the spec shows a single constructor, | 624 // The equivalent code for enums in the spec shows a single constructor, |
| 610 // but that constructor is not callable (since it is a compile-time error | 625 // but that constructor is not callable (since it is a compile-time error |
| 611 // to subclass, mix-in, implement, or explicitly instantiate an enum). So | 626 // to subclass, mix-in, implement, or explicitly instantiate an enum). So |
| 612 // we represent this as having no constructors. | 627 // we represent this as having no constructors. |
| 613 enumElement.constructors = ConstructorElement.EMPTY_LIST; | 628 enumElement.constructors = ConstructorElement.EMPTY_LIST; |
| 614 _currentHolder.addEnum(enumElement); | 629 _currentHolder.addEnum(enumElement); |
| 615 enumName.staticElement = enumElement; | 630 enumName.staticElement = enumElement; |
| 616 return super.visitEnumDeclaration(node); | 631 return super.visitEnumDeclaration(node); |
| 617 } | 632 } |
| 618 | 633 |
| 619 @override | 634 @override |
| 620 Object visitExportDirective(ExportDirective node) { | 635 Object visitExportDirective(ExportDirective node) { |
| 621 _createElementAnnotations(node.metadata); | 636 _createElementAnnotations(node.metadata); |
| 622 return super.visitExportDirective(node); | 637 return super.visitExportDirective(node); |
| 623 } | 638 } |
| 624 | 639 |
| 625 @override | 640 @override |
| 626 Object visitFieldFormalParameter(FieldFormalParameter node) { | 641 Object visitFieldFormalParameter(FieldFormalParameter node) { |
| 627 if (node.parent is! DefaultFormalParameter) { | 642 if (node.parent is! DefaultFormalParameter) { |
| 628 SimpleIdentifier parameterName = node.identifier; | 643 SimpleIdentifier parameterName = node.identifier; |
| 629 FieldElement field = | 644 FieldElement field = |
| 630 _fieldMap == null ? null : _fieldMap[parameterName.name]; | 645 _fieldMap == null ? null : _fieldMap[parameterName.name]; |
| 631 FieldFormalParameterElementImpl parameter = | 646 FieldFormalParameterElementImpl parameter = |
| 632 new FieldFormalParameterElementImpl.forNode(parameterName); | 647 new FieldFormalParameterElementImpl.forNode(parameterName); |
| 648 _setCodeRange(parameter, node); | |
| 633 parameter.const3 = node.isConst; | 649 parameter.const3 = node.isConst; |
| 634 parameter.final2 = node.isFinal; | 650 parameter.final2 = node.isFinal; |
| 635 parameter.parameterKind = node.kind; | 651 parameter.parameterKind = node.kind; |
| 636 if (field != null) { | 652 if (field != null) { |
| 637 parameter.field = field; | 653 parameter.field = field; |
| 638 } | 654 } |
| 639 _currentHolder.addParameter(parameter); | 655 _currentHolder.addParameter(parameter); |
| 640 parameterName.staticElement = parameter; | 656 parameterName.staticElement = parameter; |
| 641 } | 657 } |
| 642 // | 658 // |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 664 _visitChildren(holder, node); | 680 _visitChildren(holder, node); |
| 665 } finally { | 681 } finally { |
| 666 _inFunction = wasInFunction; | 682 _inFunction = wasInFunction; |
| 667 } | 683 } |
| 668 FunctionBody body = expression.body; | 684 FunctionBody body = expression.body; |
| 669 Token property = node.propertyKeyword; | 685 Token property = node.propertyKeyword; |
| 670 if (property == null || _inFunction) { | 686 if (property == null || _inFunction) { |
| 671 SimpleIdentifier functionName = node.name; | 687 SimpleIdentifier functionName = node.name; |
| 672 FunctionElementImpl element = | 688 FunctionElementImpl element = |
| 673 new FunctionElementImpl.forNode(functionName); | 689 new FunctionElementImpl.forNode(functionName); |
| 690 _setCodeRange(element, node); | |
| 674 element.metadata = _createElementAnnotations(node.metadata); | 691 element.metadata = _createElementAnnotations(node.metadata); |
| 675 setElementDocumentationComment(element, node); | 692 setElementDocumentationComment(element, node); |
| 676 if (node.externalKeyword != null) { | 693 if (node.externalKeyword != null) { |
| 677 element.external = true; | 694 element.external = true; |
| 678 } | 695 } |
| 679 element.functions = holder.functions; | 696 element.functions = holder.functions; |
| 680 element.labels = holder.labels; | 697 element.labels = holder.labels; |
| 681 element.localVariables = holder.localVariables; | 698 element.localVariables = holder.localVariables; |
| 682 element.parameters = holder.parameters; | 699 element.parameters = holder.parameters; |
| 683 element.typeParameters = holder.typeParameters; | 700 element.typeParameters = holder.typeParameters; |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 711 .getTopLevelVariable(propertyName) as TopLevelVariableElementImpl; | 728 .getTopLevelVariable(propertyName) as TopLevelVariableElementImpl; |
| 712 if (variable == null) { | 729 if (variable == null) { |
| 713 variable = new TopLevelVariableElementImpl(node.name.name, -1); | 730 variable = new TopLevelVariableElementImpl(node.name.name, -1); |
| 714 variable.final2 = true; | 731 variable.final2 = true; |
| 715 variable.synthetic = true; | 732 variable.synthetic = true; |
| 716 _currentHolder.addTopLevelVariable(variable); | 733 _currentHolder.addTopLevelVariable(variable); |
| 717 } | 734 } |
| 718 if (node.isGetter) { | 735 if (node.isGetter) { |
| 719 PropertyAccessorElementImpl getter = | 736 PropertyAccessorElementImpl getter = |
| 720 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 737 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 738 _setCodeRange(getter, node); | |
| 721 getter.metadata = _createElementAnnotations(node.metadata); | 739 getter.metadata = _createElementAnnotations(node.metadata); |
| 722 setElementDocumentationComment(getter, node); | 740 setElementDocumentationComment(getter, node); |
| 723 if (node.externalKeyword != null) { | 741 if (node.externalKeyword != null) { |
| 724 getter.external = true; | 742 getter.external = true; |
| 725 } | 743 } |
| 726 getter.functions = holder.functions; | 744 getter.functions = holder.functions; |
| 727 getter.labels = holder.labels; | 745 getter.labels = holder.labels; |
| 728 getter.localVariables = holder.localVariables; | 746 getter.localVariables = holder.localVariables; |
| 729 if (body.isAsynchronous) { | 747 if (body.isAsynchronous) { |
| 730 getter.asynchronous = true; | 748 getter.asynchronous = true; |
| 731 } | 749 } |
| 732 if (body.isGenerator) { | 750 if (body.isGenerator) { |
| 733 getter.generator = true; | 751 getter.generator = true; |
| 734 } | 752 } |
| 735 getter.variable = variable; | 753 getter.variable = variable; |
| 736 getter.getter = true; | 754 getter.getter = true; |
| 737 getter.static = true; | 755 getter.static = true; |
| 738 variable.getter = getter; | 756 variable.getter = getter; |
| 739 if (node.returnType == null) { | 757 if (node.returnType == null) { |
| 740 getter.hasImplicitReturnType = true; | 758 getter.hasImplicitReturnType = true; |
| 741 } | 759 } |
| 742 _currentHolder.addAccessor(getter); | 760 _currentHolder.addAccessor(getter); |
| 743 expression.element = getter; | 761 expression.element = getter; |
| 744 propertyNameNode.staticElement = getter; | 762 propertyNameNode.staticElement = getter; |
| 745 } else { | 763 } else { |
| 746 PropertyAccessorElementImpl setter = | 764 PropertyAccessorElementImpl setter = |
| 747 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 765 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 766 _setCodeRange(setter, node); | |
| 748 setter.metadata = _createElementAnnotations(node.metadata); | 767 setter.metadata = _createElementAnnotations(node.metadata); |
| 749 setElementDocumentationComment(setter, node); | 768 setElementDocumentationComment(setter, node); |
| 750 if (node.externalKeyword != null) { | 769 if (node.externalKeyword != null) { |
| 751 setter.external = true; | 770 setter.external = true; |
| 752 } | 771 } |
| 753 setter.functions = holder.functions; | 772 setter.functions = holder.functions; |
| 754 setter.labels = holder.labels; | 773 setter.labels = holder.labels; |
| 755 setter.localVariables = holder.localVariables; | 774 setter.localVariables = holder.localVariables; |
| 756 setter.parameters = holder.parameters; | 775 setter.parameters = holder.parameters; |
| 757 if (body.isAsynchronous) { | 776 if (body.isAsynchronous) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 789 bool wasInFunction = _inFunction; | 808 bool wasInFunction = _inFunction; |
| 790 _inFunction = true; | 809 _inFunction = true; |
| 791 try { | 810 try { |
| 792 _visitChildren(holder, node); | 811 _visitChildren(holder, node); |
| 793 } finally { | 812 } finally { |
| 794 _inFunction = wasInFunction; | 813 _inFunction = wasInFunction; |
| 795 } | 814 } |
| 796 FunctionBody body = node.body; | 815 FunctionBody body = node.body; |
| 797 FunctionElementImpl element = | 816 FunctionElementImpl element = |
| 798 new FunctionElementImpl.forOffset(node.beginToken.offset); | 817 new FunctionElementImpl.forOffset(node.beginToken.offset); |
| 818 _setCodeRange(element, node); | |
| 799 element.functions = holder.functions; | 819 element.functions = holder.functions; |
| 800 element.labels = holder.labels; | 820 element.labels = holder.labels; |
| 801 element.localVariables = holder.localVariables; | 821 element.localVariables = holder.localVariables; |
| 802 element.parameters = holder.parameters; | 822 element.parameters = holder.parameters; |
| 803 element.typeParameters = holder.typeParameters; | 823 element.typeParameters = holder.typeParameters; |
| 804 if (body.isAsynchronous) { | 824 if (body.isAsynchronous) { |
| 805 element.asynchronous = true; | 825 element.asynchronous = true; |
| 806 } | 826 } |
| 807 if (body.isGenerator) { | 827 if (body.isGenerator) { |
| 808 element.generator = true; | 828 element.generator = true; |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 827 | 847 |
| 828 @override | 848 @override |
| 829 Object visitFunctionTypeAlias(FunctionTypeAlias node) { | 849 Object visitFunctionTypeAlias(FunctionTypeAlias node) { |
| 830 ElementHolder holder = new ElementHolder(); | 850 ElementHolder holder = new ElementHolder(); |
| 831 _visitChildren(holder, node); | 851 _visitChildren(holder, node); |
| 832 SimpleIdentifier aliasName = node.name; | 852 SimpleIdentifier aliasName = node.name; |
| 833 List<ParameterElement> parameters = holder.parameters; | 853 List<ParameterElement> parameters = holder.parameters; |
| 834 List<TypeParameterElement> typeParameters = holder.typeParameters; | 854 List<TypeParameterElement> typeParameters = holder.typeParameters; |
| 835 FunctionTypeAliasElementImpl element = | 855 FunctionTypeAliasElementImpl element = |
| 836 new FunctionTypeAliasElementImpl.forNode(aliasName); | 856 new FunctionTypeAliasElementImpl.forNode(aliasName); |
| 857 _setCodeRange(element, node); | |
| 837 element.metadata = _createElementAnnotations(node.metadata); | 858 element.metadata = _createElementAnnotations(node.metadata); |
| 838 setElementDocumentationComment(element, node); | 859 setElementDocumentationComment(element, node); |
| 839 element.parameters = parameters; | 860 element.parameters = parameters; |
| 840 element.typeParameters = typeParameters; | 861 element.typeParameters = typeParameters; |
| 841 _createTypeParameterTypes(typeParameters); | 862 _createTypeParameterTypes(typeParameters); |
| 842 element.type = new FunctionTypeImpl.forTypedef(element); | 863 element.type = new FunctionTypeImpl.forTypedef(element); |
| 843 _currentHolder.addTypeAlias(element); | 864 _currentHolder.addTypeAlias(element); |
| 844 aliasName.staticElement = element; | 865 aliasName.staticElement = element; |
| 845 holder.validate(); | 866 holder.validate(); |
| 846 return null; | 867 return null; |
| 847 } | 868 } |
| 848 | 869 |
| 849 @override | 870 @override |
| 850 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { | 871 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { |
| 851 if (node.parent is! DefaultFormalParameter) { | 872 if (node.parent is! DefaultFormalParameter) { |
| 852 SimpleIdentifier parameterName = node.identifier; | 873 SimpleIdentifier parameterName = node.identifier; |
| 853 ParameterElementImpl parameter = | 874 ParameterElementImpl parameter = |
| 854 new ParameterElementImpl.forNode(parameterName); | 875 new ParameterElementImpl.forNode(parameterName); |
| 876 _setCodeRange(parameter, node); | |
| 855 parameter.parameterKind = node.kind; | 877 parameter.parameterKind = node.kind; |
| 856 _setParameterVisibleRange(node, parameter); | 878 _setParameterVisibleRange(node, parameter); |
| 857 _currentHolder.addParameter(parameter); | 879 _currentHolder.addParameter(parameter); |
| 858 parameterName.staticElement = parameter; | 880 parameterName.staticElement = parameter; |
| 859 } | 881 } |
| 860 // | 882 // |
| 861 // The children of this parameter include any parameters defined on the type | 883 // The children of this parameter include any parameters defined on the type |
| 862 //of this parameter. | 884 //of this parameter. |
| 863 // | 885 // |
| 864 ElementHolder holder = new ElementHolder(); | 886 ElementHolder holder = new ElementHolder(); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 877 return super.visitImportDirective(node); | 899 return super.visitImportDirective(node); |
| 878 } | 900 } |
| 879 | 901 |
| 880 @override | 902 @override |
| 881 Object visitLabeledStatement(LabeledStatement node) { | 903 Object visitLabeledStatement(LabeledStatement node) { |
| 882 bool onSwitchStatement = node.statement is SwitchStatement; | 904 bool onSwitchStatement = node.statement is SwitchStatement; |
| 883 for (Label label in node.labels) { | 905 for (Label label in node.labels) { |
| 884 SimpleIdentifier labelName = label.label; | 906 SimpleIdentifier labelName = label.label; |
| 885 LabelElementImpl element = | 907 LabelElementImpl element = |
| 886 new LabelElementImpl.forNode(labelName, onSwitchStatement, false); | 908 new LabelElementImpl.forNode(labelName, onSwitchStatement, false); |
| 909 _setCodeRange(element, node); | |
| 887 _currentHolder.addLabel(element); | 910 _currentHolder.addLabel(element); |
| 888 labelName.staticElement = element; | 911 labelName.staticElement = element; |
| 889 } | 912 } |
| 890 return super.visitLabeledStatement(node); | 913 return super.visitLabeledStatement(node); |
| 891 } | 914 } |
| 892 | 915 |
| 893 @override | 916 @override |
| 894 Object visitLibraryDirective(LibraryDirective node) { | 917 Object visitLibraryDirective(LibraryDirective node) { |
| 895 _createElementAnnotations(node.metadata); | 918 _createElementAnnotations(node.metadata); |
| 896 return super.visitLibraryDirective(node); | 919 return super.visitLibraryDirective(node); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 912 FunctionBody body = node.body; | 935 FunctionBody body = node.body; |
| 913 if (property == null) { | 936 if (property == null) { |
| 914 SimpleIdentifier methodName = node.name; | 937 SimpleIdentifier methodName = node.name; |
| 915 String nameOfMethod = methodName.name; | 938 String nameOfMethod = methodName.name; |
| 916 if (nameOfMethod == TokenType.MINUS.lexeme && | 939 if (nameOfMethod == TokenType.MINUS.lexeme && |
| 917 node.parameters.parameters.length == 0) { | 940 node.parameters.parameters.length == 0) { |
| 918 nameOfMethod = "unary-"; | 941 nameOfMethod = "unary-"; |
| 919 } | 942 } |
| 920 MethodElementImpl element = | 943 MethodElementImpl element = |
| 921 new MethodElementImpl(nameOfMethod, methodName.offset); | 944 new MethodElementImpl(nameOfMethod, methodName.offset); |
| 945 _setCodeRange(element, node); | |
| 922 element.metadata = _createElementAnnotations(node.metadata); | 946 element.metadata = _createElementAnnotations(node.metadata); |
| 923 setElementDocumentationComment(element, node); | 947 setElementDocumentationComment(element, node); |
| 924 element.abstract = node.isAbstract; | 948 element.abstract = node.isAbstract; |
| 925 if (node.externalKeyword != null) { | 949 if (node.externalKeyword != null) { |
| 926 element.external = true; | 950 element.external = true; |
| 927 } | 951 } |
| 928 element.functions = holder.functions; | 952 element.functions = holder.functions; |
| 929 element.labels = holder.labels; | 953 element.labels = holder.labels; |
| 930 element.localVariables = holder.localVariables; | 954 element.localVariables = holder.localVariables; |
| 931 element.parameters = holder.parameters; | 955 element.parameters = holder.parameters; |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 950 if (field == null) { | 974 if (field == null) { |
| 951 field = new FieldElementImpl(node.name.name, -1); | 975 field = new FieldElementImpl(node.name.name, -1); |
| 952 field.final2 = true; | 976 field.final2 = true; |
| 953 field.static = isStatic; | 977 field.static = isStatic; |
| 954 field.synthetic = true; | 978 field.synthetic = true; |
| 955 _currentHolder.addField(field); | 979 _currentHolder.addField(field); |
| 956 } | 980 } |
| 957 if (node.isGetter) { | 981 if (node.isGetter) { |
| 958 PropertyAccessorElementImpl getter = | 982 PropertyAccessorElementImpl getter = |
| 959 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 983 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 984 _setCodeRange(getter, node); | |
| 960 getter.metadata = _createElementAnnotations(node.metadata); | 985 getter.metadata = _createElementAnnotations(node.metadata); |
| 961 setElementDocumentationComment(getter, node); | 986 setElementDocumentationComment(getter, node); |
| 962 if (node.externalKeyword != null) { | 987 if (node.externalKeyword != null) { |
| 963 getter.external = true; | 988 getter.external = true; |
| 964 } | 989 } |
| 965 getter.functions = holder.functions; | 990 getter.functions = holder.functions; |
| 966 getter.labels = holder.labels; | 991 getter.labels = holder.labels; |
| 967 getter.localVariables = holder.localVariables; | 992 getter.localVariables = holder.localVariables; |
| 968 if (body.isAsynchronous) { | 993 if (body.isAsynchronous) { |
| 969 getter.asynchronous = true; | 994 getter.asynchronous = true; |
| 970 } | 995 } |
| 971 if (body.isGenerator) { | 996 if (body.isGenerator) { |
| 972 getter.generator = true; | 997 getter.generator = true; |
| 973 } | 998 } |
| 974 getter.variable = field; | 999 getter.variable = field; |
| 975 getter.abstract = node.isAbstract; | 1000 getter.abstract = node.isAbstract; |
| 976 getter.getter = true; | 1001 getter.getter = true; |
| 977 getter.static = isStatic; | 1002 getter.static = isStatic; |
| 978 field.getter = getter; | 1003 field.getter = getter; |
| 979 if (node.returnType == null) { | 1004 if (node.returnType == null) { |
| 980 getter.hasImplicitReturnType = true; | 1005 getter.hasImplicitReturnType = true; |
| 981 } | 1006 } |
| 982 _currentHolder.addAccessor(getter); | 1007 _currentHolder.addAccessor(getter); |
| 983 propertyNameNode.staticElement = getter; | 1008 propertyNameNode.staticElement = getter; |
| 984 } else { | 1009 } else { |
| 985 PropertyAccessorElementImpl setter = | 1010 PropertyAccessorElementImpl setter = |
| 986 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 1011 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 1012 _setCodeRange(setter, node); | |
| 987 setter.metadata = _createElementAnnotations(node.metadata); | 1013 setter.metadata = _createElementAnnotations(node.metadata); |
| 988 setElementDocumentationComment(setter, node); | 1014 setElementDocumentationComment(setter, node); |
| 989 if (node.externalKeyword != null) { | 1015 if (node.externalKeyword != null) { |
| 990 setter.external = true; | 1016 setter.external = true; |
| 991 } | 1017 } |
| 992 setter.functions = holder.functions; | 1018 setter.functions = holder.functions; |
| 993 setter.labels = holder.labels; | 1019 setter.labels = holder.labels; |
| 994 setter.localVariables = holder.localVariables; | 1020 setter.localVariables = holder.localVariables; |
| 995 setter.parameters = holder.parameters; | 1021 setter.parameters = holder.parameters; |
| 996 if (body.isAsynchronous) { | 1022 if (body.isAsynchronous) { |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1055 _createElementAnnotations(node.metadata); | 1081 _createElementAnnotations(node.metadata); |
| 1056 return super.visitPartDirective(node); | 1082 return super.visitPartDirective(node); |
| 1057 } | 1083 } |
| 1058 | 1084 |
| 1059 @override | 1085 @override |
| 1060 Object visitSimpleFormalParameter(SimpleFormalParameter node) { | 1086 Object visitSimpleFormalParameter(SimpleFormalParameter node) { |
| 1061 if (node.parent is! DefaultFormalParameter) { | 1087 if (node.parent is! DefaultFormalParameter) { |
| 1062 SimpleIdentifier parameterName = node.identifier; | 1088 SimpleIdentifier parameterName = node.identifier; |
| 1063 ParameterElementImpl parameter = | 1089 ParameterElementImpl parameter = |
| 1064 new ParameterElementImpl.forNode(parameterName); | 1090 new ParameterElementImpl.forNode(parameterName); |
| 1091 _setCodeRange(parameter, node); | |
| 1065 parameter.const3 = node.isConst; | 1092 parameter.const3 = node.isConst; |
| 1066 parameter.final2 = node.isFinal; | 1093 parameter.final2 = node.isFinal; |
| 1067 parameter.parameterKind = node.kind; | 1094 parameter.parameterKind = node.kind; |
| 1068 _setParameterVisibleRange(node, parameter); | 1095 _setParameterVisibleRange(node, parameter); |
| 1069 if (node.type == null) { | 1096 if (node.type == null) { |
| 1070 parameter.hasImplicitType = true; | 1097 parameter.hasImplicitType = true; |
| 1071 } | 1098 } |
| 1072 _currentHolder.addParameter(parameter); | 1099 _currentHolder.addParameter(parameter); |
| 1073 parameterName.staticElement = parameter; | 1100 parameterName.staticElement = parameter; |
| 1074 } | 1101 } |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 1100 labelName.staticElement = element; | 1127 labelName.staticElement = element; |
| 1101 } | 1128 } |
| 1102 return super.visitSwitchDefault(node); | 1129 return super.visitSwitchDefault(node); |
| 1103 } | 1130 } |
| 1104 | 1131 |
| 1105 @override | 1132 @override |
| 1106 Object visitTypeParameter(TypeParameter node) { | 1133 Object visitTypeParameter(TypeParameter node) { |
| 1107 SimpleIdentifier parameterName = node.name; | 1134 SimpleIdentifier parameterName = node.name; |
| 1108 TypeParameterElementImpl typeParameter = | 1135 TypeParameterElementImpl typeParameter = |
| 1109 new TypeParameterElementImpl.forNode(parameterName); | 1136 new TypeParameterElementImpl.forNode(parameterName); |
| 1137 _setCodeRange(typeParameter, node); | |
| 1110 typeParameter.metadata = _createElementAnnotations(node.metadata); | 1138 typeParameter.metadata = _createElementAnnotations(node.metadata); |
| 1111 TypeParameterTypeImpl typeParameterType = | 1139 TypeParameterTypeImpl typeParameterType = |
| 1112 new TypeParameterTypeImpl(typeParameter); | 1140 new TypeParameterTypeImpl(typeParameter); |
| 1113 typeParameter.type = typeParameterType; | 1141 typeParameter.type = typeParameterType; |
| 1114 _currentHolder.addTypeParameter(typeParameter); | 1142 _currentHolder.addTypeParameter(typeParameter); |
| 1115 parameterName.staticElement = typeParameter; | 1143 parameterName.staticElement = typeParameter; |
| 1116 return super.visitTypeParameter(node); | 1144 return super.visitTypeParameter(node); |
| 1117 } | 1145 } |
| 1118 | 1146 |
| 1119 @override | 1147 @override |
| 1120 Object visitVariableDeclaration(VariableDeclaration node) { | 1148 Object visitVariableDeclaration(VariableDeclaration node) { |
| 1121 bool isConst = node.isConst; | 1149 bool isConst = node.isConst; |
| 1122 bool isFinal = node.isFinal; | 1150 bool isFinal = node.isFinal; |
| 1123 bool hasInitializer = node.initializer != null; | 1151 bool hasInitializer = node.initializer != null; |
| 1124 VariableDeclarationList varList = node.parent; | 1152 VariableDeclarationList varList = node.parent; |
| 1125 FieldDeclaration fieldNode = | 1153 FieldDeclaration fieldNode = |
| 1126 varList.parent is FieldDeclaration ? varList.parent : null; | 1154 varList.parent is FieldDeclaration ? varList.parent : null; |
| 1127 VariableElementImpl element; | 1155 VariableElementImpl element; |
| 1128 if (fieldNode != null) { | 1156 if (fieldNode != null) { |
| 1129 SimpleIdentifier fieldName = node.name; | 1157 SimpleIdentifier fieldName = node.name; |
| 1130 FieldElementImpl field; | 1158 FieldElementImpl field; |
| 1131 if ((isConst || isFinal && !fieldNode.isStatic) && hasInitializer) { | 1159 if ((isConst || isFinal && !fieldNode.isStatic) && hasInitializer) { |
| 1132 field = new ConstFieldElementImpl.forNode(fieldName); | 1160 field = new ConstFieldElementImpl.forNode(fieldName); |
| 1133 } else { | 1161 } else { |
| 1134 field = new FieldElementImpl.forNode(fieldName); | 1162 field = new FieldElementImpl.forNode(fieldName); |
| 1135 } | 1163 } |
| 1136 element = field; | 1164 element = field; |
| 1137 field.static = fieldNode.isStatic; | 1165 field.static = fieldNode.isStatic; |
| 1166 _setCodeRange(element, node); | |
| 1138 setElementDocumentationComment(element, fieldNode); | 1167 setElementDocumentationComment(element, fieldNode); |
| 1139 field.hasImplicitType = varList.type == null; | 1168 field.hasImplicitType = varList.type == null; |
| 1140 _currentHolder.addField(field); | 1169 _currentHolder.addField(field); |
| 1141 fieldName.staticElement = field; | 1170 fieldName.staticElement = field; |
| 1142 } else if (_inFunction) { | 1171 } else if (_inFunction) { |
| 1143 SimpleIdentifier variableName = node.name; | 1172 SimpleIdentifier variableName = node.name; |
| 1144 LocalVariableElementImpl variable; | 1173 LocalVariableElementImpl variable; |
| 1145 if (isConst && hasInitializer) { | 1174 if (isConst && hasInitializer) { |
| 1146 variable = new ConstLocalVariableElementImpl.forNode(variableName); | 1175 variable = new ConstLocalVariableElementImpl.forNode(variableName); |
| 1147 } else { | 1176 } else { |
| 1148 variable = new LocalVariableElementImpl.forNode(variableName); | 1177 variable = new LocalVariableElementImpl.forNode(variableName); |
| 1149 } | 1178 } |
| 1150 element = variable; | 1179 element = variable; |
| 1180 _setCodeRange(element, node); | |
| 1151 Block enclosingBlock = node.getAncestor((node) => node is Block); | 1181 Block enclosingBlock = node.getAncestor((node) => node is Block); |
| 1152 // TODO(brianwilkerson) This isn't right for variables declared in a for | 1182 // TODO(brianwilkerson) This isn't right for variables declared in a for |
| 1153 // loop. | 1183 // loop. |
| 1154 variable.setVisibleRange(enclosingBlock.offset, enclosingBlock.length); | 1184 variable.setVisibleRange(enclosingBlock.offset, enclosingBlock.length); |
| 1155 variable.hasImplicitType = varList.type == null; | 1185 variable.hasImplicitType = varList.type == null; |
| 1156 _currentHolder.addLocalVariable(variable); | 1186 _currentHolder.addLocalVariable(variable); |
| 1157 variableName.staticElement = element; | 1187 variableName.staticElement = element; |
| 1158 } else { | 1188 } else { |
| 1159 SimpleIdentifier variableName = node.name; | 1189 SimpleIdentifier variableName = node.name; |
| 1160 TopLevelVariableElementImpl variable; | 1190 TopLevelVariableElementImpl variable; |
| 1161 if (isConst && hasInitializer) { | 1191 if (isConst && hasInitializer) { |
| 1162 variable = new ConstTopLevelVariableElementImpl.forNode(variableName); | 1192 variable = new ConstTopLevelVariableElementImpl.forNode(variableName); |
| 1163 } else { | 1193 } else { |
| 1164 variable = new TopLevelVariableElementImpl.forNode(variableName); | 1194 variable = new TopLevelVariableElementImpl.forNode(variableName); |
| 1165 } | 1195 } |
| 1166 element = variable; | 1196 element = variable; |
| 1197 _setCodeRange(element, node); | |
| 1167 if (varList.parent is TopLevelVariableDeclaration) { | 1198 if (varList.parent is TopLevelVariableDeclaration) { |
| 1168 setElementDocumentationComment(element, varList.parent); | 1199 setElementDocumentationComment(element, varList.parent); |
| 1169 } | 1200 } |
| 1170 variable.hasImplicitType = varList.type == null; | 1201 variable.hasImplicitType = varList.type == null; |
| 1171 _currentHolder.addTopLevelVariable(variable); | 1202 _currentHolder.addTopLevelVariable(variable); |
| 1172 variableName.staticElement = element; | 1203 variableName.staticElement = element; |
| 1173 } | 1204 } |
| 1174 element.const3 = isConst; | 1205 element.const3 = isConst; |
| 1175 element.final2 = isFinal; | 1206 element.final2 = isFinal; |
| 1176 if (hasInitializer) { | 1207 if (hasInitializer) { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1219 List<ElementAnnotation> elementAnnotations; | 1250 List<ElementAnnotation> elementAnnotations; |
| 1220 if (parent is FieldDeclaration) { | 1251 if (parent is FieldDeclaration) { |
| 1221 elementAnnotations = _createElementAnnotations(parent.metadata); | 1252 elementAnnotations = _createElementAnnotations(parent.metadata); |
| 1222 } else if (parent is TopLevelVariableDeclaration) { | 1253 } else if (parent is TopLevelVariableDeclaration) { |
| 1223 elementAnnotations = _createElementAnnotations(parent.metadata); | 1254 elementAnnotations = _createElementAnnotations(parent.metadata); |
| 1224 } else { | 1255 } else { |
| 1225 // Local variable declaration | 1256 // Local variable declaration |
| 1226 elementAnnotations = _createElementAnnotations(node.metadata); | 1257 elementAnnotations = _createElementAnnotations(node.metadata); |
| 1227 } | 1258 } |
| 1228 for (VariableDeclaration variableDeclaration in node.variables) { | 1259 for (VariableDeclaration variableDeclaration in node.variables) { |
| 1229 (variableDeclaration.element as ElementImpl).metadata = | 1260 ElementImpl element = variableDeclaration.element as ElementImpl; |
| 1230 elementAnnotations; | 1261 _setCodeRange(element, node.parent); |
| 1262 element.metadata = elementAnnotations; | |
| 1231 } | 1263 } |
| 1232 return null; | 1264 return null; |
| 1233 } | 1265 } |
| 1234 | 1266 |
| 1235 /** | 1267 /** |
| 1236 * Build the table mapping field names to field elements for the fields define d in the current | 1268 * Build the table mapping field names to field elements for the fields define d in the current |
| 1237 * class. | 1269 * class. |
| 1238 * | 1270 * |
| 1239 * @param fields the field elements defined in the current class | 1271 * @param fields the field elements defined in the current class |
| 1240 */ | 1272 */ |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1312 if (parent is ConstructorDeclaration) { | 1344 if (parent is ConstructorDeclaration) { |
| 1313 return parent.body; | 1345 return parent.body; |
| 1314 } else if (parent is FunctionExpression) { | 1346 } else if (parent is FunctionExpression) { |
| 1315 return parent.body; | 1347 return parent.body; |
| 1316 } else if (parent is MethodDeclaration) { | 1348 } else if (parent is MethodDeclaration) { |
| 1317 return parent.body; | 1349 return parent.body; |
| 1318 } | 1350 } |
| 1319 return null; | 1351 return null; |
| 1320 } | 1352 } |
| 1321 | 1353 |
| 1354 void _setCodeRange(ElementImpl element, AstNode node) { | |
|
Brian Wilkerson
2016/03/02 00:08:09
Should / could this happen automatically in the 'f
scheglov
2016/03/02 04:57:01
Unfortunately it does not work well for constructo
| |
| 1355 element.setCodeRange(node.offset, node.length); | |
| 1356 } | |
| 1357 | |
| 1322 /** | 1358 /** |
| 1323 * Sets the visible source range for formal parameter. | 1359 * Sets the visible source range for formal parameter. |
| 1324 */ | 1360 */ |
| 1325 void _setParameterVisibleRange( | 1361 void _setParameterVisibleRange( |
| 1326 FormalParameter node, ParameterElementImpl element) { | 1362 FormalParameter node, ParameterElementImpl element) { |
| 1327 FunctionBody body = _getFunctionBody(node); | 1363 FunctionBody body = _getFunctionBody(node); |
| 1328 if (body is BlockFunctionBody || body is ExpressionFunctionBody) { | 1364 if (body is BlockFunctionBody || body is ExpressionFunctionBody) { |
| 1329 element.setVisibleRange(body.offset, body.length); | 1365 element.setVisibleRange(body.offset, body.length); |
| 1330 } | 1366 } |
| 1331 } | 1367 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1418 return null; | 1454 return null; |
| 1419 } | 1455 } |
| 1420 | 1456 |
| 1421 /** | 1457 /** |
| 1422 * Return the lexical identifiers associated with the given [identifiers]. | 1458 * Return the lexical identifiers associated with the given [identifiers]. |
| 1423 */ | 1459 */ |
| 1424 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { | 1460 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { |
| 1425 return identifiers.map((identifier) => identifier.name).toList(); | 1461 return identifiers.map((identifier) => identifier.name).toList(); |
| 1426 } | 1462 } |
| 1427 } | 1463 } |
| OLD | NEW |