| 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 services.completion.dart.optype; | 5 library services.completion.dart.optype; |
| 6 | 6 |
| 7 import 'package:analysis_server/src/services/completion/completion_target.dart'; | 7 import 'package:analysis_server/src/services/completion/completion_target.dart'; |
| 8 import 'package:analyzer/src/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
| 9 import 'package:analyzer/src/generated/scanner.dart'; | 9 import 'package:analyzer/src/generated/scanner.dart'; |
| 10 | 10 |
| 11 /** | 11 /** |
| 12 * An [AstVisitor] for determining whether top level suggestions or invocation | 12 * An [AstVisitor] for determining whether top level suggestions or invocation |
| 13 * suggestions should be made based upon the type of node in which the | 13 * suggestions should be made based upon the type of node in which the |
| 14 * suggestions were requested. | 14 * suggestions were requested. |
| 15 */ | 15 */ |
| 16 class OpType { | 16 class OpType { |
| 17 | |
| 18 /** | 17 /** |
| 19 * Indicates whether constructor suggestions should be included. | 18 * Indicates whether constructor suggestions should be included. |
| 20 */ | 19 */ |
| 21 bool includeConstructorSuggestions = false; | 20 bool includeConstructorSuggestions = false; |
| 22 | 21 |
| 23 /** | 22 /** |
| 24 * Indicates whether type names should be suggested. | 23 * Indicates whether type names should be suggested. |
| 25 */ | 24 */ |
| 26 bool includeTypeNameSuggestions = false; | 25 bool includeTypeNameSuggestions = false; |
| 27 | 26 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 41 * Indicates whether statement labels should be suggested. | 40 * Indicates whether statement labels should be suggested. |
| 42 */ | 41 */ |
| 43 bool includeStatementLabelSuggestions = false; | 42 bool includeStatementLabelSuggestions = false; |
| 44 | 43 |
| 45 /** | 44 /** |
| 46 * Indicates whether case labels should be suggested. | 45 * Indicates whether case labels should be suggested. |
| 47 */ | 46 */ |
| 48 bool includeCaseLabelSuggestions = false; | 47 bool includeCaseLabelSuggestions = false; |
| 49 | 48 |
| 50 /** | 49 /** |
| 50 * Indicates whether the completion location is in the body of a static method
. |
| 51 */ |
| 52 bool inStaticMethodBody = false; |
| 53 |
| 54 /** |
| 51 * Indicates whether the completion target is prefixed. | 55 * Indicates whether the completion target is prefixed. |
| 52 */ | 56 */ |
| 53 bool isPrefixed = false; | 57 bool isPrefixed = false; |
| 54 | 58 |
| 55 /** | 59 /** |
| 56 * Determine the suggestions that should be made based upon the given | 60 * Determine the suggestions that should be made based upon the given |
| 57 * [CompletionTarget] and [offset]. | 61 * [CompletionTarget] and [offset]. |
| 58 */ | 62 */ |
| 59 factory OpType.forCompletion(CompletionTarget target, int offset) { | 63 factory OpType.forCompletion(CompletionTarget target, int offset) { |
| 60 OpType optype = new OpType._(); | 64 OpType optype = new OpType._(); |
| 61 target.containingNode | 65 target.containingNode |
| 62 .accept(new _OpTypeAstVisitor(optype, target.entity, offset)); | 66 .accept(new _OpTypeAstVisitor(optype, target.entity, offset)); |
| 67 var mthDecl = |
| 68 target.containingNode.getAncestor((p) => p is MethodDeclaration); |
| 69 optype.inStaticMethodBody = |
| 70 mthDecl is MethodDeclaration && mthDecl.isStatic; |
| 63 return optype; | 71 return optype; |
| 64 } | 72 } |
| 65 | 73 |
| 66 OpType._(); | 74 OpType._(); |
| 67 | 75 |
| 68 /** | 76 /** |
| 69 * Indicate whether only type names should be suggested | 77 * Indicate whether only type names should be suggested |
| 70 */ | 78 */ |
| 71 bool get includeOnlyTypeNameSuggestions => includeTypeNameSuggestions && | 79 bool get includeOnlyTypeNameSuggestions => includeTypeNameSuggestions && |
| 72 !includeReturnValueSuggestions && | 80 !includeReturnValueSuggestions && |
| 73 !includeVoidReturnSuggestions; | 81 !includeVoidReturnSuggestions; |
| 74 } | 82 } |
| 75 | 83 |
| 76 class _OpTypeAstVisitor extends GeneralizingAstVisitor { | 84 class _OpTypeAstVisitor extends GeneralizingAstVisitor { |
| 77 | |
| 78 /** | 85 /** |
| 79 * The entity (AstNode or Token) which will be replaced or displaced by the | 86 * The entity (AstNode or Token) which will be replaced or displaced by the |
| 80 * added text. | 87 * added text. |
| 81 */ | 88 */ |
| 82 final Object entity; | 89 final Object entity; |
| 83 | 90 |
| 84 /** | 91 /** |
| 85 * The offset within the source at which the completion is requested. | 92 * The offset within the source at which the completion is requested. |
| 86 */ | 93 */ |
| 87 final int offset; | 94 final int offset; |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 void visitVariableDeclarationStatement(VariableDeclarationStatement node) {} | 641 void visitVariableDeclarationStatement(VariableDeclarationStatement node) {} |
| 635 | 642 |
| 636 @override | 643 @override |
| 637 void visitWhileStatement(WhileStatement node) { | 644 void visitWhileStatement(WhileStatement node) { |
| 638 if (identical(entity, node.condition)) { | 645 if (identical(entity, node.condition)) { |
| 639 optype.includeReturnValueSuggestions = true; | 646 optype.includeReturnValueSuggestions = true; |
| 640 optype.includeTypeNameSuggestions = true; | 647 optype.includeTypeNameSuggestions = true; |
| 641 } | 648 } |
| 642 } | 649 } |
| 643 } | 650 } |
| OLD | NEW |