Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: pkg/analysis_server/lib/src/computer/computer_hover.dart

Issue 717513003: Issue 21552. Fixes for navigation, hover and rename in instance creation expressions. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 computer.hover; 5 library computer.hover;
6 6
7 import 'package:analysis_server/src/protocol.dart' show HoverInformation; 7 import 'package:analysis_server/src/protocol.dart' show HoverInformation;
8 import 'package:analyzer/src/generated/ast.dart'; 8 import 'package:analyzer/src/generated/ast.dart';
9 import 'package:analyzer/src/generated/element.dart'; 9 import 'package:analyzer/src/generated/element.dart';
10 10
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 final CompilationUnit _unit; 61 final CompilationUnit _unit;
62 final int _offset; 62 final int _offset;
63 63
64 DartUnitHoverComputer(this._unit, this._offset); 64 DartUnitHoverComputer(this._unit, this._offset);
65 65
66 /** 66 /**
67 * Returns the computed hover, maybe `null`. 67 * Returns the computed hover, maybe `null`.
68 */ 68 */
69 HoverInformation compute() { 69 HoverInformation compute() {
70 AstNode node = new NodeLocator.con1(_offset).searchWithin(_unit); 70 AstNode node = new NodeLocator.con1(_offset).searchWithin(_unit);
71 if (node.parent is TypeName &&
72 node.parent.parent is ConstructorName &&
73 node.parent.parent.parent is InstanceCreationExpression) {
74 node = node.parent.parent.parent;
75 }
76 if (node.parent is ConstructorName &&
77 node.parent.parent is InstanceCreationExpression) {
78 node = node.parent.parent;
79 }
71 if (node is Expression) { 80 if (node is Expression) {
72 HoverInformation hover = new HoverInformation(node.offset, node.length); 81 Expression expression = node;
82 HoverInformation hover =
83 new HoverInformation(expression.offset, expression.length);
73 // element 84 // element
74 Element element = ElementLocator.locateWithOffset(node, _offset); 85 Element element = ElementLocator.locateWithOffset(expression, _offset);
75 if (element != null) { 86 if (element != null) {
76 // variable, if synthetic accessor 87 // variable, if synthetic accessor
77 if (element is PropertyAccessorElement) { 88 if (element is PropertyAccessorElement) {
78 PropertyAccessorElement accessor = element; 89 PropertyAccessorElement accessor = element;
79 if (accessor.isSynthetic) { 90 if (accessor.isSynthetic) {
80 element = accessor.variable; 91 element = accessor.variable;
81 } 92 }
82 } 93 }
83 // description 94 // description
84 hover.elementDescription = element.toString(); 95 hover.elementDescription = element.toString();
85 hover.elementKind = element.kind.displayName; 96 hover.elementKind = element.kind.displayName;
86 // library 97 // library
87 LibraryElement library = element.library; 98 LibraryElement library = element.library;
88 if (library != null) { 99 if (library != null) {
89 hover.containingLibraryName = library.name; 100 hover.containingLibraryName = library.name;
90 hover.containingLibraryPath = library.source.fullName; 101 hover.containingLibraryPath = library.source.fullName;
91 } 102 }
92 // documentation 103 // documentation
93 String dartDoc = element.computeDocumentationComment(); 104 String dartDoc = element.computeDocumentationComment();
94 dartDoc = _removeDartDocDelimiters(dartDoc); 105 dartDoc = _removeDartDocDelimiters(dartDoc);
95 hover.dartdoc = dartDoc; 106 hover.dartdoc = dartDoc;
96 } 107 }
97 // parameter 108 // parameter
98 hover.parameter = _safeToString(node.bestParameterElement); 109 hover.parameter = _safeToString(expression.bestParameterElement);
99 // types 110 // types
100 hover.staticType = _safeToString(node.staticType); 111 hover.staticType = _safeToString(expression.staticType);
101 hover.propagatedType = _safeToString(node.propagatedType); 112 hover.propagatedType = _safeToString(expression.propagatedType);
102 // done 113 // done
103 return hover; 114 return hover;
104 } 115 }
105 // not an expression 116 // not an expression
106 return null; 117 return null;
107 } 118 }
108 119
109 static _safeToString(obj) => obj != null ? obj.toString() : null; 120 static _safeToString(obj) => obj != null ? obj.toString() : null;
110 } 121 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698