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 'package:analyzer/dart/ast/ast.dart'; | 5 import 'package:analyzer/dart/ast/ast.dart'; |
6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; | 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
7 import 'package:analyzer/dart/ast/token.dart'; | 7 import 'package:analyzer/dart/ast/token.dart'; |
8 import 'package:analyzer/dart/element/element.dart'; | 8 import 'package:analyzer/dart/element/element.dart'; |
9 import 'package:analyzer/dart/element/type.dart'; | 9 import 'package:analyzer/dart/element/type.dart'; |
10 import 'package:analyzer/src/dart/ast/token.dart'; | 10 import 'package:analyzer/src/dart/ast/token.dart'; |
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 // (e.g. inside a literal string or inside a comment) are evaluated within | 444 // (e.g. inside a literal string or inside a comment) are evaluated within |
445 // the context of the token itself. | 445 // the context of the token itself. |
446 return offset <= node.offset; | 446 return offset <= node.offset; |
447 } | 447 } |
448 | 448 |
449 /** | 449 /** |
450 * Determine whether [token] could possibly be the [entity] for a | 450 * Determine whether [token] could possibly be the [entity] for a |
451 * [CompletionTarget] associated with the given [offset]. | 451 * [CompletionTarget] associated with the given [offset]. |
452 */ | 452 */ |
453 static bool _isCandidateToken(Token token, int offset) { | 453 static bool _isCandidateToken(Token token, int offset) { |
| 454 if (token == null) { |
| 455 return false; |
| 456 } |
454 // A token is considered a candidate entity if the cursor offset is (a) | 457 // A token is considered a candidate entity if the cursor offset is (a) |
455 // before the start of the token, (b) within the token, (c) at the end of | 458 // before the start of the token, (b) within the token, (c) at the end of |
456 // the token and the token is a keyword or identifier, or (d) at the | 459 // the token and the token is a keyword or identifier, or (d) at the |
457 // location of the token and the token is zero length. | 460 // location of the token and the token is zero length. |
458 if (offset < token.end) { | 461 if (offset < token.end) { |
459 return true; | 462 return true; |
460 } else if (offset == token.end) { | 463 } else if (offset == token.end) { |
461 return token.type.isKeyword || | 464 return token.type.isKeyword || |
462 token.type == TokenType.IDENTIFIER || | 465 token.type == TokenType.IDENTIFIER || |
463 token.length == 0; | 466 token.length == 0; |
(...skipping 30 matching lines...) Expand all Loading... |
494 orElse: () => null); | 497 orElse: () => null); |
495 paramType = param?.type; | 498 paramType = param?.type; |
496 } | 499 } |
497 } else { | 500 } else { |
498 paramType = param.type; | 501 paramType = param.type; |
499 } | 502 } |
500 } | 503 } |
501 return paramType is FunctionType || paramType is FunctionTypeAlias; | 504 return paramType is FunctionType || paramType is FunctionTypeAlias; |
502 } | 505 } |
503 } | 506 } |
OLD | NEW |