| Index: pkg/analyzer/lib/index/index_store.dart
|
| diff --git a/pkg/analyzer/lib/index/index_store.dart b/pkg/analyzer/lib/index/index_store.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a5b07638d54cd47b003ff626b624c8a57d2aee1c
|
| --- /dev/null
|
| +++ b/pkg/analyzer/lib/index/index_store.dart
|
| @@ -0,0 +1,148 @@
|
| +// Copyright (c) 2014, 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 engine.index_store;
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:analyzer/index/index.dart';
|
| +import 'package:analyzer/src/generated/element.dart';
|
| +import 'package:analyzer/src/generated/engine.dart';
|
| +import 'package:analyzer/src/generated/source.dart';
|
| +
|
| +
|
| +/**
|
| + * A container with information computed by an index - relations between
|
| + * elements.
|
| + */
|
| +abstract class IndexStore {
|
| + /**
|
| + * Answers index statistics.
|
| + */
|
| + String get statistics;
|
| +
|
| + /**
|
| + * Notifies the index store that we are going to index an unit with the given
|
| + * [unitElement].
|
| + *
|
| + * If the unit is a part of a library, then all its locations are removed.
|
| + *
|
| + * If it is a defining compilation unit of a library, then index store also
|
| + * checks if some previously indexed parts of the library are not parts of the
|
| + * library anymore, and clears their information.
|
| + *
|
| + * [context] - the [AnalysisContext] in which unit being indexed.
|
| + * [unitElement] - the element of the unit being indexed.
|
| + *
|
| + * Returns `true` if the given [unitElement] may be indexed, or `false` if
|
| + * belongs to a disposed [AnalysisContext], is not resolved completely, etc.
|
| + */
|
| + bool aboutToIndexDart(AnalysisContext context,
|
| + CompilationUnitElement unitElement);
|
| +
|
| + /**
|
| + * Notifies the index store that we are going to index an unit with the given
|
| + * [htmlElement].
|
| + *
|
| + * [context] - the [AnalysisContext] in which unit being indexed.
|
| + * [htmlElement] - the [HtmlElement] being indexed.
|
| + *
|
| + * Returns `true` if the given [htmlElement] may be indexed, or `false` if
|
| + * belongs to a disposed [AnalysisContext], is not resolved completely, etc.
|
| + */
|
| + bool aboutToIndexHtml(AnalysisContext context, HtmlElement htmlElement);
|
| +
|
| + /**
|
| + * Removes all of the information.
|
| + */
|
| + void clear();
|
| +
|
| + /**
|
| + * Notifies that index store that the current Dart or HTML unit indexing is
|
| + * done.
|
| + *
|
| + * If this method is not invoked after corresponding "aboutToIndex*"
|
| + * invocation, all recorded information may be lost.
|
| + */
|
| + void doneIndex();
|
| +
|
| + /**
|
| + * Returns a [Future] that completes with locations of the elements that have
|
| + * the given [relationship] with the given [element].
|
| + *
|
| + * For example, if the [element] 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.
|
| + *
|
| + * [element] - the the [Element] that has the relationship with the locations
|
| + * to be returned.
|
| + * [relationship] - the [Relationship] between the given element and the
|
| + * locations to be returned
|
| + */
|
| + Future<List<Location>> getRelationships(Element element,
|
| + Relationship relationship);
|
| +
|
| + /**
|
| + * Records that the given [element] and [location] have the given
|
| + * [relationship].
|
| + *
|
| + * For example, if the [relationship] is the `is-invoked-by` relationship,
|
| + * then [element] would be the function being invoked and [location] would be
|
| + * the point at which it is referenced. Each element can have the same
|
| + * relationship with multiple locations. In other words, if the following code
|
| + * were executed
|
| + *
|
| + * recordRelationship(element, isReferencedBy, location1);
|
| + * recordRelationship(element, isReferencedBy, location2);
|
| + *
|
| + * then both relationships would be maintained in the index and the result of executing
|
| + *
|
| + * getRelationship(element, isReferencedBy);
|
| + *
|
| + * would be a list containing both `location1` and `location2`.
|
| + *
|
| + * [element] - the [Element] that is related to the location.
|
| + * [relationship] - the [Relationship] between the element and the location.
|
| + * [location] the [Location] where relationship happens.
|
| + */
|
| + void recordRelationship(Element element, Relationship relationship,
|
| + Location location);
|
| +
|
| + /**
|
| + * Removes from the index all of the information associated with [context].
|
| + *
|
| + * This method should be invoked when [context] is disposed.
|
| + *
|
| + * [context] - the [AnalysisContext] being removed.
|
| + */
|
| + void removeContext(AnalysisContext context);
|
| +
|
| + /**
|
| + * Removes from the index all of the information associated with elements or
|
| + * locations in [source]. This includes relationships between an element in
|
| + * [source] and any other locations, relationships between any other elements
|
| + * and locations within [source].
|
| + *
|
| + * This method should be invoked when [source] is no longer part of the code
|
| + * base.
|
| + *
|
| + * [context] - the [AnalysisContext] in which [source] being removed.
|
| + * [source] - the [Source] being removed
|
| + */
|
| + void removeSource(AnalysisContext context, Source source);
|
| +
|
| + /**
|
| + * Removes from the index all of the information associated with elements or
|
| + * locations in the given sources. This includes relationships between an
|
| + * element in the given sources and any other locations, relationships between
|
| + * any other elements and a location within the given sources.
|
| + *
|
| + * This method should be invoked when multiple sources are no longer part of
|
| + * the code base.
|
| + *
|
| + * [context] - the [AnalysisContext] in which [Source]s being removed.
|
| + * [container] - the [SourceContainer] holding the sources being removed.
|
| + */
|
| + void removeSources(AnalysisContext context, SourceContainer container);
|
| +}
|
|
|