| OLD | NEW | 
|    1 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file |    1 // Copyright (c) 2015, 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 analysis_server.plugin.index.index_core; |    5 library analysis_server.plugin.index.index_core; | 
|    6  |    6  | 
|    7 import 'dart:async'; |    7 import 'dart:async'; | 
|    8 import 'dart:collection'; |    8 import 'dart:collection'; | 
|    9  |    9  | 
|   10 import 'package:analysis_server/src/services/index/index.dart'; |   10 import 'package:analysis_server/src/services/index/index.dart'; | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|   23  |   23  | 
|   24 /** |   24 /** | 
|   25  * An object that can have a [Relationship] with various [Location]s in a code |   25  * An object that can have a [Relationship] with various [Location]s in a code | 
|   26  * base. The object is abstractly represented by a [kind] and an [offset] within |   26  * base. The object is abstractly represented by a [kind] and an [offset] within | 
|   27  * a [source]. |   27  * a [source]. | 
|   28  * |   28  * | 
|   29  * Clients must ensure that two distinct objects in the same source cannot have |   29  * Clients must ensure that two distinct objects in the same source cannot have | 
|   30  * the same kind and offset. Failure to do so will make it impossible for |   30  * the same kind and offset. Failure to do so will make it impossible for | 
|   31  * clients to identify the model element corresponding to the indexable object. |   31  * clients to identify the model element corresponding to the indexable object. | 
|   32  * |   32  * | 
|   33  * Clients are expected to subtype this class when implementing plugins. |   33  * Clients may implement this class when implementing plugins. | 
|   34  */ |   34  */ | 
|   35 abstract class IndexableObject { |   35 abstract class IndexableObject { | 
|   36   /** |   36   /** | 
|   37    * Return the absolute path of the file containing the indexable object. |   37    * Return the absolute path of the file containing the indexable object. | 
|   38    */ |   38    */ | 
|   39   String get filePath; |   39   String get filePath; | 
|   40  |   40  | 
|   41   /** |   41   /** | 
|   42    * Return the kind of this object. |   42    * Return the kind of this object. | 
|   43    */ |   43    */ | 
|   44   IndexableObjectKind get kind; |   44   IndexableObjectKind get kind; | 
|   45  |   45  | 
|   46   /** |   46   /** | 
|   47    * Return the offset of the indexable object within its source. |   47    * Return the offset of the indexable object within its source. | 
|   48    */ |   48    */ | 
|   49   int get offset; |   49   int get offset; | 
|   50 } |   50 } | 
|   51  |   51  | 
|   52 /** |   52 /** | 
|   53  * The kind associated with an [IndexableObject]. |   53  * The kind associated with an [IndexableObject]. | 
|   54  * |   54  * | 
|   55  * Clients are expected to implement this class when implementing plugins. |   55  * Clients may implement this class when implementing plugins. | 
|   56  */ |   56  */ | 
|   57 abstract class IndexableObjectKind { |   57 abstract class IndexableObjectKind { | 
|   58   /** |   58   /** | 
|   59    * The next available index for a newly created kind of indexable object. |   59    * The next available index for a newly created kind of indexable object. | 
|   60    */ |   60    */ | 
|   61   static int _nextIndex = 0; |   61   static int _nextIndex = 0; | 
|   62  |   62  | 
|   63   /** |   63   /** | 
|   64    * A table mapping indexes to object kinds. |   64    * A table mapping indexes to object kinds. | 
|   65    */ |   65    */ | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  124     if (_registry.containsKey(index)) { |  124     if (_registry.containsKey(index)) { | 
|  125       throw new ArgumentError('duplicate index for kind: $index'); |  125       throw new ArgumentError('duplicate index for kind: $index'); | 
|  126     } |  126     } | 
|  127     _registry[index] = kind; |  127     _registry[index] = kind; | 
|  128   } |  128   } | 
|  129 } |  129 } | 
|  130  |  130  | 
|  131 /** |  131 /** | 
|  132  * An object used to add relationships to the index. |  132  * An object used to add relationships to the index. | 
|  133  * |  133  * | 
|  134  * Clients are expected to subtype this class when implementing plugins. |  134  * Clients may implement this class when implementing plugins. | 
|  135  */ |  135  */ | 
|  136 abstract class IndexContributor { |  136 abstract class IndexContributor { | 
|  137   /** |  137   /** | 
|  138    * Contribute relationships existing in the given [object] to the given |  138    * Contribute relationships existing in the given [object] to the given | 
|  139    * index [store] in the given [context]. |  139    * index [store] in the given [context]. | 
|  140    */ |  140    */ | 
|  141   void contributeTo(IndexStore store, AnalysisContext context, Object object); |  141   void contributeTo(IndexStore store, AnalysisContext context, Object object); | 
|  142 } |  142 } | 
|  143  |  143  | 
|  144 /** |  144 /** | 
|  145  * An object that stores information about the relationships between locations |  145  * An object that stores information about the relationships between locations | 
|  146  * in a code base. |  146  * in a code base. | 
|  147  * |  147  * | 
|  148  * Clients are not expected to subtype this class. |  148  * Clients may not extend, implement or mix-in this class. | 
|  149  */ |  149  */ | 
|  150 abstract class IndexStore { |  150 abstract class IndexStore { | 
|  151   /** |  151   /** | 
|  152    * Remove all of the information from the index. |  152    * Remove all of the information from the index. | 
|  153    */ |  153    */ | 
|  154   void clear(); |  154   void clear(); | 
|  155  |  155  | 
|  156   /** |  156   /** | 
|  157    * Return a future that completes with the locations that have the given |  157    * Return a future that completes with the locations that have the given | 
|  158    * [relationship] with the given [indexable] object. |  158    * [relationship] with the given [indexable] object. | 
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  221 } |  221 } | 
|  222  |  222  | 
|  223 /** |  223 /** | 
|  224  * Instances of the class [Location] represent a location related to an |  224  * Instances of the class [Location] represent a location related to an | 
|  225  * indexable object. |  225  * indexable object. | 
|  226  * |  226  * | 
|  227  * The location is expressed as an offset and length, but the offset is relative |  227  * The location is expressed as an offset and length, but the offset is relative | 
|  228  * to the source containing the indexable object rather than the start of the |  228  * to the source containing the indexable object rather than the start of the | 
|  229  * indexable object within that source. |  229  * indexable object within that source. | 
|  230  * |  230  * | 
|  231  * Clients are not expected to subtype this class. |  231  * Clients may not extend, implement or mix-in this class. | 
|  232  */ |  232  */ | 
|  233 abstract class Location { |  233 abstract class Location { | 
|  234   /** |  234   /** | 
|  235    * An empty list of locations. |  235    * An empty list of locations. | 
|  236    */ |  236    */ | 
|  237   static const List<Location> EMPTY_LIST = const <Location>[]; |  237   static const List<Location> EMPTY_LIST = const <Location>[]; | 
|  238  |  238  | 
|  239   /** |  239   /** | 
|  240    * Return the indexable object containing this location. |  240    * Return the indexable object containing this location. | 
|  241    */ |  241    */ | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
|  260    * Return the offset of this location within the source containing the |  260    * Return the offset of this location within the source containing the | 
|  261    * indexable object. |  261    * indexable object. | 
|  262    */ |  262    */ | 
|  263   int get offset; |  263   int get offset; | 
|  264 } |  264 } | 
|  265  |  265  | 
|  266 /** |  266 /** | 
|  267  * A relationship between an indexable object and a location. Relationships are |  267  * A relationship between an indexable object and a location. Relationships are | 
|  268  * identified by a globally unique identifier. |  268  * identified by a globally unique identifier. | 
|  269  * |  269  * | 
|  270  * Clients are not expected to subtype this class. |  270  * Clients may not extend, implement or mix-in this class. | 
|  271  */ |  271  */ | 
|  272 abstract class Relationship { |  272 abstract class Relationship { | 
|  273   /** |  273   /** | 
|  274    * Return a relationship that has the given [identifier]. If the relationship |  274    * Return a relationship that has the given [identifier]. If the relationship | 
|  275    * has already been created, then it will be returned, otherwise a new |  275    * has already been created, then it will be returned, otherwise a new | 
|  276    * relationship will be created |  276    * relationship will be created | 
|  277    */ |  277    */ | 
|  278   factory Relationship(String identifier) => |  278   factory Relationship(String identifier) => | 
|  279       RelationshipImpl.getRelationship(identifier); |  279       RelationshipImpl.getRelationship(identifier); | 
|  280 } |  280 } | 
| OLD | NEW |