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

Side by Side Diff: pkg/analysis_server/lib/src/operation/operation_analysis.dart

Issue 847663005: Send notifications using separate server operations. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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
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 operation.analysis; 5 library operation.analysis;
6 6
7 import 'package:analysis_server/src/analysis_server.dart'; 7 import 'package:analysis_server/src/analysis_server.dart';
8 import 'package:analysis_server/src/computer/computer_highlights.dart'; 8 import 'package:analysis_server/src/computer/computer_highlights.dart';
9 import 'package:analysis_server/src/computer/computer_navigation.dart'; 9 import 'package:analysis_server/src/computer/computer_navigation.dart';
10 import 'package:analysis_server/src/computer/computer_occurrences.dart'; 10 import 'package:analysis_server/src/computer/computer_occurrences.dart';
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 try { 70 try {
71 var occurrences = new DartUnitOccurrencesComputer(dartUnit).compute(); 71 var occurrences = new DartUnitOccurrencesComputer(dartUnit).compute();
72 var params = new protocol.AnalysisOccurrencesParams(file, occurrences); 72 var params = new protocol.AnalysisOccurrencesParams(file, occurrences);
73 server.sendNotification(params.toNotification()); 73 server.sendNotification(params.toNotification());
74 } catch (exception, stackTrace) { 74 } catch (exception, stackTrace) {
75 server.sendServerErrorNotification(exception, stackTrace); 75 server.sendServerErrorNotification(exception, stackTrace);
76 } 76 }
77 } 77 }
78 78
79 79
80 void sendAnalysisNotificationOutline(AnalysisServer server, Source source, 80 void sendAnalysisNotificationOutline(AnalysisServer server, String file,
81 LineInfo lineInfo, CompilationUnit dartUnit) { 81 LineInfo lineInfo, CompilationUnit dartUnit) {
82 try { 82 try {
83 var computer = new DartUnitOutlineComputer(source, lineInfo, dartUnit); 83 var computer = new DartUnitOutlineComputer(file, lineInfo, dartUnit);
84 var outline = computer.compute(); 84 var outline = computer.compute();
85 var params = new protocol.AnalysisOutlineParams(source.fullName, outline); 85 var params = new protocol.AnalysisOutlineParams(file, outline);
86 server.sendNotification(params.toNotification()); 86 server.sendNotification(params.toNotification());
87 } catch (exception, stackTrace) { 87 } catch (exception, stackTrace) {
88 server.sendServerErrorNotification(exception, stackTrace); 88 server.sendServerErrorNotification(exception, stackTrace);
89 } 89 }
90 } 90 }
91 91
92 92
93 void sendAnalysisNotificationOverrides(AnalysisServer server, String file, 93 void sendAnalysisNotificationOverrides(AnalysisServer server, String file,
94 CompilationUnit dartUnit) { 94 CompilationUnit dartUnit) {
95 try { 95 try {
96 var overrides = new DartUnitOverridesComputer(dartUnit).compute(); 96 var overrides = new DartUnitOverridesComputer(dartUnit).compute();
97 var params = new protocol.AnalysisOverridesParams(file, overrides); 97 var params = new protocol.AnalysisOverridesParams(file, overrides);
98 server.sendNotification(params.toNotification()); 98 server.sendNotification(params.toNotification());
99 } catch (exception, stackTrace) { 99 } catch (exception, stackTrace) {
100 server.sendServerErrorNotification(exception, stackTrace); 100 server.sendServerErrorNotification(exception, stackTrace);
101 } 101 }
102 } 102 }
103 103
104 104
105 /** 105 /**
106 * Instances of [PerformAnalysisOperation] perform a single analysis task. 106 * Instances of [PerformAnalysisOperation] perform a single analysis task.
107 */ 107 */
108 class PerformAnalysisOperation extends ServerOperation { 108 class PerformAnalysisOperation extends ServerOperation {
109 static const int IDLE_CACHE_SIZE = AnalysisOptionsImpl.DEFAULT_CACHE_SIZE; 109 static const int IDLE_CACHE_SIZE = AnalysisOptionsImpl.DEFAULT_CACHE_SIZE;
110 static const int WORKING_CACHE_SIZE = 512; 110 static const int WORKING_CACHE_SIZE = 512;
111 111
112 final AnalysisContext context; 112 final AnalysisContext context;
113 final bool isPriority;
113 final bool isContinue; 114 final bool isContinue;
114 115
115 PerformAnalysisOperation(this.context, this.isContinue); 116 PerformAnalysisOperation(this.context, this.isPriority, this.isContinue);
116 117
117 @override 118 @override
118 ServerOperationPriority get priority { 119 ServerOperationPriority get priority {
119 if (isContinue) { 120 if (isPriority) {
120 return ServerOperationPriority.ANALYSIS_CONTINUE; 121 if (isContinue) {
122 return ServerOperationPriority.PRIORITY_ANALYSIS_CONTINUE;
123 } else {
124 return ServerOperationPriority.PRIORITY_ANALYSIS;
125 }
121 } else { 126 } else {
122 return ServerOperationPriority.ANALYSIS; 127 if (isContinue) {
128 return ServerOperationPriority.ANALYSIS_CONTINUE;
129 } else {
130 return ServerOperationPriority.ANALYSIS;
131 }
123 } 132 }
124 } 133 }
125 134
126 @override 135 @override
127 void perform(AnalysisServer server) { 136 void perform(AnalysisServer server) {
128 // 137 //
129 // TODO(brianwilkerson) Add an optional function-valued parameter to 138 // TODO(brianwilkerson) Add an optional function-valued parameter to
130 // performAnalysisTask that will be called when the task has been computed 139 // performAnalysisTask that will be called when the task has been computed
131 // but before it is performed and send notification in the function: 140 // but before it is performed and send notification in the function:
132 // 141 //
133 // AnalysisResult result = context.performAnalysisTask((taskDescription) { 142 // AnalysisResult result = context.performAnalysisTask((taskDescription) {
134 // sendStatusNotification(context.toString(), taskDescription); 143 // sendStatusNotification(context.toString(), taskDescription);
135 // }); 144 // });
136 if (!isContinue) { 145 if (!isContinue) {
137 _setCacheSize(WORKING_CACHE_SIZE); 146 _setCacheSize(WORKING_CACHE_SIZE);
138 } 147 }
139 // prepare results 148 // prepare results
140 AnalysisResult result = context.performAnalysisTask(); 149 AnalysisResult result = context.performAnalysisTask();
141 List<ChangeNotice> notices = result.changeNotices; 150 List<ChangeNotice> notices = result.changeNotices;
142 if (notices == null) { 151 if (notices == null) {
143 _setCacheSize(IDLE_CACHE_SIZE); 152 _setCacheSize(IDLE_CACHE_SIZE);
144 server.sendContextAnalysisDoneNotifications( 153 server.sendContextAnalysisDoneNotifications(
145 context, 154 context,
146 AnalysisDoneReason.COMPLETE); 155 AnalysisDoneReason.COMPLETE);
147 return; 156 return;
148 } 157 }
149 // process results 158 // process results
150 sendNotices(server, notices); 159 _sendNotices(server, notices);
151 updateIndex(server, notices); 160 _updateIndex(server, notices);
152 // continue analysis 161 // continue analysis
153 server.addOperation(new PerformAnalysisOperation(context, true)); 162 server.addOperation(
154 } 163 new PerformAnalysisOperation(context, isPriority, true));
155
156 void _setCacheSize(int cacheSize) {
157 AnalysisOptionsImpl options = new AnalysisOptionsImpl.con1(context.analysisO ptions);
158 options.cacheSize = cacheSize;
159 context.analysisOptions = options;
160 } 164 }
161 165
162 /** 166 /**
163 * Send the information in the given list of notices back to the client. 167 * Send the information in the given list of notices back to the client.
164 */ 168 */
165 void sendNotices(AnalysisServer server, List<ChangeNotice> notices) { 169 void _sendNotices(AnalysisServer server, List<ChangeNotice> notices) {
166 for (int i = 0; i < notices.length; i++) { 170 for (int i = 0; i < notices.length; i++) {
167 ChangeNotice notice = notices[i]; 171 ChangeNotice notice = notices[i];
168 Source source = notice.source; 172 Source source = notice.source;
169 String file = source.fullName; 173 String file = source.fullName;
170 // Dart 174 // Dart
171 CompilationUnit dartUnit = notice.compilationUnit; 175 CompilationUnit dartUnit = notice.compilationUnit;
172 if (dartUnit != null) { 176 if (dartUnit != null) {
173 if (server.hasAnalysisSubscription( 177 if (server.hasAnalysisSubscription(
174 protocol.AnalysisService.HIGHLIGHTS, 178 protocol.AnalysisService.HIGHLIGHTS,
175 file)) { 179 file)) {
176 sendAnalysisNotificationHighlights(server, file, dartUnit); 180 server.addOperation(new _DartHighlightsOperation(file, dartUnit));
177 } 181 }
178 if (server.hasAnalysisSubscription( 182 if (server.hasAnalysisSubscription(
179 protocol.AnalysisService.NAVIGATION, 183 protocol.AnalysisService.NAVIGATION,
180 file)) { 184 file)) {
181 sendAnalysisNotificationNavigation(server, file, dartUnit); 185 server.addOperation(new _DartNavigationOperation(file, dartUnit));
182 } 186 }
183 if (server.hasAnalysisSubscription( 187 if (server.hasAnalysisSubscription(
184 protocol.AnalysisService.OCCURRENCES, 188 protocol.AnalysisService.OCCURRENCES,
185 file)) { 189 file)) {
186 sendAnalysisNotificationOccurrences(server, file, dartUnit); 190 server.addOperation(new _DartOccurrencesOperation(file, dartUnit));
187 } 191 }
188 if (server.hasAnalysisSubscription( 192 if (server.hasAnalysisSubscription(
189 protocol.AnalysisService.OUTLINE, 193 protocol.AnalysisService.OUTLINE,
190 file)) { 194 file)) {
191 LineInfo lineInfo = notice.lineInfo; 195 LineInfo lineInfo = notice.lineInfo;
192 sendAnalysisNotificationOutline(server, source, lineInfo, dartUnit); 196 server.addOperation(
197 new _DartOutlineOperation(file, lineInfo, dartUnit));
193 } 198 }
194 if (server.hasAnalysisSubscription( 199 if (server.hasAnalysisSubscription(
195 protocol.AnalysisService.OVERRIDES, 200 protocol.AnalysisService.OVERRIDES,
196 file)) { 201 file)) {
197 sendAnalysisNotificationOverrides(server, file, dartUnit); 202 server.addOperation(new _DartOverridesOperation(file, dartUnit));
198 } 203 }
199 } 204 }
200 if (server.shouldSendErrorsNotificationFor(file)) { 205 if (server.shouldSendErrorsNotificationFor(file)) {
201 sendAnalysisNotificationErrors( 206 server.addOperation(
202 server, 207 new _NotificationErrorsOperation(file, notice.lineInfo, notice.error s));
203 file,
204 notice.lineInfo,
205 notice.errors);
206 } 208 }
207 server.fileAnalyzed(notice); 209 server.fileAnalyzed(notice);
208 } 210 }
209 } 211 }
210 212
211 void updateIndex(AnalysisServer server, List<ChangeNotice> notices) { 213 void _setCacheSize(int cacheSize) {
214 AnalysisOptionsImpl options =
215 new AnalysisOptionsImpl.con1(context.analysisOptions);
216 options.cacheSize = cacheSize;
217 context.analysisOptions = options;
218 }
219
220 void _updateIndex(AnalysisServer server, List<ChangeNotice> notices) {
212 Index index = server.index; 221 Index index = server.index;
213 if (index == null) { 222 if (index == null) {
214 return; 223 return;
215 } 224 }
216 for (ChangeNotice notice in notices) { 225 for (ChangeNotice notice in notices) {
217 // Dart 226 // Dart
218 try { 227 try {
219 CompilationUnit dartUnit = notice.compilationUnit; 228 CompilationUnit dartUnit = notice.compilationUnit;
220 if (dartUnit != null) { 229 if (dartUnit != null) {
221 index.indexUnit(context, dartUnit); 230 index.indexUnit(context, dartUnit);
222 } 231 }
223 } catch (exception, stackTrace) { 232 } catch (exception, stackTrace) {
224 server.sendServerErrorNotification(exception, stackTrace); 233 server.sendServerErrorNotification(exception, stackTrace);
225 } 234 }
226 // HTML 235 // HTML
227 try { 236 try {
228 HtmlUnit htmlUnit = notice.htmlUnit; 237 HtmlUnit htmlUnit = notice.htmlUnit;
229 if (htmlUnit != null) { 238 if (htmlUnit != null) {
230 index.indexHtmlUnit(context, htmlUnit); 239 index.indexHtmlUnit(context, htmlUnit);
231 } 240 }
232 } catch (exception, stackTrace) { 241 } catch (exception, stackTrace) {
233 server.sendServerErrorNotification(exception, stackTrace); 242 server.sendServerErrorNotification(exception, stackTrace);
234 } 243 }
235 } 244 }
236 } 245 }
237 } 246 }
247
248
249 class _DartHighlightsOperation extends _DartNotificationOperation {
250 _DartHighlightsOperation(String file, CompilationUnit unit)
251 : super(file, unit);
252
253 @override
254 void perform(AnalysisServer server) {
255 sendAnalysisNotificationHighlights(server, file, unit);
256 }
257 }
258
259
260 class _DartNavigationOperation extends _DartNotificationOperation {
261 _DartNavigationOperation(String file, CompilationUnit unit)
262 : super(file, unit);
263
264 @override
265 void perform(AnalysisServer server) {
266 sendAnalysisNotificationNavigation(server, file, unit);
267 }
268 }
269
270
271 abstract class _DartNotificationOperation extends ServerOperation {
272 final String file;
273 final CompilationUnit unit;
274
275 _DartNotificationOperation(this.file, this.unit);
276
277 @override
278 ServerOperationPriority get priority {
279 return ServerOperationPriority.ANALYSIS_NOTIFICATION;
280 }
281 }
282
283
284 class _DartOccurrencesOperation extends _DartNotificationOperation {
285 _DartOccurrencesOperation(String file, CompilationUnit unit)
286 : super(file, unit);
287
288 @override
289 void perform(AnalysisServer server) {
290 sendAnalysisNotificationOccurrences(server, file, unit);
291 }
292 }
293
294
295 class _DartOutlineOperation extends _DartNotificationOperation {
296 final LineInfo lineInfo;
297
298 _DartOutlineOperation(String file, this.lineInfo, CompilationUnit unit)
299 : super(file, unit);
300
301 @override
302 void perform(AnalysisServer server) {
303 sendAnalysisNotificationOutline(server, file, lineInfo, unit);
304 }
305 }
306
307
308 class _DartOverridesOperation extends _DartNotificationOperation {
309 _DartOverridesOperation(String file, CompilationUnit unit)
310 : super(file, unit);
311
312 @override
313 void perform(AnalysisServer server) {
314 sendAnalysisNotificationOverrides(server, file, unit);
315 }
316 }
317
318
319 class _NotificationErrorsOperation extends ServerOperation {
320 final String file;
321 final LineInfo lineInfo;
322 final List<AnalysisError> errors;
323
324 _NotificationErrorsOperation(this.file, this.lineInfo, this.errors);
325
326 @override
327 ServerOperationPriority get priority {
328 return ServerOperationPriority.ANALYSIS_NOTIFICATION;
329 }
330
331 @override
332 void perform(AnalysisServer server) {
333 sendAnalysisNotificationErrors(server, file, lineInfo, errors);
334 }
335 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/operation/operation.dart ('k') | pkg/analysis_server/lib/src/operation/operation_queue.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698