| OLD | NEW |
| 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'; |
| 11 import 'package:analysis_server/plugin/edit/fix/fix_core.dart'; | 11 import 'package:analysis_server/plugin/edit/fix/fix_core.dart'; |
| 12 import 'package:analysis_server/plugin/edit/fix/fix_dart.dart'; | 12 import 'package:analysis_server/plugin/edit/fix/fix_dart.dart'; |
| 13 import 'package:analysis_server/src/analysis_server.dart'; | 13 import 'package:analysis_server/src/analysis_server.dart'; |
| 14 import 'package:analysis_server/src/collections.dart'; | 14 import 'package:analysis_server/src/collections.dart'; |
| 15 import 'package:analysis_server/src/constants.dart'; | 15 import 'package:analysis_server/src/constants.dart'; |
| 16 import 'package:analysis_server/src/protocol_server.dart' hide Element; | 16 import 'package:analysis_server/src/protocol_server.dart' hide Element; |
| 17 import 'package:analysis_server/src/services/correction/assist.dart'; | 17 import 'package:analysis_server/src/services/correction/assist.dart'; |
| 18 import 'package:analysis_server/src/services/correction/assist_internal.dart'; | 18 import 'package:analysis_server/src/services/correction/assist_internal.dart'; |
| 19 import 'package:analysis_server/src/services/correction/fix.dart'; | 19 import 'package:analysis_server/src/services/correction/fix.dart'; |
| 20 import 'package:analysis_server/src/services/correction/fix_internal.dart'; | 20 import 'package:analysis_server/src/services/correction/fix_internal.dart'; |
| 21 import 'package:analysis_server/src/services/correction/organize_directives.dart
'; | 21 import 'package:analysis_server/src/services/correction/organize_directives.dart
'; |
| 22 import 'package:analysis_server/src/services/correction/sort_members.dart'; | 22 import 'package:analysis_server/src/services/correction/sort_members.dart'; |
| 23 import 'package:analysis_server/src/services/correction/status.dart'; | 23 import 'package:analysis_server/src/services/correction/status.dart'; |
| 24 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; | 24 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; |
| 25 import 'package:analysis_server/src/services/search/search_engine.dart'; | 25 import 'package:analysis_server/src/services/search/search_engine.dart'; |
| 26 import 'package:analyzer/dart/ast/ast.dart'; | 26 import 'package:analyzer/dart/ast/ast.dart'; |
| 27 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; |
| 27 import 'package:analyzer/dart/element/element.dart'; | 28 import 'package:analyzer/dart/element/element.dart'; |
| 28 import 'package:analyzer/error/error.dart' as engine; | 29 import 'package:analyzer/error/error.dart' as engine; |
| 29 import 'package:analyzer/file_system/file_system.dart'; | 30 import 'package:analyzer/file_system/file_system.dart'; |
| 30 import 'package:analyzer/src/dart/analysis/driver.dart'; | 31 import 'package:analyzer/src/dart/analysis/driver.dart'; |
| 31 import 'package:analyzer/src/dart/scanner/scanner.dart' as engine; | 32 import 'package:analyzer/src/dart/scanner/scanner.dart' as engine; |
| 32 import 'package:analyzer/src/error/codes.dart' as engine; | 33 import 'package:analyzer/src/error/codes.dart' as engine; |
| 33 import 'package:analyzer/src/generated/engine.dart' as engine; | 34 import 'package:analyzer/src/generated/engine.dart' as engine; |
| 34 import 'package:analyzer/src/generated/parser.dart' as engine; | 35 import 'package:analyzer/src/generated/parser.dart' as engine; |
| 35 import 'package:analyzer/src/generated/source.dart'; | 36 import 'package:analyzer/src/generated/source.dart'; |
| 36 import 'package:analyzer/task/dart.dart'; | 37 import 'package:analyzer/task/dart.dart'; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 .toResponse(request.id); | 137 .toResponse(request.id); |
| 137 } | 138 } |
| 138 | 139 |
| 139 Future getAssists(Request request) async { | 140 Future getAssists(Request request) async { |
| 140 EditGetAssistsParams params = new EditGetAssistsParams.fromRequest(request); | 141 EditGetAssistsParams params = new EditGetAssistsParams.fromRequest(request); |
| 141 List<Assist> assists; | 142 List<Assist> assists; |
| 142 if (server.options.enableNewAnalysisDriver) { | 143 if (server.options.enableNewAnalysisDriver) { |
| 143 AnalysisResult result = await server.getAnalysisResult(params.file); | 144 AnalysisResult result = await server.getAnalysisResult(params.file); |
| 144 if (result != null) { | 145 if (result != null) { |
| 145 CompilationUnit unit = result.unit; | 146 CompilationUnit unit = result.unit; |
| 147 CompilationUnitElement compilationUnitElement = |
| 148 resolutionMap.elementForCompilationUnit(unit); |
| 146 DartAssistContext dartAssistContext = new _DartAssistContextForValues( | 149 DartAssistContext dartAssistContext = new _DartAssistContextForValues( |
| 147 unit.element.source, | 150 compilationUnitElement.source, |
| 148 params.offset, | 151 params.offset, |
| 149 params.length, | 152 params.length, |
| 150 unit.element.context, | 153 compilationUnitElement.context, |
| 151 unit); | 154 unit); |
| 152 try { | 155 try { |
| 153 AssistProcessor processor = new AssistProcessor(dartAssistContext); | 156 AssistProcessor processor = new AssistProcessor(dartAssistContext); |
| 154 assists = await processor.compute(); | 157 assists = await processor.compute(); |
| 155 } catch (_) {} | 158 } catch (_) {} |
| 156 } | 159 } |
| 157 } else { | 160 } else { |
| 158 ContextSourcePair pair = server.getContextSourcePair(params.file); | 161 ContextSourcePair pair = server.getContextSourcePair(params.file); |
| 159 engine.AnalysisContext context = pair.context; | 162 engine.AnalysisContext context = pair.context; |
| 160 Source source = pair.source; | 163 Source source = pair.source; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 182 if (server.options.enableNewAnalysisDriver) { | 185 if (server.options.enableNewAnalysisDriver) { |
| 183 AnalysisResult result = await server.getAnalysisResult(file); | 186 AnalysisResult result = await server.getAnalysisResult(file); |
| 184 if (result != null) { | 187 if (result != null) { |
| 185 CompilationUnit unit = result.unit; | 188 CompilationUnit unit = result.unit; |
| 186 LineInfo lineInfo = result.lineInfo; | 189 LineInfo lineInfo = result.lineInfo; |
| 187 int requestLine = lineInfo.getLocation(offset).lineNumber; | 190 int requestLine = lineInfo.getLocation(offset).lineNumber; |
| 188 for (engine.AnalysisError error in result.errors) { | 191 for (engine.AnalysisError error in result.errors) { |
| 189 int errorLine = lineInfo.getLocation(error.offset).lineNumber; | 192 int errorLine = lineInfo.getLocation(error.offset).lineNumber; |
| 190 if (errorLine == requestLine) { | 193 if (errorLine == requestLine) { |
| 191 var context = new _DartFixContextImpl( | 194 var context = new _DartFixContextImpl( |
| 192 server.resourceProvider, unit.element.context, unit, error); | 195 server.resourceProvider, |
| 196 resolutionMap.elementForCompilationUnit(unit).context, |
| 197 unit, |
| 198 error); |
| 193 List<Fix> fixes = | 199 List<Fix> fixes = |
| 194 await new DefaultFixContributor().internalComputeFixes(context); | 200 await new DefaultFixContributor().internalComputeFixes(context); |
| 195 if (fixes.isNotEmpty) { | 201 if (fixes.isNotEmpty) { |
| 196 AnalysisError serverError = | 202 AnalysisError serverError = |
| 197 newAnalysisError_fromEngine(lineInfo, error); | 203 newAnalysisError_fromEngine(lineInfo, error); |
| 198 AnalysisErrorFixes errorFixes = | 204 AnalysisErrorFixes errorFixes = |
| 199 new AnalysisErrorFixes(serverError); | 205 new AnalysisErrorFixes(serverError); |
| 200 errorFixesList.add(errorFixes); | 206 errorFixesList.add(errorFixes); |
| 201 fixes.forEach((fix) { | 207 fixes.forEach((fix) { |
| 202 errorFixes.fixes.add(fix.change); | 208 errorFixes.fixes.add(fix.change); |
| 203 }); | 209 }); |
| 204 } | 210 } |
| 205 } | 211 } |
| 206 } | 212 } |
| 207 } | 213 } |
| 208 } else { | 214 } else { |
| 209 CompilationUnit unit = await server.getResolvedCompilationUnit(file); | 215 CompilationUnit unit = await server.getResolvedCompilationUnit(file); |
| 210 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); | 216 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); |
| 211 LineInfo lineInfo = errorInfo?.lineInfo; | 217 LineInfo lineInfo = errorInfo?.lineInfo; |
| 212 if (unit != null && errorInfo != null && lineInfo != null) { | 218 if (unit != null && errorInfo != null && lineInfo != null) { |
| 213 int requestLine = lineInfo.getLocation(offset).lineNumber; | 219 int requestLine = lineInfo.getLocation(offset).lineNumber; |
| 214 for (engine.AnalysisError error in errorInfo.errors) { | 220 for (engine.AnalysisError error in errorInfo.errors) { |
| 215 int errorLine = lineInfo.getLocation(error.offset).lineNumber; | 221 int errorLine = lineInfo.getLocation(error.offset).lineNumber; |
| 216 if (errorLine == requestLine) { | 222 if (errorLine == requestLine) { |
| 217 List<Fix> fixes = await computeFixes(server.serverPlugin, | 223 List<Fix> fixes = await computeFixes( |
| 218 server.resourceProvider, unit.element.context, error); | 224 server.serverPlugin, |
| 225 server.resourceProvider, |
| 226 resolutionMap.elementForCompilationUnit(unit).context, |
| 227 error); |
| 219 if (fixes.isNotEmpty) { | 228 if (fixes.isNotEmpty) { |
| 220 AnalysisError serverError = | 229 AnalysisError serverError = |
| 221 newAnalysisError_fromEngine(lineInfo, error); | 230 newAnalysisError_fromEngine(lineInfo, error); |
| 222 AnalysisErrorFixes errorFixes = | 231 AnalysisErrorFixes errorFixes = |
| 223 new AnalysisErrorFixes(serverError); | 232 new AnalysisErrorFixes(serverError); |
| 224 errorFixesList.add(errorFixes); | 233 errorFixesList.add(errorFixes); |
| 225 fixes.forEach((fix) { | 234 fixes.forEach((fix) { |
| 226 errorFixes.fixes.add(fix.change); | 235 errorFixes.fixes.add(fix.change); |
| 227 }); | 236 }); |
| 228 } | 237 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 unit = result.unit; | 298 unit = result.unit; |
| 290 errors = result.errors; | 299 errors = result.errors; |
| 291 } else { | 300 } else { |
| 292 // prepare resolved unit | 301 // prepare resolved unit |
| 293 unit = await server.getResolvedCompilationUnit(file); | 302 unit = await server.getResolvedCompilationUnit(file); |
| 294 if (unit == null) { | 303 if (unit == null) { |
| 295 server.sendResponse(new Response.fileNotAnalyzed(request, file)); | 304 server.sendResponse(new Response.fileNotAnalyzed(request, file)); |
| 296 return; | 305 return; |
| 297 } | 306 } |
| 298 // prepare context | 307 // prepare context |
| 299 engine.AnalysisContext context = unit.element.context; | 308 CompilationUnitElement compilationUnitElement = |
| 300 Source source = unit.element.source; | 309 resolutionMap.elementForCompilationUnit(unit); |
| 310 engine.AnalysisContext context = compilationUnitElement.context; |
| 311 Source source = compilationUnitElement.source; |
| 301 errors = context.computeErrors(source); | 312 errors = context.computeErrors(source); |
| 302 // prepare code | 313 // prepare code |
| 303 fileStamp = context.getModificationStamp(source); | 314 fileStamp = context.getModificationStamp(source); |
| 304 code = context.getContents(source).data; | 315 code = context.getContents(source).data; |
| 305 } | 316 } |
| 306 // check if there are scan/parse errors in the file | 317 // check if there are scan/parse errors in the file |
| 307 int numScanParseErrors = _getNumberOfScanParseErrors(errors); | 318 int numScanParseErrors = _getNumberOfScanParseErrors(errors); |
| 308 if (numScanParseErrors != 0) { | 319 if (numScanParseErrors != 0) { |
| 309 server.sendResponse(new Response.organizeDirectivesError( | 320 server.sendResponse(new Response.organizeDirectivesError( |
| 310 request, 'File has $numScanParseErrors scan/parse errors.')); | 321 request, 'File has $numScanParseErrors scan/parse errors.')); |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 } | 964 } |
| 954 return new RefactoringStatus(); | 965 return new RefactoringStatus(); |
| 955 } | 966 } |
| 956 } | 967 } |
| 957 | 968 |
| 958 /** | 969 /** |
| 959 * [_RefactoringManager] throws instances of this class internally to stop | 970 * [_RefactoringManager] throws instances of this class internally to stop |
| 960 * processing in a manager that was reset. | 971 * processing in a manager that was reset. |
| 961 */ | 972 */ |
| 962 class _ResetError {} | 973 class _ResetError {} |
| OLD | NEW |