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

Side by Side Diff: pkg/analysis_server/lib/src/services/index/local_index.dart

Issue 1359113002: Use IndexContributor(s) in LocalIndex. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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
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.src.index.local_index; 5 library services.src.index.local_index;
6 6
7 import 'dart:async'; 7 import 'dart:async';
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/src/services/index/index.dart'; 10 import 'package:analysis_server/src/services/index/index.dart';
11 import 'package:analysis_server/src/services/index/index_contributor.dart'
12 as oldContributors;
13 import 'package:analysis_server/src/services/index/store/split_store.dart'; 11 import 'package:analysis_server/src/services/index/store/split_store.dart';
14 import 'package:analyzer/src/generated/ast.dart';
15 import 'package:analyzer/src/generated/element.dart'; 12 import 'package:analyzer/src/generated/element.dart';
16 import 'package:analyzer/src/generated/engine.dart'; 13 import 'package:analyzer/src/generated/engine.dart';
17 import 'package:analyzer/src/generated/html.dart';
18 import 'package:analyzer/src/generated/source.dart'; 14 import 'package:analyzer/src/generated/source.dart';
19 15
20 /** 16 /**
21 * A local implementation of [Index]. 17 * A local implementation of [Index].
22 */ 18 */
23 class LocalIndex extends Index { 19 class LocalIndex extends Index {
24 /** 20 /**
25 * The index contributors used by this index. 21 * The index contributors used by this index.
26 */ 22 */
27 List<IndexContributor> contributors; 23 List<IndexContributor> contributors = <IndexContributor>[];
28 24
29 SplitIndexStore _store; 25 SplitIndexStore _store;
30 26
31 LocalIndex(NodeManager nodeManager) { 27 LocalIndex(NodeManager nodeManager) {
32 // TODO(scheglov) get IndexObjectManager(s) as a parameter 28 // TODO(scheglov) get IndexObjectManager(s) as a parameter
33 _store = new SplitIndexStore(nodeManager, 29 _store = new SplitIndexStore(
34 <IndexObjectManager>[new DartUnitIndexObjectManager()]); 30 nodeManager, <IndexObjectManager>[new DartUnitIndexObjectManager()]);
35 } 31 }
36 32
37 @override 33 @override
38 String get statistics => _store.statistics; 34 String get statistics => _store.statistics;
39 35
40 @override 36 @override
41 void clear() { 37 void clear() {
42 _store.clear(); 38 _store.clear();
43 } 39 }
44 40
45 /** 41 /**
46 * Returns all relations with [Element]s with the given [name]. 42 * Returns all relations with [Element]s with the given [name].
47 */ 43 */
48 Future<Map<List<String>, List<InspectLocation>>> findElementsByName( 44 Future<Map<List<String>, List<InspectLocation>>> findElementsByName(
49 String name) { 45 String name) {
50 return _store.inspect_getElementRelations(name); 46 return _store.inspect_getElementRelations(name);
51 } 47 }
52 48
53 /** 49 /**
54 * Returns a `Future<List<Location>>` that completes with the list of 50 * Returns a `Future<List<Location>>` that completes with the list of
55 * [LocationImpl]s of the given [relationship] with the given [element]. 51 * [LocationImpl]s of the given [relationship] with the given [indexable].
56 * 52 *
57 * For example, if the [element] represents a function and the [relationship] 53 * For example, if the [indexable] represents a function element and the
58 * is the `is-invoked-by` relationship, then the locations will be all of the 54 * [relationship] is the `is-invoked-by` relationship, then the locations
59 * places where the function is invoked. 55 * will be all of the places where the function is invoked.
60 */ 56 */
61 @override 57 @override
62 Future<List<LocationImpl>> getRelationships( 58 Future<List<LocationImpl>> getRelationships(
63 IndexableObject indexable, RelationshipImpl relationship) { 59 IndexableObject indexable, RelationshipImpl relationship) {
64 return _store.getRelationships(indexable, relationship); 60 return _store.getRelationships(indexable, relationship);
65 } 61 }
66 62
67 @override 63 @override
68 List<Element> getTopLevelDeclarations(ElementNameFilter nameFilter) { 64 List<Element> getTopLevelDeclarations(ElementNameFilter nameFilter) {
69 return _store.getTopLevelDeclarations(nameFilter); 65 return _store.getTopLevelDeclarations(nameFilter);
70 } 66 }
71 67
72 @override 68 @override
73 void indexHtmlUnit(AnalysisContext context, HtmlUnit unit) { 69 void index(AnalysisContext context, Object object) {
74 oldContributors.indexHtmlUnit(_store, context, unit); 70 // about to index
71 bool mayIndex = _store.aboutToIndex(context, object);
72 if (!mayIndex) {
73 return;
74 }
75 // do index
76 try {
77 for (IndexContributor contributor in contributors) {
78 contributor.contributeTo(_store, context, object);
79 }
80 _store.doneIndex();
81 } catch (e) {
82 _store.cancelIndex();
83 rethrow;
84 }
75 } 85 }
76 86
77 @override 87 @override
78 void indexUnit(AnalysisContext context, CompilationUnit unit) {
79 oldContributors.indexDartUnit(_store, context, unit);
80 }
81
82 @override
83 void recordRelationship( 88 void recordRelationship(
84 IndexableObject indexable, Relationship relationship, Location location) { 89 IndexableObject indexable, Relationship relationship, Location location) {
85 _store.recordRelationship(indexable, relationship, location); 90 _store.recordRelationship(indexable, relationship, location);
86 } 91 }
87 92
88 @override 93 @override
89 void removeContext(AnalysisContext context) { 94 void removeContext(AnalysisContext context) {
90 _store.removeContext(context); 95 _store.removeContext(context);
91 } 96 }
92 97
(...skipping 10 matching lines...) Expand all
103 @override 108 @override
104 void run() { 109 void run() {
105 // NO-OP for the local index 110 // NO-OP for the local index
106 } 111 }
107 112
108 @override 113 @override
109 void stop() { 114 void stop() {
110 // NO-OP for the local index 115 // NO-OP for the local index
111 } 116 }
112 } 117 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698