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

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

Issue 342983007: Update navigation computer to include Element instead of id. (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.navigation; 5 library computer.navigation;
6 6
7 import 'package:analysis_server/src/constants.dart';
7 import 'package:analyzer/src/generated/ast.dart'; 8 import 'package:analyzer/src/generated/ast.dart';
8 import 'package:analyzer/src/generated/element.dart'; 9 import 'package:analyzer/src/generated/element.dart';
9 import 'package:analyzer/src/generated/scanner.dart'; 10 import 'package:analyzer/src/generated/scanner.dart';
10 import 'package:analyzer/src/generated/source.dart'; 11 import 'package:analyzer/src/generated/source.dart';
11 12
13 import 'element.dart' as computer;
14
12 15
13 /** 16 /**
14 * A computer for navigation regions in a Dart [CompilationUnit]. 17 * A computer for navigation regions in a Dart [CompilationUnit].
15 */ 18 */
16 class DartUnitNavigationComputer { 19 class DartUnitNavigationComputer {
17 final CompilationUnit _unit; 20 final CompilationUnit _unit;
18 21
19 List<Map<String, Object>> _regions = <Map<String, Object>>[]; 22 final List<Map<String, Object>> _regions = <Map<String, Object>>[];
20 23
21 DartUnitNavigationComputer(this._unit); 24 DartUnitNavigationComputer(this._unit);
22 25
23 /** 26 /**
24 * Returns the computed navigation regions, not `null`. 27 * Returns the computed navigation regions, not `null`.
25 */ 28 */
26 List<Map<String, Object>> compute() { 29 List<Map<String, Object>> compute() {
27 _unit.accept(new _DartUnitNavigationComputerVisitor(this)); 30 _unit.accept(new _DartUnitNavigationComputerVisitor(this));
28 return new List.from(_regions); 31 return new List.from(_regions);
29 } 32 }
30 33
31 void _addRegion(int offset, int length, Element element) { 34 void _addRegion(int offset, int length, Element element) {
32 Map<String, Object> target = _createTarget(element); 35 Map<String, Object> target = _createTarget(element);
33 if (target == null) { 36 if (target == null) {
34 return; 37 return;
35 } 38 }
36 _regions.add({ 39 _regions.add({
37 'offset': offset, 40 OFFSET: offset,
38 'length': length, 41 LENGTH: length,
39 'targets': [target] 42 TARGETS: [target]
40 }); 43 });
41 } 44 }
42 45
46 void _addRegionForNode(AstNode node, Element element) {
47 int offset = node.offset;
48 int length = node.length;
49 _addRegion(offset, length, element);
50 }
51
52 void _addRegionForToken(Token token, Element element) {
53 int offset = token.offset;
54 int length = token.length;
55 _addRegion(offset, length, element);
56 }
57
43 void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element element) { 58 void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element element) {
44 int offset = a.offset; 59 int offset = a.offset;
45 int length = b.end - offset; 60 int length = b.end - offset;
46 _addRegion(offset, length, element); 61 _addRegion(offset, length, element);
47 } 62 }
48 63
49 void _addRegion_nodeStart_nodeStart(AstNode a, AstNode b, Element element) { 64 void _addRegion_nodeStart_nodeStart(AstNode a, AstNode b, Element element) {
50 int offset = a.offset; 65 int offset = a.offset;
51 int length = b.offset - offset; 66 int length = b.offset - offset;
52 _addRegion(offset, length, element); 67 _addRegion(offset, length, element);
53 } 68 }
54 69
55 void _addRegion_tokenStart_nodeEnd(Token a, AstNode b, Element element) { 70 void _addRegion_tokenStart_nodeEnd(Token a, AstNode b, Element element) {
56 int offset = a.offset; 71 int offset = a.offset;
57 int length = b.end - offset; 72 int length = b.end - offset;
58 _addRegion(offset, length, element); 73 _addRegion(offset, length, element);
59 } 74 }
60 75
61 void _addRegionForNode(AstNode node, Element element) {
62 int offset = node.offset;
63 int length = node.length;
64 _addRegion(offset, length, element);
65 }
66
67 void _addRegionForToken(Token token, Element element) {
68 int offset = token.offset;
69 int length = token.length;
70 _addRegion(offset, length, element);
71 }
72
73 /** 76 /**
74 * Returns the JSON for the given [Element], maybe `null` if `null` was given. 77 * Returns the JSON for the given [Element], maybe `null` if `null` was given.
75 */ 78 */
76 Map<String, Object> _createTarget(Element element) { 79 Map<String, Object> _createTarget(Element element) {
77 if (element == null) { 80 if (element == null) {
78 return null; 81 return null;
79 } 82 }
80 if (element is FieldFormalParameterElement) { 83 if (element is FieldFormalParameterElement) {
81 element = (element as FieldFormalParameterElement).field; 84 element = (element as FieldFormalParameterElement).field;
82 } 85 }
83 // prepare Source 86 // prepare Source
84 Source source = element.source; 87 Source source = element.source;
85 if (source == null) { 88 if (source == null) {
86 return null; 89 return null;
87 } 90 }
88 // prepare location 91 // prepare location
89 int offset = element.nameOffset; 92 int offset = element.nameOffset;
90 int length = element.displayName.length; 93 int length = element.displayName.length;
91 if (element is CompilationUnitElement) { 94 if (element is CompilationUnitElement) {
92 offset = 0; 95 offset = 0;
93 length = 0; 96 length = 0;
94 } 97 }
95 // return as JSON 98 // return as JSON
96 return { 99 return {
97 'file': source.fullName, 100 FILE: source.fullName,
98 'offset': offset, 101 OFFSET: offset,
99 'length': length, 102 LENGTH: length,
100 'elementId': element.location.encoding 103 ELEMENT: new computer.Element.fromEngine(element).toJson()
101 }; 104 };
102 } 105 }
103 } 106 }
104 107
105 108
106 109
107 class _DartUnitNavigationComputerVisitor extends RecursiveAstVisitor { 110 class _DartUnitNavigationComputerVisitor extends RecursiveAstVisitor {
108 final DartUnitNavigationComputer computer; 111 final DartUnitNavigationComputer computer;
109 112
110 _DartUnitNavigationComputerVisitor(this.computer); 113 _DartUnitNavigationComputerVisitor(this.computer);
(...skipping 13 matching lines...) Expand all
124 @override 127 @override
125 visitConstructorDeclaration(ConstructorDeclaration node) { 128 visitConstructorDeclaration(ConstructorDeclaration node) {
126 // associate constructor with "T" or "T.name" 129 // associate constructor with "T" or "T.name"
127 { 130 {
128 AstNode firstNode = node.returnType; 131 AstNode firstNode = node.returnType;
129 AstNode lastNode = node.name; 132 AstNode lastNode = node.name;
130 if (lastNode == null) { 133 if (lastNode == null) {
131 lastNode = firstNode; 134 lastNode = firstNode;
132 } 135 }
133 if (firstNode != null && lastNode != null) { 136 if (firstNode != null && lastNode != null) {
134 computer._addRegion_nodeStart_nodeEnd(firstNode, lastNode, node.element) ; 137 computer._addRegion_nodeStart_nodeEnd(firstNode, lastNode,
138 node.element);
135 } 139 }
136 } 140 }
137 return super.visitConstructorDeclaration(node); 141 return super.visitConstructorDeclaration(node);
138 } 142 }
139 143
140 @override 144 @override
141 visitExportDirective(ExportDirective node) { 145 visitExportDirective(ExportDirective node) {
142 ExportElement exportElement = node.element; 146 ExportElement exportElement = node.element;
143 if (exportElement != null) { 147 if (exportElement != null) {
144 Element element = exportElement.exportedLibrary; 148 Element element = exportElement.exportedLibrary;
(...skipping 23 matching lines...) Expand all
168 Element element = node.staticElement; 172 Element element = node.staticElement;
169 if (element != null && element.isSynthetic) { 173 if (element != null && element.isSynthetic) {
170 element = element.enclosingElement; 174 element = element.enclosingElement;
171 } 175 }
172 computer._addRegion_nodeStart_nodeStart(node, node.argumentList, element); 176 computer._addRegion_nodeStart_nodeStart(node, node.argumentList, element);
173 return super.visitInstanceCreationExpression(node); 177 return super.visitInstanceCreationExpression(node);
174 } 178 }
175 179
176 @override 180 @override
177 visitPartDirective(PartDirective node) { 181 visitPartDirective(PartDirective node) {
178 computer._addRegion_tokenStart_nodeEnd(node.keyword, node.uri, node.element) ; 182 computer._addRegion_tokenStart_nodeEnd(node.keyword, node.uri,
183 node.element);
179 return super.visitPartDirective(node); 184 return super.visitPartDirective(node);
180 } 185 }
181 186
182 @override 187 @override
183 visitPartOfDirective(PartOfDirective node) { 188 visitPartOfDirective(PartOfDirective node) {
184 computer._addRegion_tokenStart_nodeEnd(node.keyword, node.libraryName, node. element); 189 computer._addRegion_tokenStart_nodeEnd(node.keyword, node.libraryName,
190 node.element);
185 return super.visitPartOfDirective(node); 191 return super.visitPartOfDirective(node);
186 } 192 }
187 193
188 @override 194 @override
189 visitPostfixExpression(PostfixExpression node) { 195 visitPostfixExpression(PostfixExpression node) {
190 computer._addRegionForToken(node.operator, node.bestElement); 196 computer._addRegionForToken(node.operator, node.bestElement);
191 return super.visitPostfixExpression(node); 197 return super.visitPostfixExpression(node);
192 } 198 }
193 199
194 @override 200 @override
195 visitPrefixExpression(PrefixExpression node) { 201 visitPrefixExpression(PrefixExpression node) {
196 computer._addRegionForToken(node.operator, node.bestElement); 202 computer._addRegionForToken(node.operator, node.bestElement);
197 return super.visitPrefixExpression(node); 203 return super.visitPrefixExpression(node);
198 } 204 }
199 205
200 @override 206 @override
201 visitSimpleIdentifier(SimpleIdentifier node) { 207 visitSimpleIdentifier(SimpleIdentifier node) {
202 if (node.parent is ConstructorDeclaration) { 208 if (node.parent is ConstructorDeclaration) {
203 } else { 209 } else {
204 computer._addRegionForNode(node, node.bestElement); 210 computer._addRegionForNode(node, node.bestElement);
205 } 211 }
206 return super.visitSimpleIdentifier(node); 212 return super.visitSimpleIdentifier(node);
207 } 213 }
208 } 214 }
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