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.src.index.index_contributor; | 5 library services.src.index.index_contributor; |
6 | 6 |
7 import 'dart:collection' show Queue; | 7 import 'dart:collection' show Queue; |
8 | 8 |
9 import 'package:analysis_server/analysis/index/index_core.dart'; | 9 import 'package:analysis_server/analysis/index_core.dart'; |
10 import 'package:analysis_server/analysis/index/index_dart.dart'; | |
11 import 'package:analysis_server/src/services/correction/namespace.dart'; | 10 import 'package:analysis_server/src/services/correction/namespace.dart'; |
12 import 'package:analysis_server/src/services/index/index.dart'; | 11 import 'package:analysis_server/src/services/index/index.dart'; |
13 import 'package:analysis_server/src/services/index/index_store.dart'; | 12 import 'package:analysis_server/src/services/index/index_store.dart'; |
14 import 'package:analysis_server/src/services/index/indexable_element.dart'; | 13 import 'package:analysis_server/src/services/index/indexable_element.dart'; |
15 import 'package:analyzer/src/generated/ast.dart'; | 14 import 'package:analyzer/src/generated/ast.dart'; |
16 import 'package:analyzer/src/generated/element.dart'; | 15 import 'package:analyzer/src/generated/element.dart'; |
17 import 'package:analyzer/src/generated/engine.dart'; | 16 import 'package:analyzer/src/generated/engine.dart'; |
18 import 'package:analyzer/src/generated/html.dart' as ht; | |
19 import 'package:analyzer/src/generated/java_engine.dart'; | 17 import 'package:analyzer/src/generated/java_engine.dart'; |
20 import 'package:analyzer/src/generated/scanner.dart'; | 18 import 'package:analyzer/src/generated/scanner.dart'; |
21 import 'package:analyzer/src/generated/source.dart'; | 19 import 'package:analyzer/src/generated/source.dart'; |
22 | 20 |
23 /** | 21 /** |
24 * Adds data to [store] based on the resolved Dart [unit]. | 22 * An [IndexContributor] that contributes relationships for Dart files. |
25 */ | 23 */ |
26 void indexDartUnit( | 24 class DartIndexContributor extends IndexContributor { |
27 InternalIndexStore store, AnalysisContext context, CompilationUnit unit) { | 25 @override |
28 // check unit | 26 void contributeTo(IndexStore store, AnalysisContext context, Object object) { |
29 if (unit == null) { | 27 if (store is InternalIndexStore && object is CompilationUnit) { |
30 return; | 28 _IndexContributor contributor = new _IndexContributor(store); |
31 } | 29 object.accept(contributor); |
32 // prepare unit element | 30 } |
33 CompilationUnitElement unitElement = unit.element; | |
34 if (unitElement == null) { | |
35 return; | |
36 } | |
37 // about to index | |
38 bool mayIndex = store.aboutToIndex(context, unitElement); | |
39 if (!mayIndex) { | |
40 return; | |
41 } | |
42 // do index | |
43 try { | |
44 unit.accept(new _IndexContributor(store)); | |
45 store.doneIndex(); | |
46 } catch (e) { | |
47 store.cancelIndex(); | |
48 rethrow; | |
49 } | 31 } |
50 } | 32 } |
51 | 33 |
52 /** | |
53 * Adds data to [store] based on the resolved HTML [unit]. | |
54 */ | |
55 void indexHtmlUnit( | |
56 InternalIndexStore store, AnalysisContext context, ht.HtmlUnit unit) { | |
57 // TODO(scheglov) remove or implement | |
58 // // check unit | |
59 // if (unit == null) { | |
60 // return; | |
61 // } | |
62 // // prepare unit element | |
63 // HtmlElement unitElement = unit.element; | |
64 // if (unitElement == null) { | |
65 // return; | |
66 // } | |
67 // // about to index | |
68 // bool mayIndex = store.aboutToIndexHtml(context, unitElement); | |
69 // if (!mayIndex) { | |
70 // return; | |
71 // } | |
72 // // do index | |
73 // store.doneIndex(); | |
74 } | |
75 | |
76 /** | |
77 * An [IndexContributor] that can be used to contribute relationships for Dart | |
78 * files. | |
79 */ | |
80 class DefaultDartIndexContributor extends DartIndexContributor { | |
81 @override | |
82 void internalContributeTo(IndexStore store, CompilationUnit unit) { | |
83 _IndexContributor contributor = | |
84 new _IndexContributor(store as InternalIndexStore); | |
85 unit.accept(contributor); | |
86 } | |
87 } | |
88 | |
89 /** | 34 /** |
90 * Visits a resolved AST and adds relationships into [InternalIndexStore]. | 35 * Visits a resolved AST and adds relationships into [InternalIndexStore]. |
91 */ | 36 */ |
92 class _IndexContributor extends GeneralizingAstVisitor { | 37 class _IndexContributor extends GeneralizingAstVisitor { |
93 final InternalIndexStore _store; | 38 final InternalIndexStore _store; |
94 | 39 |
95 LibraryElement _libraryElement; | 40 LibraryElement _libraryElement; |
96 | 41 |
97 Map<ImportElement, Set<Element>> _importElementsMap = {}; | 42 Map<ImportElement, Set<Element>> _importElementsMap = {}; |
98 | 43 |
(...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
829 } | 774 } |
830 | 775 |
831 /** | 776 /** |
832 * @return `true` if given "node" is part of [PrefixedIdentifier] "prefix.node
". | 777 * @return `true` if given "node" is part of [PrefixedIdentifier] "prefix.node
". |
833 */ | 778 */ |
834 static bool _isIdentifierInPrefixedIdentifier(SimpleIdentifier node) { | 779 static bool _isIdentifierInPrefixedIdentifier(SimpleIdentifier node) { |
835 AstNode parent = node.parent; | 780 AstNode parent = node.parent; |
836 return parent is PrefixedIdentifier && parent.identifier == node; | 781 return parent is PrefixedIdentifier && parent.identifier == node; |
837 } | 782 } |
838 } | 783 } |
OLD | NEW |