| Index: pkg/analysis_services/lib/index/index.dart
 | 
| diff --git a/pkg/analysis_services/lib/index/index.dart b/pkg/analysis_services/lib/index/index.dart
 | 
| deleted file mode 100644
 | 
| index acfc8351e439cea12722351873c8c6dced98a428..0000000000000000000000000000000000000000
 | 
| --- a/pkg/analysis_services/lib/index/index.dart
 | 
| +++ /dev/null
 | 
| @@ -1,379 +0,0 @@
 | 
| -// 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 services.index;
 | 
| -
 | 
| -import 'dart:async';
 | 
| -
 | 
| -import 'package:analyzer/src/generated/ast.dart';
 | 
| -import 'package:analyzer/src/generated/element.dart';
 | 
| -import 'package:analyzer/src/generated/engine.dart';
 | 
| -import 'package:analyzer/src/generated/html.dart';
 | 
| -import 'package:analyzer/src/generated/source.dart';
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * The interface [Index] defines the behavior of objects that maintain an index
 | 
| - * storing relations between [Element]s.
 | 
| - *
 | 
| - * Any modification operations are executed before any read operation.
 | 
| - * There is no guarantee about the order in which the [Future]s for read
 | 
| - * operations will complete.
 | 
| - */
 | 
| -abstract class Index {
 | 
| -  /**
 | 
| -   * Answers index statistics.
 | 
| -   */
 | 
| -  String get statistics;
 | 
| -
 | 
| -  /**
 | 
| -   * Removes from the index all the information.
 | 
| -   */
 | 
| -  void clear();
 | 
| -
 | 
| -  /**
 | 
| -   * Asynchronously returns a list containing all of the 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 locations will be all of the
 | 
| -   * places where the function is invoked.
 | 
| -   *
 | 
| -   * [element] - 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);
 | 
| -
 | 
| -  /**
 | 
| -   * Processes the given [HtmlUnit] in order to record the relationships.
 | 
| -   *
 | 
| -   * [context] - the [AnalysisContext] in which [HtmlUnit] was resolved.
 | 
| -   * [unit] - the [HtmlUnit] being indexed.
 | 
| -   */
 | 
| -  void indexHtmlUnit(AnalysisContext context, HtmlUnit unit);
 | 
| -
 | 
| -  /**
 | 
| -   * Processes the given [CompilationUnit] in order to record the relationships.
 | 
| -   *
 | 
| -   * [context] - the [AnalysisContext] in which [CompilationUnit] was resolved.
 | 
| -   * [unit] - the [CompilationUnit] being indexed.
 | 
| -   */
 | 
| -  void indexUnit(AnalysisContext context, CompilationUnit unit);
 | 
| -
 | 
| -  /**
 | 
| -   * Removes from the index all of the information associated with [context].
 | 
| -   *
 | 
| -   * This method should be invoked when [context] is disposed.
 | 
| -   */
 | 
| -  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 a location 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);
 | 
| -
 | 
| -  /**
 | 
| -   * Starts the index.
 | 
| -   * Should be called before any other method.
 | 
| -   */
 | 
| -  void run();
 | 
| -
 | 
| -  /**
 | 
| -   * Stops the index.
 | 
| -   * After calling this method operations may not be executed.
 | 
| -   */
 | 
| -  void stop();
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Constants used when populating and accessing the index.
 | 
| - */
 | 
