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

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

Issue 854443002: Catch and report exceptions in computers. (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';
11 import 'package:analysis_server/src/computer/computer_outline.dart'; 11 import 'package:analysis_server/src/computer/computer_outline.dart';
12 import 'package:analysis_server/src/computer/computer_overrides.dart'; 12 import 'package:analysis_server/src/computer/computer_overrides.dart';
13 import 'package:analysis_server/src/operation/operation.dart'; 13 import 'package:analysis_server/src/operation/operation.dart';
14 import 'package:analysis_server/src/protocol_server.dart' as protocol; 14 import 'package:analysis_server/src/protocol_server.dart' as protocol;
15 import 'package:analysis_server/src/services/index/index.dart'; 15 import 'package:analysis_server/src/services/index/index.dart';
16 import 'package:analyzer/src/generated/ast.dart'; 16 import 'package:analyzer/src/generated/ast.dart';
17 import 'package:analyzer/src/generated/engine.dart'; 17 import 'package:analyzer/src/generated/engine.dart';
18 import 'package:analyzer/src/generated/error.dart'; 18 import 'package:analyzer/src/generated/error.dart';
19 import 'package:analyzer/src/generated/html.dart'; 19 import 'package:analyzer/src/generated/html.dart';
20 import 'package:analyzer/src/generated/source.dart'; 20 import 'package:analyzer/src/generated/source.dart';
21 21
22 22
23 void sendAnalysisNotificationErrors(AnalysisServer server, String file, 23 void sendAnalysisNotificationErrors(AnalysisServer server, String file,
24 LineInfo lineInfo, List<AnalysisError> errors) { 24 LineInfo lineInfo, List<AnalysisError> errors) {
25 if (errors == null) { 25 try {
26 errors = <AnalysisError>[]; 26 if (errors == null) {
27 errors = <AnalysisError>[];
28 }
29 var serverErrors =
30 protocol.doAnalysisError_listFromEngine(lineInfo, errors);
31 var params = new protocol.AnalysisErrorsParams(file, serverErrors);
32 server.sendNotification(params.toNotification());
33 } catch (exception, stackTrace) {
34 server.sendServerErrorNotification(exception, stackTrace, fatal: false);
27 } 35 }
28 var serverErrors = protocol.doAnalysisError_listFromEngine(lineInfo, errors);
29 var params = new protocol.AnalysisErrorsParams(file, serverErrors);
30 server.sendNotification(params.toNotification());
31 } 36 }
32 37
33 38
34 void sendAnalysisNotificationHighlights(AnalysisServer server, String file, 39 void sendAnalysisNotificationHighlights(AnalysisServer server, String file,
35 CompilationUnit dartUnit) { 40 CompilationUnit dartUnit) {
36 var regions = new DartUnitHighlightsComputer(dartUnit).compute(); 41 try {
37 var params = new protocol.AnalysisHighlightsParams(file, regions); 42 var regions = new DartUnitHighlightsComputer(dartUnit).compute();
38 server.sendNotification(params.toNotification()); 43 var params = new protocol.AnalysisHighlightsParams(file, regions);
44 server.sendNotification(params.toNotification());
45 } catch (exception, stackTrace) {
46 server.sendServerErrorNotification(exception, stackTrace, fatal: false);
47 }
39 } 48 }
40 49
41 50
42 void sendAnalysisNotificationNavigation(AnalysisServer server, String file, 51 void sendAnalysisNotificationNavigation(AnalysisServer server, String file,
43 CompilationUnit dartUnit) { 52 CompilationUnit dartUnit) {
44 var computer = new DartUnitNavigationComputer(dartUnit); 53 try {
45 computer.compute(); 54 var computer = new DartUnitNavigationComputer(dartUnit);
46 var params = new protocol.AnalysisNavigationParams( 55 computer.compute();
47 file, 56 var params = new protocol.AnalysisNavigationParams(
48 computer.regions, 57 file,
49 computer.targets, 58 computer.regions,
50 computer.files); 59 computer.targets,
51 server.sendNotification(params.toNotification()); 60 computer.files);
61 server.sendNotification(params.toNotification());
62 } catch (exception, stackTrace) {
63 server.sendServerErrorNotification(exception, stackTrace, fatal: false);
64 }
52 } 65 }
53 66
54 67
55 void sendAnalysisNotificationOccurrences(AnalysisServer server, String file, 68 void sendAnalysisNotificationOccurrences(AnalysisServer server, String file,
56 CompilationUnit dartUnit) { 69 CompilationUnit dartUnit) {
57 var occurrences = new DartUnitOccurrencesComputer(dartUnit).compute(); 70 try {
58 var params = new protocol.AnalysisOccurrencesParams(file, occurrences); 71 var occurrences = new DartUnitOccurrencesComputer(dartUnit).compute();
59 server.sendNotification(params.toNotification()); 72 var params = new protocol.AnalysisOccurrencesParams(file, occurrences);
73 server.sendNotification(params.toNotification());
74 } catch (exception, stackTrace) {
75 server.sendServerErrorNotification(exception, stackTrace, fatal: false);
76 }
60 } 77 }
61 78
62 79
63 void sendAnalysisNotificationOutline(AnalysisServer server, Source source, 80 void sendAnalysisNotificationOutline(AnalysisServer server, Source source,
64 LineInfo lineInfo, CompilationUnit dartUnit) { 81 LineInfo lineInfo, CompilationUnit dartUnit) {
65 var outline = 82 try {
66 new DartUnitOutlineComputer(source, lineInfo, dartUnit).compute(); 83 var computer = new DartUnitOutlineComputer(source, lineInfo, dartUnit);
67 var params = new protocol.AnalysisOutlineParams(source.fullName, outline); 84 var outline = computer.compute();
68 server.sendNotification(params.toNotification()); 85 var params = new protocol.AnalysisOutlineParams(source.fullName, outline);
86 server.sendNotification(params.toNotification());
87 } catch (exception, stackTrace) {
88 server.sendServerErrorNotification(exception, stackTrace, fatal: false);
89 }
69 } 90 }
70 91
71 92
72 void sendAnalysisNotificationOverrides(AnalysisServer server, String file, 93 void sendAnalysisNotificationOverrides(AnalysisServer server, String file,
73 CompilationUnit dartUnit) { 94 CompilationUnit dartUnit) {
74 var overrides = new DartUnitOverridesComputer(dartUnit).compute(); 95 try {
75 var params = new protocol.AnalysisOverridesParams(file, overrides); 96 var overrides = new DartUnitOverridesComputer(dartUnit).compute();
76 server.sendNotification(params.toNotification()); 97 var params = new protocol.AnalysisOverridesParams(file, overrides);
98 server.sendNotification(params.toNotification());
99 } catch (exception, stackTrace) {
100 server.sendServerErrorNotification(exception, stackTrace, fatal: false);
101 }
77 } 102 }
78 103
79 104
80 /** 105 /**
81 * Instances of [PerformAnalysisOperation] perform a single analysis task. 106 * Instances of [PerformAnalysisOperation] perform a single analysis task.
82 */ 107 */
83 class PerformAnalysisOperation extends ServerOperation { 108 class PerformAnalysisOperation extends ServerOperation {
84 final AnalysisContext context; 109 final AnalysisContext context;
85 final bool isContinue; 110 final bool isContinue;
86 111
(...skipping 22 matching lines...) Expand all
109 AnalysisResult result = context.performAnalysisTask(); 134 AnalysisResult result = context.performAnalysisTask();
110 List<ChangeNotice> notices = result.changeNotices; 135 List<ChangeNotice> notices = result.changeNotices;
111 if (notices == null) { 136 if (notices == null) {
112 server.sendContextAnalysisDoneNotifications( 137 server.sendContextAnalysisDoneNotifications(
113 context, 138 context,
114 AnalysisDoneReason.COMPLETE); 139 AnalysisDoneReason.COMPLETE);
115 return; 140 return;
116 } 141 }
117 // process results 142 // process results
118 sendNotices(server, notices); 143 sendNotices(server, notices);
119 updateIndex(server.index, notices); 144 updateIndex(server, notices);
120 // continue analysis 145 // continue analysis
121 server.addOperation(new PerformAnalysisOperation(context, true)); 146 server.addOperation(new PerformAnalysisOperation(context, true));
122 } 147 }
123 148
124 /** 149 /**
125 * Send the information in the given list of notices back to the client. 150 * Send the information in the given list of notices back to the client.
126 */ 151 */
127 void sendNotices(AnalysisServer server, List<ChangeNotice> notices) { 152 void sendNotices(AnalysisServer server, List<ChangeNotice> notices) {
128 for (int i = 0; i < notices.length; i++) { 153 for (int i = 0; i < notices.length; i++) {
129 ChangeNotice notice = notices[i]; 154 ChangeNotice notice = notices[i];
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 sendAnalysisNotificationErrors( 188 sendAnalysisNotificationErrors(
164 server, 189 server,
165 file, 190 file,
166 notice.lineInfo, 191 notice.lineInfo,
167 notice.errors); 192 notice.errors);
168 } 193 }
169 server.fileAnalyzed(notice); 194 server.fileAnalyzed(notice);
170 } 195 }
171 } 196 }
172 197
173 void updateIndex(Index index, List<ChangeNotice> notices) { 198 void updateIndex(AnalysisServer server, List<ChangeNotice> notices) {
199 Index index = server.index;
174 if (index == null) { 200 if (index == null) {
175 return; 201 return;
176 } 202 }
177 for (ChangeNotice notice in notices) { 203 for (ChangeNotice notice in notices) {
178 // Dart 204 // Dart
179 { 205 try {
180 CompilationUnit dartUnit = notice.compilationUnit; 206 CompilationUnit dartUnit = notice.compilationUnit;
181 if (dartUnit != null) { 207 if (dartUnit != null) {
182 index.indexUnit(context, dartUnit); 208 index.indexUnit(context, dartUnit);
183 } 209 }
210 } catch (exception, stackTrace) {
211 server.sendServerErrorNotification(exception, stackTrace, fatal: false);
184 } 212 }
185 // HTML 213 // HTML
186 { 214 try {
187 HtmlUnit htmlUnit = notice.htmlUnit; 215 HtmlUnit htmlUnit = notice.htmlUnit;
188 if (htmlUnit != null) { 216 if (htmlUnit != null) {
189 index.indexHtmlUnit(context, htmlUnit); 217 index.indexHtmlUnit(context, htmlUnit);
190 } 218 }
219 } catch (exception, stackTrace) {
220 server.sendServerErrorNotification(exception, stackTrace, fatal: false);
191 } 221 }
192 } 222 }
193 } 223 }
194 } 224 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698