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

Side by Side Diff: pkg/analysis_server/lib/src/edit/edit_domain.dart

Issue 2549883002: Guard against null in EditDomain. (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | no next file » | 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 edit.domain; 5 library edit.domain;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/plugin/edit/assist/assist_core.dart'; 9 import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
10 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart'; 10 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 134
135 return new EditFormatResult(edits, newStart, newLength) 135 return new EditFormatResult(edits, newStart, newLength)
136 .toResponse(request.id); 136 .toResponse(request.id);
137 } 137 }
138 138
139 Future getAssists(Request request) async { 139 Future getAssists(Request request) async {
140 EditGetAssistsParams params = new EditGetAssistsParams.fromRequest(request); 140 EditGetAssistsParams params = new EditGetAssistsParams.fromRequest(request);
141 List<Assist> assists; 141 List<Assist> assists;
142 if (server.options.enableNewAnalysisDriver) { 142 if (server.options.enableNewAnalysisDriver) {
143 AnalysisResult result = await server.getAnalysisResult(params.file); 143 AnalysisResult result = await server.getAnalysisResult(params.file);
144 CompilationUnit unit = result.unit; 144 if (result != null) {
145 DartAssistContext dartAssistContext = new _DartAssistContextForValues( 145 CompilationUnit unit = result.unit;
146 unit.element.source, 146 DartAssistContext dartAssistContext = new _DartAssistContextForValues(
147 params.offset, 147 unit.element.source,
148 params.length, 148 params.offset,
149 unit.element.context, 149 params.length,
150 unit); 150 unit.element.context,
151 try { 151 unit);
152 AssistProcessor processor = new AssistProcessor(dartAssistContext); 152 try {
153 assists = await processor.compute(); 153 AssistProcessor processor = new AssistProcessor(dartAssistContext);
154 } catch (_) {} 154 assists = await processor.compute();
155 } catch (_) {}
156 }
155 } else { 157 } else {
156 ContextSourcePair pair = server.getContextSourcePair(params.file); 158 ContextSourcePair pair = server.getContextSourcePair(params.file);
157 engine.AnalysisContext context = pair.context; 159 engine.AnalysisContext context = pair.context;
158 Source source = pair.source; 160 Source source = pair.source;
159 if (context != null && source != null) { 161 if (context != null && source != null) {
160 assists = await computeAssists( 162 assists = await computeAssists(
161 server.serverPlugin, context, source, params.offset, params.length); 163 server.serverPlugin, context, source, params.offset, params.length);
162 } 164 }
163 } 165 }
164 // Send the assist changes. 166 // Send the assist changes.
165 List<SourceChange> changes = <SourceChange>[]; 167 List<SourceChange> changes = <SourceChange>[];
166 assists?.forEach((Assist assist) { 168 assists?.forEach((Assist assist) {
167 changes.add(assist.change); 169 changes.add(assist.change);
168 }); 170 });
169 Response response = 171 Response response =
170 new EditGetAssistsResult(changes).toResponse(request.id); 172 new EditGetAssistsResult(changes).toResponse(request.id);
171 server.sendResponse(response); 173 server.sendResponse(response);
172 } 174 }
173 175
174 Future getFixes(Request request) async { 176 Future getFixes(Request request) async {
175 var params = new EditGetFixesParams.fromRequest(request); 177 var params = new EditGetFixesParams.fromRequest(request);
176 String file = params.file; 178 String file = params.file;
177 int offset = params.offset; 179 int offset = params.offset;
178 180
179 List<AnalysisErrorFixes> errorFixesList = <AnalysisErrorFixes>[]; 181 List<AnalysisErrorFixes> errorFixesList = <AnalysisErrorFixes>[];
180 if (server.options.enableNewAnalysisDriver) { 182 if (server.options.enableNewAnalysisDriver) {
181 AnalysisResult result = await server.getAnalysisResult(file); 183 AnalysisResult result = await server.getAnalysisResult(file);
182 CompilationUnit unit = result.unit; 184 if (result != null) {
183 LineInfo lineInfo = result.lineInfo; 185 CompilationUnit unit = result.unit;
184 int requestLine = lineInfo.getLocation(offset).lineNumber; 186 LineInfo lineInfo = result.lineInfo;
185 for (engine.AnalysisError error in result.errors) { 187 int requestLine = lineInfo.getLocation(offset).lineNumber;
186 int errorLine = lineInfo.getLocation(error.offset).lineNumber; 188 for (engine.AnalysisError error in result.errors) {
187 if (errorLine == requestLine) { 189 int errorLine = lineInfo.getLocation(error.offset).lineNumber;
188 var context = new _DartFixContextImpl( 190 if (errorLine == requestLine) {
189 server.resourceProvider, unit.element.context, unit, error); 191 var context = new _DartFixContextImpl(
190 List<Fix> fixes = 192 server.resourceProvider, unit.element.context, unit, error);
191 await new DefaultFixContributor().internalComputeFixes(context); 193 List<Fix> fixes =
192 if (fixes.isNotEmpty) { 194 await new DefaultFixContributor().internalComputeFixes(context);
193 AnalysisError serverError = 195 if (fixes.isNotEmpty) {
194 newAnalysisError_fromEngine(lineInfo, error); 196 AnalysisError serverError =
195 AnalysisErrorFixes errorFixes = new AnalysisErrorFixes(serverError); 197 newAnalysisError_fromEngine(lineInfo, error);
196 errorFixesList.add(errorFixes); 198 AnalysisErrorFixes errorFixes =
197 fixes.forEach((fix) { 199 new AnalysisErrorFixes(serverError);
198 errorFixes.fixes.add(fix.change); 200 errorFixesList.add(errorFixes);
199 }); 201 fixes.forEach((fix) {
202 errorFixes.fixes.add(fix.change);
203 });
204 }
200 } 205 }
201 } 206 }
202 } 207 }
203 } else { 208 } else {
204 CompilationUnit unit = await server.getResolvedCompilationUnit(file); 209 CompilationUnit unit = await server.getResolvedCompilationUnit(file);
205 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); 210 engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
206 if (errorInfo != null) { 211 LineInfo lineInfo = errorInfo?.lineInfo;
207 LineInfo lineInfo = errorInfo.lineInfo; 212 if (unit != null && errorInfo != null && lineInfo != null) {
208 if (lineInfo != null) { 213 int requestLine = lineInfo.getLocation(offset).lineNumber;
209 int requestLine = lineInfo.getLocation(offset).lineNumber; 214 for (engine.AnalysisError error in errorInfo.errors) {
210 for (engine.AnalysisError error in errorInfo.errors) { 215 int errorLine = lineInfo.getLocation(error.offset).lineNumber;
211 int errorLine = lineInfo.getLocation(error.offset).lineNumber; 216 if (errorLine == requestLine) {
212 if (errorLine == requestLine) { 217 List<Fix> fixes = await computeFixes(server.serverPlugin,
213 List<Fix> fixes = await computeFixes(server.serverPlugin, 218 server.resourceProvider, unit.element.context, error);
214 server.resourceProvider, unit.element.context, error); 219 if (fixes.isNotEmpty) {
215 if (fixes.isNotEmpty) { 220 AnalysisError serverError =
216 AnalysisError serverError = 221 newAnalysisError_fromEngine(lineInfo, error);
217 newAnalysisError_fromEngine(lineInfo, error); 222 AnalysisErrorFixes errorFixes =
218 AnalysisErrorFixes errorFixes = 223 new AnalysisErrorFixes(serverError);
219 new AnalysisErrorFixes(serverError); 224 errorFixesList.add(errorFixes);
220 errorFixesList.add(errorFixes); 225 fixes.forEach((fix) {
221 fixes.forEach((fix) { 226 errorFixes.fixes.add(fix.change);
222 errorFixes.fixes.add(fix.change); 227 });
223 });
224 }
225 } 228 }
226 } 229 }
227 } 230 }
228 } 231 }
229 } 232 }
230 233
231 // Send the response. 234 // Send the response.
232 server.sendResponse( 235 server.sendResponse(
233 new EditGetFixesResult(errorFixesList).toResponse(request.id)); 236 new EditGetFixesResult(errorFixesList).toResponse(request.id));
234 } 237 }
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 } 953 }
951 return new RefactoringStatus(); 954 return new RefactoringStatus();
952 } 955 }
953 } 956 }
954 957
955 /** 958 /**
956 * [_RefactoringManager] throws instances of this class internally to stop 959 * [_RefactoringManager] throws instances of this class internally to stop
957 * processing in a manager that was reset. 960 * processing in a manager that was reset.
958 */ 961 */
959 class _ResetError {} 962 class _ResetError {}
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698