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

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

Issue 366183002: Update HoverInformation to include offset, length, kind. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 months 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
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/constants.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analysis_server/src/constants.dart'; 9 import 'package:analysis_server/src/constants.dart';
10 import 'package:analyzer/src/generated/ast.dart'; 10 import 'package:analyzer/src/generated/ast.dart';
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 final int _offset; 64 final int _offset;
65 65
66 DartUnitHoverComputer(this._unit, this._offset); 66 DartUnitHoverComputer(this._unit, this._offset);
67 67
68 /** 68 /**
69 * Returns the computed hover, maybe `null`. 69 * Returns the computed hover, maybe `null`.
70 */ 70 */
71 Map<String, Object> compute() { 71 Map<String, Object> compute() {
72 AstNode node = new NodeLocator.con1(_offset).searchWithin(_unit); 72 AstNode node = new NodeLocator.con1(_offset).searchWithin(_unit);
73 if (node is Expression) { 73 if (node is Expression) {
74 Hover hover = new Hover(); 74 Hover hover = new Hover(node.offset, node.length);
75 // element 75 // element
76 Element element = ElementLocator.locateWithOffset(node, _offset); 76 Element element = ElementLocator.locateWithOffset(node, _offset);
77 if (element != null) { 77 if (element != null) {
78 // variable, if synthetic accessor 78 // variable, if synthetic accessor
79 if (element is PropertyAccessorElement) { 79 if (element is PropertyAccessorElement) {
80 PropertyAccessorElement accessor = element; 80 PropertyAccessorElement accessor = element;
81 if (accessor.isSynthetic) { 81 if (accessor.isSynthetic) {
82 element = accessor.variable; 82 element = accessor.variable;
83 } 83 }
84 } 84 }
85 // description 85 // description
86 hover.elementDescription = element.toString(); 86 hover.elementDescription = element.toString();
87 hover.elementKind = element.kind.displayName;
87 // library 88 // library
88 LibraryElement library = element.library; 89 LibraryElement library = element.library;
89 if (library != null) { 90 if (library != null) {
90 hover.containingLibraryName = library.name; 91 hover.containingLibraryName = library.name;
91 hover.containingLibraryPath = library.source.fullName; 92 hover.containingLibraryPath = library.source.fullName;
92 } 93 }
93 // documentation 94 // documentation
94 String dartDoc = element.computeDocumentationComment(); 95 String dartDoc = element.computeDocumentationComment();
95 dartDoc = _removeDartDocDelimiters(dartDoc); 96 dartDoc = _removeDartDocDelimiters(dartDoc);
96 hover.dartDoc = dartDoc; 97 hover.dartDoc = dartDoc;
97 } 98 }
98 // parameter 99 // parameter
99 hover.parameter = _safeToString(node.bestParameterElement); 100 hover.parameter = _safeToString(node.bestParameterElement);
100 // types 101 // types
101 hover.staticType = _safeToString(node.staticType); 102 hover.staticType = _safeToString(node.staticType);
102 hover.propagatedType = _safeToString(node.propagatedType); 103 hover.propagatedType = _safeToString(node.propagatedType);
103 // done 104 // done
104 return hover.toJson(); 105 return hover.toJson();
105 } 106 }
106 // not an expression 107 // not an expression
107 return null; 108 return null;
108 } 109 }
109 110
110 static _safeToString(obj) => obj != null ? obj.toString() : null; 111 static _safeToString(obj) => obj != null ? obj.toString() : null;
111 } 112 }
112 113
113 114
114 class Hover { 115 class Hover {
116 final int offset;
117 final int length;
115 String containingLibraryName; 118 String containingLibraryName;
116 String containingLibraryPath; 119 String containingLibraryPath;
117 String dartDoc; 120 String dartDoc;
118 String elementDescription; 121 String elementDescription;
122 String elementKind;
119 String parameter; 123 String parameter;
120 String propagatedType; 124 String propagatedType;
121 String staticType; 125 String staticType;
122 126
123 Hover(); 127 Hover(this.offset, this.length);
124 128
125 factory Hover.fromJson(Map<String, Object> map) { 129 factory Hover.fromJson(Map<String, Object> map) {
126 Hover hover = new Hover(); 130 int offset = map[OFFSET];
131 int length = map[LENGTH];
132 Hover hover = new Hover(offset, length);
127 hover.containingLibraryName = map[CONTAINING_LIBRARY_NAME]; 133 hover.containingLibraryName = map[CONTAINING_LIBRARY_NAME];
128 hover.containingLibraryPath = map[CONTAINING_LIBRARY_PATH]; 134 hover.containingLibraryPath = map[CONTAINING_LIBRARY_PATH];
129 hover.dartDoc = map[DART_DOC]; 135 hover.dartDoc = map[DART_DOC];
130 hover.elementDescription = map[ELEMENT_DESCRIPTION]; 136 hover.elementDescription = map[ELEMENT_DESCRIPTION];
137 hover.elementKind = map[ELEMENT_KIND];
131 hover.parameter = map[PARAMETER]; 138 hover.parameter = map[PARAMETER];
132 hover.propagatedType = map[PROPAGATED_TYPE]; 139 hover.propagatedType = map[PROPAGATED_TYPE];
133 hover.staticType = map[STATIC_TYPE]; 140 hover.staticType = map[STATIC_TYPE];
134 return hover; 141 return hover;
135 } 142 }
136 143
137 Map<String, Object> toJson() { 144 Map<String, Object> toJson() {
138 Map<String, Object> json = new HashMap<String, Object>(); 145 Map<String, Object> json = new HashMap<String, Object>();
146 json[OFFSET] = offset;
147 json[LENGTH] = length;
139 if (containingLibraryName != null) { 148 if (containingLibraryName != null) {
140 json[CONTAINING_LIBRARY_NAME] = containingLibraryName; 149 json[CONTAINING_LIBRARY_NAME] = containingLibraryName;
141 } 150 }
142 if (containingLibraryName != null) { 151 if (containingLibraryName != null) {
143 json[CONTAINING_LIBRARY_PATH] = containingLibraryPath; 152 json[CONTAINING_LIBRARY_PATH] = containingLibraryPath;
144 } 153 }
145 if (dartDoc != null) { 154 if (dartDoc != null) {
146 json[DART_DOC] = dartDoc; 155 json[DART_DOC] = dartDoc;
147 } 156 }
148 if (elementDescription != null) { 157 if (elementDescription != null) {
149 json[ELEMENT_DESCRIPTION] = elementDescription; 158 json[ELEMENT_DESCRIPTION] = elementDescription;
150 } 159 }
160 if (elementKind != null) {
161 json[ELEMENT_KIND] = elementKind;
162 }
151 if (parameter != null) { 163 if (parameter != null) {
152 json[PARAMETER] = parameter; 164 json[PARAMETER] = parameter;
153 } 165 }
154 if (propagatedType != null) { 166 if (propagatedType != null) {
155 json[PROPAGATED_TYPE] = propagatedType; 167 json[PROPAGATED_TYPE] = propagatedType;
156 } 168 }
157 if (staticType != null) { 169 if (staticType != null) {
158 json[STATIC_TYPE] = staticType; 170 json[STATIC_TYPE] = staticType;
159 } 171 }
160 return json; 172 return json;
161 } 173 }
162 } 174 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/constants.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698