| Index: pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
|
| diff --git a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
|
| index 8b87629949fc819391227faa702bb83315cd2440..f1b9100628e1ab0a4d52f49639a718c8f8bf63c4 100644
|
| --- a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
|
| +++ b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
|
| @@ -74,6 +74,9 @@ class _DartNavigationCollector {
|
| }
|
|
|
| void _addRegionForNode(AstNode node, Element element) {
|
| + if (node == null) {
|
| + return;
|
| + }
|
| int offset = node.offset;
|
| int length = node.length;
|
| _addRegion(offset, length, element);
|
| @@ -92,6 +95,30 @@ class _DartNavigationComputerVisitor extends RecursiveAstVisitor {
|
| _DartNavigationComputerVisitor(this.computer);
|
|
|
| @override
|
| + visitAnnotation(Annotation node) {
|
| + Element element = node.element;
|
| + if (element is ConstructorElement && element.isSynthetic) {
|
| + element = element.enclosingElement;
|
| + }
|
| + Identifier name = node.name;
|
| + if (name is PrefixedIdentifier) {
|
| + // use constructor in: @PrefixClass.constructorName
|
| + Element prefixElement = name.prefix.staticElement;
|
| + if (prefixElement is ClassElement) {
|
| + prefixElement = element;
|
| + }
|
| + computer._addRegionForNode(name.prefix, prefixElement);
|
| + // always constructor
|
| + computer._addRegionForNode(name.identifier, element);
|
| + } else {
|
| + computer._addRegionForNode(name, element);
|
| + }
|
| + computer._addRegionForNode(node.constructorName, element);
|
| + // arguments
|
| + _safelyVisit(node.arguments);
|
| + }
|
| +
|
| + @override
|
| visitAssignmentExpression(AssignmentExpression node) {
|
| _safelyVisit(node.leftHandSide);
|
| computer._addRegionForToken(node.operator, node.bestElement);
|
|
|