| 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 domains.analysis.navigation_dart; | 5 library domains.analysis.navigation_dart; |
| 6 | 6 |
| 7 import 'package:analysis_server/analysis/navigation_core.dart'; | 7 import 'package:analysis_server/analysis/navigation_core.dart'; |
| 8 import 'package:analysis_server/src/protocol_server.dart' as protocol; | 8 import 'package:analysis_server/src/protocol_server.dart' as protocol; |
| 9 import 'package:analyzer/src/generated/ast.dart'; | 9 import 'package:analyzer/src/generated/ast.dart'; |
| 10 import 'package:analyzer/src/generated/element.dart'; | 10 import 'package:analyzer/src/generated/element.dart'; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 collector.addRegion(offset, length, kind, location); | 67 collector.addRegion(offset, length, kind, location); |
| 68 } | 68 } |
| 69 | 69 |
| 70 void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element element) { | 70 void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element element) { |
| 71 int offset = a.offset; | 71 int offset = a.offset; |
| 72 int length = b.end - offset; | 72 int length = b.end - offset; |
| 73 _addRegion(offset, length, element); | 73 _addRegion(offset, length, element); |
| 74 } | 74 } |
| 75 | 75 |
| 76 void _addRegionForNode(AstNode node, Element element) { | 76 void _addRegionForNode(AstNode node, Element element) { |
| 77 if (node == null) { |
| 78 return; |
| 79 } |
| 77 int offset = node.offset; | 80 int offset = node.offset; |
| 78 int length = node.length; | 81 int length = node.length; |
| 79 _addRegion(offset, length, element); | 82 _addRegion(offset, length, element); |
| 80 } | 83 } |
| 81 | 84 |
| 82 void _addRegionForToken(Token token, Element element) { | 85 void _addRegionForToken(Token token, Element element) { |
| 83 int offset = token.offset; | 86 int offset = token.offset; |
| 84 int length = token.length; | 87 int length = token.length; |
| 85 _addRegion(offset, length, element); | 88 _addRegion(offset, length, element); |
| 86 } | 89 } |
| 87 } | 90 } |
| 88 | 91 |
| 89 class _DartNavigationComputerVisitor extends RecursiveAstVisitor { | 92 class _DartNavigationComputerVisitor extends RecursiveAstVisitor { |
| 90 final _DartNavigationCollector computer; | 93 final _DartNavigationCollector computer; |
| 91 | 94 |
| 92 _DartNavigationComputerVisitor(this.computer); | 95 _DartNavigationComputerVisitor(this.computer); |
| 93 | 96 |
| 94 @override | 97 @override |
| 98 visitAnnotation(Annotation node) { |
| 99 Element element = node.element; |
| 100 if (element is ConstructorElement && element.isSynthetic) { |
| 101 element = element.enclosingElement; |
| 102 } |
| 103 Identifier name = node.name; |
| 104 if (name is PrefixedIdentifier) { |
| 105 // use constructor in: @PrefixClass.constructorName |
| 106 Element prefixElement = name.prefix.staticElement; |
| 107 if (prefixElement is ClassElement) { |
| 108 prefixElement = element; |
| 109 } |
| 110 computer._addRegionForNode(name.prefix, prefixElement); |
| 111 // always constructor |
| 112 computer._addRegionForNode(name.identifier, element); |
| 113 } else { |
| 114 computer._addRegionForNode(name, element); |
| 115 } |
| 116 computer._addRegionForNode(node.constructorName, element); |
| 117 // arguments |
| 118 _safelyVisit(node.arguments); |
| 119 } |
| 120 |
| 121 @override |
| 95 visitAssignmentExpression(AssignmentExpression node) { | 122 visitAssignmentExpression(AssignmentExpression node) { |
| 96 _safelyVisit(node.leftHandSide); | 123 _safelyVisit(node.leftHandSide); |
| 97 computer._addRegionForToken(node.operator, node.bestElement); | 124 computer._addRegionForToken(node.operator, node.bestElement); |
| 98 _safelyVisit(node.rightHandSide); | 125 _safelyVisit(node.rightHandSide); |
| 99 } | 126 } |
| 100 | 127 |
| 101 @override | 128 @override |
| 102 visitBinaryExpression(BinaryExpression node) { | 129 visitBinaryExpression(BinaryExpression node) { |
| 103 _safelyVisit(node.leftOperand); | 130 _safelyVisit(node.leftOperand); |
| 104 computer._addRegionForToken(node.operator, node.bestElement); | 131 computer._addRegionForToken(node.operator, node.bestElement); |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 } | 327 } |
| 301 // The node starts or ends in the range. | 328 // The node starts or ends in the range. |
| 302 if (isInRange(node.offset) || isInRange(node.end)) { | 329 if (isInRange(node.offset) || isInRange(node.end)) { |
| 303 node.accept(visitor); | 330 node.accept(visitor); |
| 304 return; | 331 return; |
| 305 } | 332 } |
| 306 // Go deeper. | 333 // Go deeper. |
| 307 super.visitNode(node); | 334 super.visitNode(node); |
| 308 } | 335 } |
| 309 } | 336 } |
| OLD | NEW |