| Index: pkg/analysis_server/lib/analysis/index/index_core.dart
|
| diff --git a/pkg/analysis_server/lib/analysis/index/index_core.dart b/pkg/analysis_server/lib/analysis/index/index_core.dart
|
| deleted file mode 100644
|
| index 81d232d8b2da36efd16a00916173d77a1437daeb..0000000000000000000000000000000000000000
|
| --- a/pkg/analysis_server/lib/analysis/index/index_core.dart
|
| +++ /dev/null
|
| @@ -1,274 +0,0 @@
|
| -// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -library analysis_server.analysis.index.index_core;
|
| -
|
| -import 'dart:async';
|
| -import 'dart:collection';
|
| -
|
| -import 'package:analysis_server/src/services/index/index.dart';
|
| -import 'package:analyzer/src/generated/engine.dart';
|
| -import 'package:analyzer/src/generated/source.dart';
|
| -
|
| -/**
|
| - * An object that can have a [Relationship] with various [Location]s in a code
|
| - * base. The object is abstractly represented by a [kind] and an [offset] within
|
| - * a [source].
|
| - *
|
| - * Clients must ensure that two distinct objects in the same source cannot have
|
| - * the same kind and offset. Failure to do so will make it impossible for
|
| - * clients to identify the model element corresponding to the indexable object.
|
| - *
|
| - * Clients are expected to subtype this class when implementing plugins.
|
| - */
|
| -abstract class IndexableObject {
|
| - /**
|
| - * Return the kind of this object.
|
| - */
|
| - IndexableObjectKind get kind;
|
| -
|
| - /**
|
| - * Return the length of the indexable object within its source.
|
| - */
|
| - int get length;
|
| -
|
| - /**
|
| - * Return the name of this element.
|
| - */
|
| - // TODO(brianwilkerson) Remove the need for this getter.
|
| - String get name;
|
| -
|
| - /**
|
| - * Return the offset of the indexable object within its source.
|
| - */
|
| - int get offset;
|
| -
|
| - /**
|
| - * Return the source containing the indexable object.
|
| - */
|
| - Source get source;
|
| -}
|
| -
|
| -/**
|
| - * The kind associated with an [IndexableObject].
|
| - *
|
| - * Clients are expected to implement this class when implementing plugins.
|
| - */
|
| -abstract class IndexableObjectKind {
|
| - /**
|
| - * The next available index for a newly created kind of indexable object.
|
| - */
|
| - static int _nextIndex = 0;
|
| -
|
| - /**
|
| - * A table mapping indexes to object kinds.
|
| - */
|
| - static Map<int, IndexableObjectKind> _registry =
|
| - new HashMap<int, IndexableObjectKind>();
|
| -
|
| - /**
|
| - * Return the next available index for a newly created kind of indexable
|
| - * object.
|
| - */
|
| - static int get nextIndex => _nextIndex++;
|
| -
|
| - /**
|
| - * Return the unique index for this kind of indexable object. Implementations
|
| - * should invoke [nextIndex] to allocate an index that cannot be used by any
|
| - * other object kind.
|
| - */
|
| - int get index;
|
| -
|
| - /**
|
| - * Return the indexable object of this kind that exists in the given
|
| - * [context], in the source with the given [filePath], and at the given
|
| - * [offset].
|
| - */
|
| - IndexableObject decode(AnalysisContext context, String filePath, int offset);
|
| -
|
| - /**
|
| - * Return the object kind with the given [index].
|
| - */
|
| - static IndexableObjectKind getKind(int index) {
|
| - return _registry[index];
|
| - }
|
| -
|
| - /**
|
| - * Register the given object [kind] so that it can be found by it's unique
|
| - * index. The index of the [kind] must not be changed after it is passed to
|
| - * this method.
|
| - */
|
| - static void register(IndexableObjectKind kind) {
|
| - int index = kind.index;
|
| - if (_registry.containsKey(index)) {
|
| - throw new ArgumentError('duplicate index for kind: $index');
|
| - }
|
| - _registry[index] = kind;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * An object used to add relationships to the index.
|
| - *
|
| - * Clients are expected to subtype this class when implementing plugins.
|
| - */
|
| -abstract class IndexContributor {
|
| - /**
|
| - * Contribute relationships to the given index [store] as a result of
|
| - * analyzing the given [source] in the given [context].
|
| - */
|
| - void contributeTo(IndexStore store, AnalysisContext context, Source source);
|
| -}
|
| -
|
| -// A sketch of what the driver routine might look like:
|
| -//
|
| -//void buildIndexForSource(AnalysisContext context, Source source) {
|
| -// IndexStoreImpl store;
|
| -// store.aboutToIndex(context, source);
|
| -// try {
|
| -// for (IndexContributor contributor in contributors) {
|
| -// contributor.contributeTo(store, context, source);
|
| -// }
|
| -// } finally {
|
| -// store.doneIndexing();
|
| -// }
|
| -//}
|
| -
|
| -/**
|
| - * An object that stores information about the relationships between locations
|
| - * in a code base.
|
| - *
|
| - * Clients are not expected to subtype this class.
|
| - */
|
| -abstract class IndexStore {
|
| - /**
|
| - * Remove all of the information from the index.
|
| - */
|
| - void clear();
|
| -
|
| - /**
|
| - * Return a future that completes with the locations that have the given
|
| - * [relationship] with the given [indexable] object.
|
| - *
|
| - * For example, if the [indexable] object represents a function and the
|
| - * relationship is the `is-invoked-by` relationship, then the returned
|
| - * locations will be all of the places where the function is invoked.
|
| - */
|
| - Future<List<Location>> getRelationships(
|
| - IndexableObject indexable, Relationship relationship);
|
| -
|
| - /**
|
| - * Record that the given [indexable] object and [location] have the given
|
| - * [relationship].
|
| - *
|
| - * For example, if the [relationship] is the `is-invoked-by` relationship,
|
| - * then the [indexable] object would be the function being invoked and
|
| - * [location] would be the point at which it is invoked. Each indexable object
|
| - * can have the same relationship with multiple locations. In other words, if
|
| - * the following code were executed
|
| - *
|
| - * recordRelationship(indexable, isReferencedBy, location1);
|
| - * recordRelationship(indexable, isReferencedBy, location2);
|
| - *
|
| - * (where `location1 != location2`) then both relationships would be
|
| - * maintained in the index and the result of executing
|
| - *
|
| - * getRelationship(indexable, isReferencedBy);
|
| - *
|
| - * would be a list containing both `location1` and `location2`.
|
| - */
|
| - void recordRelationship(
|
| - IndexableObject indexable, Relationship relationship, Location location);
|
| -
|
| - /**
|
| - * Remove from the index all of the information associated with the given
|
| - * [context].
|
| - *
|
| - * This method should be invoked when the [context] is disposed.
|
| - */
|
| - void removeContext(AnalysisContext context);
|
| -
|
| - /**
|
| - * Remove from the index all of the information associated with indexable
|
| - * objects or locations in the given [source]. This includes relationships
|
| - * between an indexable object in [source] and any other locations, as well as
|
| - * relationships between any other indexable objects and locations within
|
| - * the [source].
|
| - *
|
| - * This method should be invoked when [source] is no longer part of the given
|
| - * [context].
|
| - */
|
| - void removeSource(AnalysisContext context, Source source);
|
| -
|
| - /**
|
| - * Remove from the index all of the information associated with indexable
|
| - * objects or locations in the given sources. This includes relationships
|
| - * between an indexable object in the given sources and any other locations,
|
| - * as well as relationships between any other indexable objects and a location
|
| - * within the given sources.
|
| - *
|
| - * This method should be invoked when the sources described by the given
|
| - * [container] are no longer part of the given [context].
|
| - */
|
| - void removeSources(AnalysisContext context, SourceContainer container);
|
| -}
|
| -
|
| -/**
|
| - * Instances of the class [Location] represent a location related to an
|
| - * indexable object.
|
| - *
|
| - * The location is expressed as an offset and length, but the offset is relative
|
| - * to the source containing the indexable object rather than the start of the
|
| - * indexable object within that source.
|
| - *
|
| - * Clients are not expected to subtype this class.
|
| - */
|
| -abstract class Location {
|
| - /**
|
| - * An empty list of locations.
|
| - */
|
| - static const List<Location> EMPTY_LIST = const <Location>[];
|
| -
|
| - /**
|
| - * Return the indexable object containing this location.
|
| - */
|
| - IndexableObject get indexable;
|
| -
|
| - /**
|
| - * Return `true` if this location is a qualified reference.
|
| - */
|
| - bool get isQualified;
|
| -
|
| - /**
|
| - * Return `true` if this location is a resolved reference.
|
| - */
|
| - bool get isResolved;
|
| -
|
| - /**
|
| - * Return the length of this location.
|
| - */
|
| - int get length;
|
| -
|
| - /**
|
| - * Return the offset of this location within the source containing the
|
| - * indexable object.
|
| - */
|
| - int get offset;
|
| -}
|
| -
|
| -/**
|
| - * A relationship between an indexable object and a location. Relationships are
|
| - * identified by a globally unique identifier.
|
| - *
|
| - * Clients are not expected to subtype this class.
|
| - */
|
| -abstract class Relationship {
|
| - /**
|
| - * Return a relationship that has the given [identifier]. If the relationship
|
| - * has already been created, then it will be returned, otherwise a new
|
| - * relationship will be created
|
| - */
|
| - factory Relationship(String identifier) =>
|
| - RelationshipImpl.getRelationship(identifier);
|
| -}
|
|
|