OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 | 6 |
7 import 'package:analysis_server/src/protocol_server.dart' hide Element; | 7 import 'package:analysis_server/src/protocol_server.dart' hide Element; |
8 import 'package:analysis_server/src/services/correction/util.dart'; | 8 import 'package:analysis_server/src/services/correction/util.dart'; |
| 9 import 'package:analyzer/dart/analysis/session.dart'; |
9 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
10 import 'package:analyzer/dart/element/element.dart'; | 11 import 'package:analyzer/dart/element/element.dart'; |
11 import 'package:analyzer/dart/element/type.dart'; | 12 import 'package:analyzer/dart/element/type.dart'; |
12 import 'package:analyzer/error/error.dart' as engine; | 13 import 'package:analyzer/error/error.dart' as engine; |
13 import 'package:analyzer/src/dart/analysis/driver.dart'; | 14 import 'package:analyzer/src/dart/analysis/driver.dart'; |
14 import 'package:analyzer/src/dart/ast/utilities.dart'; | 15 import 'package:analyzer/src/dart/ast/utilities.dart'; |
15 import 'package:analyzer/src/generated/engine.dart'; | 16 import 'package:analyzer/src/generated/engine.dart'; |
16 import 'package:analyzer/src/generated/java_core.dart'; | 17 import 'package:analyzer/src/generated/java_core.dart'; |
17 import 'package:analyzer/src/generated/resolver.dart'; | 18 import 'package:analyzer/src/generated/resolver.dart'; |
18 import 'package:analyzer/src/generated/source.dart'; | 19 import 'package:analyzer/src/generated/source.dart'; |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 String get file => completionContext.file; | 300 String get file => completionContext.file; |
300 | 301 |
301 String get key => completionContext.key; | 302 String get key => completionContext.key; |
302 | 303 |
303 LineInfo get lineInfo => completionContext.lineInfo; | 304 LineInfo get lineInfo => completionContext.lineInfo; |
304 | 305 |
305 int get requestLine => lineInfo.getLocation(selectionOffset).lineNumber; | 306 int get requestLine => lineInfo.getLocation(selectionOffset).lineNumber; |
306 | 307 |
307 int get selectionOffset => completionContext.selectionOffset; | 308 int get selectionOffset => completionContext.selectionOffset; |
308 | 309 |
| 310 /** |
| 311 * Return the analysis session to be used to create the change builder. |
| 312 */ |
| 313 AnalysisSession get session => driver.currentSession; |
| 314 |
309 Source get source => completionContext.unitElement.source; | 315 Source get source => completionContext.unitElement.source; |
310 | 316 |
311 TypeProvider get typeProvider { | 317 TypeProvider get typeProvider { |
312 return _typeProvider ??= unitElement.context.typeProvider; | 318 return _typeProvider ??= unitElement.context.typeProvider; |
313 } | 319 } |
314 | 320 |
315 CompilationUnit get unit => completionContext.unit; | 321 CompilationUnit get unit => completionContext.unit; |
316 | 322 |
317 CompilationUnitElement get unitElement => completionContext.unitElement; | 323 CompilationUnitElement get unitElement => completionContext.unitElement; |
318 | 324 |
319 Future<PostfixCompletion> compute() async { | 325 Future<PostfixCompletion> compute() async { |
320 node = _selectedNode(); | 326 node = _selectedNode(); |
321 if (node == null) { | 327 if (node == null) { |
322 return NO_COMPLETION; | 328 return NO_COMPLETION; |
323 } | 329 } |
324 PostfixCompletionKind completer = DartPostfixCompletion.forKey(key); | 330 PostfixCompletionKind completer = DartPostfixCompletion.forKey(key); |
325 return completer?.computer(this, completer) ?? NO_COMPLETION; | 331 return completer?.computer(this, completer) ?? NO_COMPLETION; |
326 } | 332 } |
327 | 333 |
328 Future<PostfixCompletion> expand( | 334 Future<PostfixCompletion> expand( |
329 PostfixCompletionKind kind, Function contexter, Function sourcer, | 335 PostfixCompletionKind kind, Function contexter, Function sourcer, |
330 {bool withBraces: true}) async { | 336 {bool withBraces: true}) async { |
331 AstNode expr = contexter(); | 337 AstNode expr = contexter(); |
332 if (expr == null) { | 338 if (expr == null) { |
333 return null; | 339 return null; |
334 } | 340 } |
335 | 341 |
336 DartChangeBuilder changeBuilder = new DartChangeBuilder(driver); | 342 DartChangeBuilder changeBuilder = new DartChangeBuilder(session); |
337 await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) { | 343 await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) { |
338 builder.addReplacement(range.node(expr), (DartEditBuilder builder) { | 344 builder.addReplacement(range.node(expr), (DartEditBuilder builder) { |
339 String newSrc = sourcer(expr); | 345 String newSrc = sourcer(expr); |
340 if (newSrc == null) { | 346 if (newSrc == null) { |
341 return null; | 347 return null; |
342 } | 348 } |
343 builder.write(newSrc); | 349 builder.write(newSrc); |
344 if (withBraces) { | 350 if (withBraces) { |
345 builder.write(" {"); | 351 builder.write(" {"); |
346 builder.write(eol); | 352 builder.write(eol); |
(...skipping 13 matching lines...) Expand all Loading... |
360 return completion; | 366 return completion; |
361 } | 367 } |
362 | 368 |
363 Future<PostfixCompletion> expandTry( | 369 Future<PostfixCompletion> expandTry( |
364 PostfixCompletionKind kind, Function contexter, | 370 PostfixCompletionKind kind, Function contexter, |
365 {bool withOn: false}) async { | 371 {bool withOn: false}) async { |
366 AstNode stmt = contexter(); | 372 AstNode stmt = contexter(); |
367 if (stmt == null) { | 373 if (stmt == null) { |
368 return null; | 374 return null; |
369 } | 375 } |
370 DartChangeBuilder changeBuilder = new DartChangeBuilder(driver); | 376 DartChangeBuilder changeBuilder = new DartChangeBuilder(session); |
371 await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) { | 377 await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) { |
372 // Embed the full line(s) of the statement in the try block. | 378 // Embed the full line(s) of the statement in the try block. |
373 var startLine = lineInfo.getLocation(stmt.offset).lineNumber - 1; | 379 var startLine = lineInfo.getLocation(stmt.offset).lineNumber - 1; |
374 var endLine = lineInfo.getLocation(stmt.end).lineNumber - 1; | 380 var endLine = lineInfo.getLocation(stmt.end).lineNumber - 1; |
375 if (stmt is ExpressionStatement && !stmt.semicolon.isSynthetic) { | 381 if (stmt is ExpressionStatement && !stmt.semicolon.isSynthetic) { |
376 endLine += 1; | 382 endLine += 1; |
377 } | 383 } |
378 var startOffset = lineInfo.getOffsetOfLine(startLine); | 384 var startOffset = lineInfo.getOffsetOfLine(startLine); |
379 var endOffset = lineInfo.getOffsetOfLine(endLine); | 385 var endOffset = lineInfo.getOffsetOfLine(endLine); |
380 var src = utils.getText(startOffset, endOffset - startOffset); | 386 var src = utils.getText(startOffset, endOffset - startOffset); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 [List args]) { | 561 [List args]) { |
556 SourceChange change = builder.sourceChange; | 562 SourceChange change = builder.sourceChange; |
557 if (change.edits.isEmpty) { | 563 if (change.edits.isEmpty) { |
558 completion = null; | 564 completion = null; |
559 return; | 565 return; |
560 } | 566 } |
561 change.message = formatList(kind.message, args); | 567 change.message = formatList(kind.message, args); |
562 completion = new PostfixCompletion(kind, change); | 568 completion = new PostfixCompletion(kind, change); |
563 } | 569 } |
564 } | 570 } |
OLD | NEW |