| -class IndexConstants {
 | 
| -  /**
 | 
| -   * Left: an Angular element.
 | 
| -   *   Is referenced at.
 | 
| -   * Right: location.
 | 
| -   */
 | 
| -  static final Relationship ANGULAR_REFERENCE =
 | 
| -      Relationship.getRelationship("angular-reference");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: an Angular component.
 | 
| -   *   Is closed "/>" at.
 | 
| -   * Right: location.
 | 
| -   */
 | 
| -  static final Relationship ANGULAR_CLOSING_TAG_REFERENCE =
 | 
| -      Relationship.getRelationship("angular-closing-tag-reference");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: the Universe or a Library.
 | 
| -   *   Defines an Element.
 | 
| -   * Right: an Element declaration.
 | 
| -   */
 | 
| -  static final Relationship DEFINES = Relationship.getRelationship("defines");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: class.
 | 
| -   *   Is extended by.
 | 
| -   * Right: other class declaration.
 | 
| -   */
 | 
| -  static final Relationship IS_EXTENDED_BY =
 | 
| -      Relationship.getRelationship("is-extended-by");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: class.
 | 
| -   *   Is implemented by.
 | 
| -   * Right: other class declaration.
 | 
| -   */
 | 
| -  static final Relationship IS_IMPLEMENTED_BY =
 | 
| -      Relationship.getRelationship("is-implemented-by");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: class.
 | 
| -   *   Is mixed into.
 | 
| -   * Right: other class declaration.
 | 
| -   */
 | 
| -  static final Relationship IS_MIXED_IN_BY =
 | 
| -      Relationship.getRelationship("is-mixed-in-by");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: local variable, parameter.
 | 
| -   *   Is read at.
 | 
| -   * Right: location.
 | 
| -   */
 | 
| -  static final Relationship IS_READ_BY =
 | 
| -      Relationship.getRelationship("is-read-by");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: local variable, parameter.
 | 
| -   *   Is both read and written at.
 | 
| -   * Right: location.
 | 
| -   */
 | 
| -  static final Relationship IS_READ_WRITTEN_BY =
 | 
| -      Relationship.getRelationship("is-read-written-by");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: local variable, parameter.
 | 
| -   *   Is written at.
 | 
| -   * Right: location.
 | 
| -   */
 | 
| -  static final Relationship IS_WRITTEN_BY =
 | 
| -      Relationship.getRelationship("is-written-by");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: function, method, variable, getter.
 | 
| -   *   Is invoked at.
 | 
| -   * Right: location.
 | 
| -   */
 | 
| -  static final Relationship IS_INVOKED_BY =
 | 
| -      Relationship.getRelationship("is-invoked-by");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: function, function type, class, field, method.
 | 
| -   *   Is referenced (and not invoked, read/written) at.
 | 
| -   * Right: location.
 | 
| -   */
 | 
| -  static final Relationship IS_REFERENCED_BY =
 | 
| -      Relationship.getRelationship("is-referenced-by");
 | 
| -
 | 
| -  /**
 | 
| -   * Left: name element.
 | 
| -   *   Is defined by.
 | 
| -   * Right: concrete element declaration.
 | 
| -   */
 | 
| -  static final Relationship NAME_IS_DEFINED_BY =
 | 
| -      Relationship.getRelationship("name-is-defined-by");
 | 
| -
 | 
| -  IndexConstants._();
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Instances of the class [Location] represent a location related to an element.
 | 
| - *
 | 
| - * The location is expressed as an offset and length, but the offset is relative
 | 
| - * to the resource containing the element rather than the start of the element
 | 
| - * within that resource.
 | 
| - */
 | 
| -class Location {
 | 
| -  static const int _FLAG_QUALIFIED = 1 << 0;
 | 
| -  static const int _FLAG_RESOLVED = 1 << 1;
 | 
| -
 | 
| -  /**
 | 
| -   * An empty array of locations.
 | 
| -   */
 | 
| -  static const List<Location> EMPTY_ARRAY = const <Location>[];
 | 
| -
 | 
| -  /**
 | 
| -   * The element containing this location.
 | 
| -   */
 | 
| -  final Element element;
 | 
| -
 | 
| -  /**
 | 
| -   * The offset of this location within the resource containing the element.
 | 
| -   */
 | 
| -  final int offset;
 | 
| -
 | 
| -  /**
 | 
| -   * The length of this location.
 | 
| -   */
 | 
| -  final int length;
 | 
| -
 | 
| -  /**
 | 
| -   * The flags of this location.
 | 
| -   */
 | 
| -  int _flags;
 | 
| -
 | 
| -  /**
 | 
| -   * Initializes a newly created location to be relative to the given element at
 | 
| -   * the given [offset] with the given [length].
 | 
| -   *
 | 
| -   * [element] - the [Element] containing this location.
 | 
| -   * [offset] - the offset within the resource containing [element].
 | 
| -   * [length] - the length of this location
 | 
| -   */
 | 
| -  Location(this.element, this.offset, this.length, {bool isQualified: false,
 | 
| -      bool isResolved: true}) {
 | 
| -    if (element == null) {
 | 
| -      throw new ArgumentError("element location cannot be null");
 | 
| -    }
 | 
| -    _flags = 0;
 | 
| -    if (isQualified) {
 | 
| -      _flags |= _FLAG_QUALIFIED;
 | 
| -    }
 | 
| -    if (isResolved) {
 | 
| -      _flags |= _FLAG_RESOLVED;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  /**
 | 
| -   * Returns `true` if this location is a qualified reference.
 | 
| -   */
 | 
| -  bool get isQualified => (_flags & _FLAG_QUALIFIED) != 0;
 | 
| -
 | 
| -  /**
 | 
| -   * Returns `true` if this location is a resolved reference.
 | 
| -   */
 | 
| -  bool get isResolved => (_flags & _FLAG_RESOLVED) != 0;
 | 
| -
 | 
| -  @override
 | 
| -  String toString() {
 | 
| -    String flagsStr = '';
 | 
| -    if (isQualified) {
 | 
| -      flagsStr += ' qualified';
 | 
| -    }
 | 
| -    if (isResolved) {
 | 
| -      flagsStr += ' resolved';
 | 
| -    }
 | 
| -    return '[${offset} - ${(offset + length)}) $flagsStr in ${element}';
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * A [Location] with attached data.
 | 
| - */
 | 
| -class LocationWithData<D> extends Location {
 | 
| -  final D data;
 | 
| -
 | 
| -  LocationWithData(Location location, this.data)
 | 
| -      : super(location.element, location.offset, location.length);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * An [Element] which is used to index references to the name without specifying
 | 
| - * a concrete kind of this name - field, method or something else.
 | 
| - */
 | 
| -class NameElement extends ElementImpl {
 | 
| -  NameElement(String name) : super("name:${name}", -1);
 | 
| -
 | 
| -  @override
 | 
| -  ElementKind get kind => ElementKind.NAME;
 | 
| -
 | 
| -  @override
 | 
| -  accept(ElementVisitor visitor) => null;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Relationship between an element and a location. Relationships are identified
 | 
| - * by a globally unique identifier.
 | 
| - */
 | 
| -class Relationship {
 | 
| -  /**
 | 
| -   * A table mapping relationship identifiers to relationships.
 | 
| -   */
 | 
| -  static Map<String, Relationship> _RELATIONSHIP_MAP = {};
 | 
| -
 | 
| -  /**
 | 
| -   * The unique identifier for this relationship.
 | 
| -   */
 | 
| -  final String identifier;
 | 
| -
 | 
| -  /**
 | 
| -   * Initialize a newly created relationship with the given unique identifier.
 | 
| -   */
 | 
| -  Relationship(this.identifier);
 | 
| -
 | 
| -  @override
 | 
| -  String toString() => identifier;
 | 
| -
 | 
| -  /**
 | 
| -   * Returns the relationship with the given unique [identifier].
 | 
| -   */
 | 
| -  static Relationship getRelationship(String identifier) {
 | 
| -    Relationship relationship = _RELATIONSHIP_MAP[identifier];
 | 
| -    if (relationship == null) {
 | 
| -      relationship = new Relationship(identifier);
 | 
| -      _RELATIONSHIP_MAP[identifier] = relationship;
 | 
| -    }
 | 
| -    return relationship;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * An element to use when we want to request "defines" relations without
 | 
| - * specifying an exact library.
 | 
| - */
 | 
| -class UniverseElement extends ElementImpl {
 | 
| -  static final UniverseElement INSTANCE = new UniverseElement._();
 | 
| -
 | 
| -  UniverseElement._() : super("--universe--", -1);
 | 
| -
 | 
| -  @override
 | 
| -  ElementKind get kind => ElementKind.UNIVERSE;
 | 
| -
 | 
| -  @override
 | 
| -  accept(ElementVisitor visitor) => null;
 | 
| -}
 | 
| 
 |