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 services.src.index.index_contributor; | 5 library services.src.index.index_contributor; |
| 6 | 6 |
| 7 import 'dart:collection' show Queue; | 7 import 'dart:collection' show Queue; |
| 8 | 8 |
| 9 import 'package:analysis_server/analysis/index/index_core.dart'; | 9 import 'package:analysis_server/analysis/index/index_core.dart'; |
| 10 import 'package:analysis_server/analysis/index/index_dart.dart'; | 10 import 'package:analysis_server/analysis/index/index_dart.dart'; |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 435 } else { | 435 } else { |
| 436 int start = node.thisKeyword.end; | 436 int start = node.thisKeyword.end; |
| 437 location = _createLocationForOffset(start, 0); | 437 location = _createLocationForOffset(start, 0); |
| 438 } | 438 } |
| 439 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); | 439 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); |
| 440 super.visitRedirectingConstructorInvocation(node); | 440 super.visitRedirectingConstructorInvocation(node); |
| 441 } | 441 } |
| 442 | 442 |
| 443 @override | 443 @override |
| 444 visitSimpleIdentifier(SimpleIdentifier node) { | 444 visitSimpleIdentifier(SimpleIdentifier node) { |
| 445 IndexableObject indexable = | 445 Element nameElement = new NameElement(node.name); |
|
Brian Wilkerson
2015/06/01 21:52:20
I understand why lines 484-485 need to change, but
scheglov
2015/06/01 22:07:24
We use "nameElement" only once, in different branc
| |
| 446 new IndexableElement(new NameElement(node.name)); | |
| 447 LocationImpl location = _createLocationForNode(node); | 446 LocationImpl location = _createLocationForNode(node); |
| 448 if (location == null) { | 447 if (location == null) { |
| 449 return; | 448 return; |
| 450 } | 449 } |
| 451 // name in declaration | 450 // name in declaration |
| 452 if (node.inDeclarationContext()) { | 451 if (node.inDeclarationContext()) { |
| 453 _store.recordRelationship( | 452 recordRelationship( |
| 454 indexable, IndexConstants.NAME_IS_DEFINED_BY, location); | 453 nameElement, IndexConstants.NAME_IS_DEFINED_BY, location); |
| 455 return; | 454 return; |
| 456 } | 455 } |
| 457 // prepare information | 456 // prepare information |
| 458 Element element = node.bestElement; | 457 Element element = node.bestElement; |
| 459 // stop if already handled | 458 // stop if already handled |
| 460 if (_isAlreadyHandledName(node)) { | 459 if (_isAlreadyHandledName(node)) { |
| 461 return; | 460 return; |
| 462 } | 461 } |
| 463 // record name read/write | 462 // record name read/write |
| 464 if (element != null && element.enclosingElement is ClassElement || | 463 if (element != null && element.enclosingElement is ClassElement || |
| 465 element == null && location.isQualified) { | 464 element == null && location.isQualified) { |
| 466 bool inGetterContext = node.inGetterContext(); | 465 bool inGetterContext = node.inGetterContext(); |
| 467 bool inSetterContext = node.inSetterContext(); | 466 bool inSetterContext = node.inSetterContext(); |
| 468 if (inGetterContext && inSetterContext) { | 467 if (inGetterContext && inSetterContext) { |
| 469 _store.recordRelationship( | 468 recordRelationship( |
| 470 indexable, IndexConstants.IS_READ_WRITTEN_BY, location); | 469 nameElement, IndexConstants.IS_READ_WRITTEN_BY, location); |
| 471 } else if (inGetterContext) { | 470 } else if (inGetterContext) { |
| 472 _store.recordRelationship( | 471 recordRelationship(nameElement, IndexConstants.IS_READ_BY, location); |
| 473 indexable, IndexConstants.IS_READ_BY, location); | |
| 474 } else if (inSetterContext) { | 472 } else if (inSetterContext) { |
| 475 _store.recordRelationship( | 473 recordRelationship(nameElement, IndexConstants.IS_WRITTEN_BY, location); |
| 476 indexable, IndexConstants.IS_WRITTEN_BY, location); | |
| 477 } | 474 } |
| 478 } | 475 } |
| 479 // this.field parameter | 476 // this.field parameter |
| 480 if (element is FieldFormalParameterElement) { | 477 if (element is FieldFormalParameterElement) { |
| 481 RelationshipImpl relationship = peekElement().element == element | 478 RelationshipImpl relationship = peekElement().element == element |
| 482 ? IndexConstants.IS_WRITTEN_BY | 479 ? IndexConstants.IS_WRITTEN_BY |
| 483 : IndexConstants.IS_REFERENCED_BY; | 480 : IndexConstants.IS_REFERENCED_BY; |
| 484 _store.recordRelationship( | 481 recordRelationship(element.field, relationship, location); |
| 485 new IndexableElement(element.field), relationship, location); | |
| 486 return; | 482 return; |
| 487 } | 483 } |
| 488 // record specific relations | 484 // record specific relations |
| 489 if (element is ClassElement || | 485 if (element is ClassElement || |
| 490 element is FunctionElement || | 486 element is FunctionElement || |
| 491 element is FunctionTypeAliasElement || | 487 element is FunctionTypeAliasElement || |
| 492 element is LabelElement || | 488 element is LabelElement || |
| 493 element is MethodElement || | 489 element is MethodElement || |
| 494 element is PropertyAccessorElement || | 490 element is PropertyAccessorElement || |
| 495 element is PropertyInducingElement || | 491 element is PropertyInducingElement || |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 798 } | 794 } |
| 799 | 795 |
| 800 /** | 796 /** |
| 801 * @return `true` if given "node" is part of [PrefixedIdentifier] "prefix.node ". | 797 * @return `true` if given "node" is part of [PrefixedIdentifier] "prefix.node ". |
| 802 */ | 798 */ |
| 803 static bool _isIdentifierInPrefixedIdentifier(SimpleIdentifier node) { | 799 static bool _isIdentifierInPrefixedIdentifier(SimpleIdentifier node) { |
| 804 AstNode parent = node.parent; | 800 AstNode parent = node.parent; |
| 805 return parent is PrefixedIdentifier && parent.identifier == node; | 801 return parent is PrefixedIdentifier && parent.identifier == node; |
| 806 } | 802 } |
| 807 } | 803 } |
| OLD | NEW |