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

Side by Side Diff: pkg/analysis_server/lib/src/services/completion/combinator_computer.dart

Issue 1050743003: replace request.node with request.target.containingNode in more situations (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge Created 5 years, 8 months 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 | Annotate | Revision Log
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 services.completion.computer.dart.combinator; 5 library services.completion.computer.dart.combinator;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/protocol_server.dart' 9 import 'package:analysis_server/src/protocol_server.dart'
10 hide Element, ElementKind; 10 hide Element, ElementKind;
11 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart'; 11 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart';
12 import 'package:analysis_server/src/services/completion/suggestion_builder.dart' ; 12 import 'package:analysis_server/src/services/completion/suggestion_builder.dart' ;
13 import 'package:analyzer/src/generated/ast.dart'; 13 import 'package:analyzer/src/generated/ast.dart';
14 import 'package:analyzer/src/generated/element.dart'; 14 import 'package:analyzer/src/generated/element.dart';
15 15
16 /** 16 /**
17 * A computer for calculating `completion.getSuggestions` request results 17 * A computer for calculating `completion.getSuggestions` request results
18 * for the import combinators show and hide. 18 * for the import combinators show and hide.
19 */ 19 */
20 class CombinatorComputer extends DartCompletionComputer { 20 class CombinatorComputer extends DartCompletionComputer {
21 _CombinatorSuggestionBuilder builder; 21 _CombinatorSuggestionBuilder builder;
22 22
23 @override 23 @override
24 bool computeFast(DartCompletionRequest request) { 24 bool computeFast(DartCompletionRequest request) {
25 builder = request.node.accept(new _CombinatorAstVisitor(request)); 25 builder = request.target.containingNode
26 .accept(new _CombinatorAstVisitor(request));
26 return builder == null; 27 return builder == null;
27 } 28 }
28 29
29 @override 30 @override
30 Future<bool> computeFull(DartCompletionRequest request) { 31 Future<bool> computeFull(DartCompletionRequest request) {
31 if (builder != null) { 32 if (builder != null) {
32 return builder.execute(request.node); 33 return builder.execute(request.target.containingNode);
33 } 34 }
34 return new Future.value(false); 35 return new Future.value(false);
35 } 36 }
36 } 37 }
37 38
38 /** 39 /**
39 * A visitor for determining which imported classes and top level variables 40 * A visitor for determining which imported classes and top level variables
40 * should be suggested and building those suggestions. 41 * should be suggested and building those suggestions.
41 */ 42 */
42 class _CombinatorAstVisitor 43 class _CombinatorAstVisitor
43 extends GeneralizingAstVisitor<_CombinatorSuggestionBuilder> { 44 extends GeneralizingAstVisitor<_CombinatorSuggestionBuilder> {
44 final DartCompletionRequest request; 45 final DartCompletionRequest request;
45 46
46 _CombinatorAstVisitor(this.request); 47 _CombinatorAstVisitor(this.request);
47 48
48 @override 49 @override
49 _CombinatorSuggestionBuilder visitCombinator(Combinator node) { 50 _CombinatorSuggestionBuilder visitCombinator(Combinator node) {
50 return new _CombinatorSuggestionBuilder( 51 return new _CombinatorSuggestionBuilder(
51 request, CompletionSuggestionKind.IDENTIFIER); 52 request, CompletionSuggestionKind.IDENTIFIER);
52 } 53 }
53 54
54 @override 55 @override
55 _CombinatorSuggestionBuilder visitNode(AstNode node) { 56 _CombinatorSuggestionBuilder visitNode(AstNode node) {
56 return null; 57 return null;
57 } 58 }
58
59 @override
60 _CombinatorSuggestionBuilder visitSimpleIdentifier(SimpleIdentifier node) {
61 return node.parent.accept(this);
62 }
63 } 59 }
64 60
65 /** 61 /**
66 * A `_CombinatorSuggestionBuilder` determines which imported classes 62 * A `_CombinatorSuggestionBuilder` determines which imported classes
67 * and top level variables should be suggested and builds those suggestions. 63 * and top level variables should be suggested and builds those suggestions.
68 * This operation is instantiated during `computeFast` 64 * This operation is instantiated during `computeFast`
69 * and calculates the suggestions during `computeFull`. 65 * and calculates the suggestions during `computeFull`.
70 */ 66 */
71 class _CombinatorSuggestionBuilder extends LibraryElementSuggestionBuilder { 67 class _CombinatorSuggestionBuilder extends LibraryElementSuggestionBuilder {
72 _CombinatorSuggestionBuilder( 68 _CombinatorSuggestionBuilder(
73 DartCompletionRequest request, CompletionSuggestionKind kind) 69 DartCompletionRequest request, CompletionSuggestionKind kind)
74 : super(request, kind, false); 70 : super(request, kind, false);
75 71
76 Future<bool> execute(AstNode node) { 72 Future<bool> execute(AstNode node) {
77 var directive = node.getAncestor((parent) => parent is NamespaceDirective); 73 var directive = node.getAncestor((parent) => parent is NamespaceDirective);
78 if (directive is NamespaceDirective) { 74 if (directive is NamespaceDirective) {
79 LibraryElement library = directive.uriElement; 75 LibraryElement library = directive.uriElement;
80 if (library != null) { 76 if (library != null) {
81 library.visitChildren(this); 77 library.visitChildren(this);
82 } 78 }
83 } 79 }
84 return new Future.value(false); 80 return new Future.value(false);
85 } 81 }
86 } 82 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698