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

Unified Diff: pkg/analysis_server/lib/src/services/index/index_contributor.dart

Issue 1801883002: Remove old index and search implementations. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/lib/src/services/index/index_contributor.dart
diff --git a/pkg/analysis_server/lib/src/services/index/index_contributor.dart b/pkg/analysis_server/lib/src/services/index/index_contributor.dart
deleted file mode 100644
index 7fc19bd3887e098291d3f85a4874d6aa5722af5a..0000000000000000000000000000000000000000
--- a/pkg/analysis_server/lib/src/services/index/index_contributor.dart
+++ /dev/null
@@ -1,841 +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.src.index.index_contributor;
-
-import 'dart:collection' show Queue;
-
-import 'package:analysis_server/src/provisional/index/index_core.dart';
-import 'package:analysis_server/src/services/correction/namespace.dart';
-import 'package:analysis_server/src/services/index/index.dart';
-import 'package:analysis_server/src/services/index/index_store.dart';
-import 'package:analysis_server/src/services/index/indexable_element.dart';
-import 'package:analysis_server/src/services/index/indexable_file.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/java_engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-
-/**
- * An [IndexContributor] that contributes relationships for Dart files.
- */
-class DartIndexContributor extends IndexContributor {
- @override
- void contributeTo(IndexStore store, AnalysisContext context, Object object) {
- if (store is InternalIndexStore && object is CompilationUnit) {
- _IndexContributor contributor = new _IndexContributor(store);
- object.accept(contributor);
- }
- }
-}
-
-/**
- * Visits a resolved AST and adds relationships into [InternalIndexStore].
- */
-class _IndexContributor extends GeneralizingAstVisitor {
- final InternalIndexStore _store;
-
- CompilationUnitElement _unitElement;
- LibraryElement _libraryElement;
-
- Map<ImportElement, Set<Element>> _importElementsMap = {};
-
- /**
- * A stack whose top element (the element with the largest index) is an
- * element representing the inner-most enclosing scope.
- */
- Queue<Element> _elementStack = new Queue();
-
- _IndexContributor(this._store);
-
- /**
- * Enter a new scope represented by the given [Element].
- */
- void enterScope(Element element) {
- _elementStack.addFirst(element);
- }
-
- /**
- * Return the inner-most enclosing [Element], wrapped as an indexable object,
- * or `null` if there is no enclosing element.
- */
- IndexableElement peekElement() {
- for (Element element in _elementStack) {
- if (element != null) {
- return new IndexableElement(element);
- }
- }
- return null;
- }
-
- /**
- * Record the given relationship between the given [Element] and
- * [LocationImpl].
- */
- void recordRelationshipElement(
- Element element, RelationshipImpl relationship, LocationImpl location) {
- if (element != null && location != null) {
- _store.recordRelationship(
- new IndexableElement(element), relationship, location);
- }
- }
-
- /**
- * Record the given relationship between the given [IndexableObject] and
- * [LocationImpl].
- */
- void recordRelationshipIndexable(IndexableObject indexable,
- RelationshipImpl relationship, LocationImpl location) {
- if (indexable != null && location != null) {
- _store.recordRelationship(indexable, relationship, location);
- }
- }
-
- @override
- visitAssignmentExpression(AssignmentExpression node) {
- _recordOperatorReference(node.operator, node.bestElement);
- super.visitAssignmentExpression(node);
- }
-
- @override
- visitBinaryExpression(BinaryExpression node) {
- _recordOperatorReference(node.operator, node.bestElement);
- super.visitBinaryExpression(node);
- }
-
- @override
- visitClassDeclaration(ClassDeclaration node) {
- ClassElement element = node.element;
- enterScope(element);
- try {
- _recordTopLevelElementDefinition(element);
- _recordHasAncestor(element);
- {
- ExtendsClause extendsClause = node.extendsClause;
- if (extendsClause != null) {
- TypeName superclassNode = extendsClause.superclass;
- _recordSuperType(superclassNode, IndexConstants.IS_EXTENDED_BY);
- } else {
- InterfaceType superType = element.supertype;
- if (superType != null) {
- ClassElement objectElement = superType.element;
- recordRelationshipElement(
- objectElement,
- IndexConstants.IS_EXTENDED_BY,
- _createLocationForOffset(node.name.offset, 0));
- }
- }
- }
- {
- WithClause withClause = node.withClause;
- if (withClause != null) {
- for (TypeName mixinNode in withClause.mixinTypes) {
- _recordSuperType(mixinNode, IndexConstants.IS_MIXED_IN_BY);
- }
- }
- }
- {
- ImplementsClause implementsClause = node.implementsClause;
- if (implementsClause != null) {
- for (TypeName interfaceNode in implementsClause.interfaces) {
- _recordSuperType(interfaceNode, IndexConstants.IS_IMPLEMENTED_BY);
- }
- }
- }
- super.visitClassDeclaration(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitClassTypeAlias(ClassTypeAlias node) {
- ClassElement element = node.element;
- enterScope(element);
- try {
- _recordTopLevelElementDefinition(element);
- _recordHasAncestor(element);
- {
- TypeName superclassNode = node.superclass;
- if (superclassNode != null) {
- _recordSuperType(superclassNode, IndexConstants.IS_EXTENDED_BY);
- }
- }
- {
- WithClause withClause = node.withClause;
- if (withClause != null) {
- for (TypeName mixinNode in withClause.mixinTypes) {
- _recordSuperType(mixinNode, IndexConstants.IS_MIXED_IN_BY);
- }
- }
- }
- {
- ImplementsClause implementsClause = node.implementsClause;
- if (implementsClause != null) {
- for (TypeName interfaceNode in implementsClause.interfaces) {
- _recordSuperType(interfaceNode, IndexConstants.IS_IMPLEMENTED_BY);
- }
- }
- }
- super.visitClassTypeAlias(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitCompilationUnit(CompilationUnit node) {
- _unitElement = node.element;
- if (_unitElement != null) {
- _elementStack.add(_unitElement);
- _libraryElement = _unitElement.enclosingElement;
- if (_libraryElement != null) {
- super.visitCompilationUnit(node);
- }
- }
- }
-
- @override
- visitConstructorDeclaration(ConstructorDeclaration node) {
- ConstructorElement element = node.element;
- enterScope(element);
- try {
- super.visitConstructorDeclaration(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
- SimpleIdentifier fieldName = node.fieldName;
- Expression expression = node.expression;
- // field reference is write here
- if (fieldName != null) {
- Element element = fieldName.staticElement;
- LocationImpl location = _createLocationForNode(fieldName);
- recordRelationshipElement(
- element, IndexConstants.IS_WRITTEN_BY, location);
- }
- // index expression
- if (expression != null) {
- expression.accept(this);
- }
- }
-
- @override
- visitConstructorName(ConstructorName node) {
- ConstructorElement element = node.staticElement;
- // in 'class B = A;' actually A constructors are invoked
- if (element != null &&
- element.isSynthetic &&
- element.redirectedConstructor != null) {
- element = element.redirectedConstructor;
- }
- // prepare location
- LocationImpl location;
- if (node.name != null) {
- int start = node.period.offset;
- int end = node.name.end;
- location = _createLocationForOffset(start, end - start);
- } else {
- int start = node.type.end;
- location = _createLocationForOffset(start, 0);
- }
- // record relationship
- recordRelationshipElement(
- element, IndexConstants.IS_REFERENCED_BY, location);
- super.visitConstructorName(node);
- }
-
- @override
- visitDeclaredIdentifier(DeclaredIdentifier node) {
- LocalVariableElement element = node.element;
- enterScope(element);
- try {
- super.visitDeclaredIdentifier(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitEnumDeclaration(EnumDeclaration node) {
- ClassElement element = node.element;
- enterScope(element);
- try {
- _recordTopLevelElementDefinition(element);
- super.visitEnumDeclaration(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitExportDirective(ExportDirective node) {
- ExportElement element = node.element;
- if (element != null) {
- LibraryElement expLibrary = element.exportedLibrary;
- _recordLibraryReference(node, expLibrary);
- }
- _recordUriFileReference(node);
- super.visitExportDirective(node);
- }
-
- @override
- visitFormalParameter(FormalParameter node) {
- ParameterElement element = node.element;
- enterScope(element);
- try {
- super.visitFormalParameter(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitFunctionDeclaration(FunctionDeclaration node) {
- Element element = node.element;
- _recordTopLevelElementDefinition(element);
- enterScope(element);
- try {
- super.visitFunctionDeclaration(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitFunctionTypeAlias(FunctionTypeAlias node) {
- Element element = node.element;
- _recordTopLevelElementDefinition(element);
- super.visitFunctionTypeAlias(node);
- }
-
- @override
- visitImportDirective(ImportDirective node) {
- ImportElement element = node.element;
- if (element != null) {
- LibraryElement impLibrary = element.importedLibrary;
- _recordLibraryReference(node, impLibrary);
- }
- _recordUriFileReference(node);
- super.visitImportDirective(node);
- }
-
- @override
- visitIndexExpression(IndexExpression node) {
- MethodElement element = node.bestElement;
- if (element is MethodElement) {
- Token operator = node.leftBracket;
- LocationImpl location =
- _createLocationForToken(operator, element != null);
- recordRelationshipElement(
- element, IndexConstants.IS_INVOKED_BY, location);
- }
- super.visitIndexExpression(node);
- }
-
- @override
- visitMethodDeclaration(MethodDeclaration node) {
- ExecutableElement element = node.element;
- enterScope(element);
- try {
- super.visitMethodDeclaration(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitMethodInvocation(MethodInvocation node) {
- SimpleIdentifier name = node.methodName;
- LocationImpl location = _createLocationForNode(name);
- // name invocation
- recordRelationshipIndexable(
- new IndexableName(name.name), IndexConstants.IS_INVOKED_BY, location);
- // element invocation
- Element element = name.bestElement;
- if (element is MethodElement ||
- element is PropertyAccessorElement ||
- element is FunctionElement ||
- element is VariableElement) {
- recordRelationshipElement(
- element, IndexConstants.IS_INVOKED_BY, location);
- } else if (element is ClassElement) {
- recordRelationshipElement(
- element, IndexConstants.IS_REFERENCED_BY, location);
- }
- _recordImportElementReferenceWithoutPrefix(name);
- super.visitMethodInvocation(node);
- }
-
- @override
- visitPartDirective(PartDirective node) {
- Element element = node.element;
- LocationImpl location = _createLocationForNode(node.uri);
- recordRelationshipElement(
- element, IndexConstants.IS_REFERENCED_BY, location);
- _recordUriFileReference(node);
- super.visitPartDirective(node);
- }
-
- @override
- visitPartOfDirective(PartOfDirective node) {
- LocationImpl location = _createLocationForNode(node.libraryName);
- recordRelationshipElement(
- node.element, IndexConstants.IS_REFERENCED_BY, location);
- }
-
- @override
- visitPostfixExpression(PostfixExpression node) {
- _recordOperatorReference(node.operator, node.bestElement);
- super.visitPostfixExpression(node);
- }
-
- @override
- visitPrefixExpression(PrefixExpression node) {
- _recordOperatorReference(node.operator, node.bestElement);
- super.visitPrefixExpression(node);
- }
-
- @override
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
- ConstructorElement element = node.staticElement;
- LocationImpl location;
- if (node.constructorName != null) {
- int start = node.period.offset;
- int end = node.constructorName.end;
- location = _createLocationForOffset(start, end - start);
- } else {
- int start = node.thisKeyword.end;
- location = _createLocationForOffset(start, 0);
- }
- recordRelationshipElement(
- element, IndexConstants.IS_REFERENCED_BY, location);
- super.visitRedirectingConstructorInvocation(node);
- }
-
- @override
- visitSimpleIdentifier(SimpleIdentifier node) {
- IndexableName indexableName = new IndexableName(node.name);
- LocationImpl location = _createLocationForNode(node);
- if (location == null) {
- return;
- }
- // name in declaration
- if (node.inDeclarationContext()) {
- recordRelationshipIndexable(
- indexableName, IndexConstants.NAME_IS_DEFINED_BY, location);
- return;
- }
- // prepare information
- Element element = node.bestElement;
- // stop if already handled
- if (_isAlreadyHandledName(node)) {
- return;
- }
- // record name read/write
- if (element != null && element.enclosingElement is ClassElement ||
- element == null && location.isQualified) {
- bool inGetterContext = node.inGetterContext();
- bool inSetterContext = node.inSetterContext();
- if (inGetterContext && inSetterContext) {
- recordRelationshipIndexable(
- indexableName, IndexConstants.IS_READ_WRITTEN_BY, location);
- } else if (inGetterContext) {
- recordRelationshipIndexable(
- indexableName, IndexConstants.IS_READ_BY, location);
- } else if (inSetterContext) {
- recordRelationshipIndexable(
- indexableName, IndexConstants.IS_WRITTEN_BY, location);
- }
- }
- // this.field parameter
- if (element is FieldFormalParameterElement) {
- RelationshipImpl relationship = peekElement().element == element
- ? IndexConstants.IS_WRITTEN_BY
- : IndexConstants.IS_REFERENCED_BY;
- recordRelationshipElement(element.field, relationship, location);
- return;
- }
- // record specific relations
- if (element is ClassElement ||
- element is FunctionElement ||
- element is FunctionTypeAliasElement ||
- element is LabelElement ||
- element is MethodElement ||
- element is PropertyAccessorElement ||
- element is PropertyInducingElement ||
- element is TypeParameterElement) {
- recordRelationshipElement(
- element, IndexConstants.IS_REFERENCED_BY, location);
- } else if (element is PrefixElement) {
- recordRelationshipElement(
- element, IndexConstants.IS_REFERENCED_BY, location);
- _recordImportElementReferenceWithPrefix(node);
- } else if (element is ParameterElement || element is LocalVariableElement) {
- bool inGetterContext = node.inGetterContext();
- bool inSetterContext = node.inSetterContext();
- if (inGetterContext && inSetterContext) {
- recordRelationshipElement(
- element, IndexConstants.IS_READ_WRITTEN_BY, location);
- } else if (inGetterContext) {
- recordRelationshipElement(element, IndexConstants.IS_READ_BY, location);
- } else if (inSetterContext) {
- recordRelationshipElement(
- element, IndexConstants.IS_WRITTEN_BY, location);
- } else {
- recordRelationshipElement(
- element, IndexConstants.IS_REFERENCED_BY, location);
- }
- }
- _recordImportElementReferenceWithoutPrefix(node);
- super.visitSimpleIdentifier(node);
- }
-
- @override
- visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- ConstructorElement element = node.staticElement;
- LocationImpl location;
- if (node.constructorName != null) {
- int start = node.period.offset;
- int end = node.constructorName.end;
- location = _createLocationForOffset(start, end - start);
- } else {
- int start = node.superKeyword.end;
- location = _createLocationForOffset(start, 0);
- }
- recordRelationshipElement(
- element, IndexConstants.IS_REFERENCED_BY, location);
- super.visitSuperConstructorInvocation(node);
- }
-
- @override
- visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
- VariableDeclarationList variables = node.variables;
- for (VariableDeclaration variableDeclaration in variables.variables) {
- Element element = variableDeclaration.element;
- _recordTopLevelElementDefinition(element);
- }
- super.visitTopLevelVariableDeclaration(node);
- }
-
- @override
- visitTypeParameter(TypeParameter node) {
- TypeParameterElement element = node.element;
- enterScope(element);
- try {
- super.visitTypeParameter(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitVariableDeclaration(VariableDeclaration node) {
- VariableElement element = node.element;
- // record declaration
- {
- SimpleIdentifier name = node.name;
- LocationImpl location = _createLocationForNode(name);
- location = _getLocationWithExpressionType(location, node.initializer);
- recordRelationshipElement(
- element, IndexConstants.NAME_IS_DEFINED_BY, location);
- }
- // visit
- enterScope(element);
- try {
- super.visitVariableDeclaration(node);
- } finally {
- _exitScope();
- }
- }
-
- @override
- visitVariableDeclarationList(VariableDeclarationList node) {
- NodeList<VariableDeclaration> variables = node.variables;
- if (variables != null) {
- // use first VariableDeclaration as Element for Location(s) in type
- {
- TypeName type = node.type;
- if (type != null) {
- for (VariableDeclaration variableDeclaration in variables) {
- enterScope(variableDeclaration.element);
- try {
- type.accept(this);
- } finally {
- _exitScope();
- }
- // only one iteration
- break;
- }
- }
- }
- // visit variables
- variables.accept(this);
- }
- }
-
- /**
- * @return the [LocationImpl] representing location of the [AstNode].
- */
- LocationImpl _createLocationForNode(AstNode node) {
- bool isQualified = _isQualifiedClassMemberAccess(node);
- bool isResolved = true;
- if (node is SimpleIdentifier) {
- isResolved = node.bestElement != null;
- }
- IndexableObject indexable = peekElement();
- return new LocationImpl(indexable, node.offset, node.length,
- isQualified: isQualified, isResolved: isResolved);
- }
-
- /**
- * [offset] - the offset of the location within [Source].
- * [length] - the length of the location.
- *
- * Returns the [LocationImpl] representing the given offset and length within the
- * inner-most [Element].
- */
- LocationImpl _createLocationForOffset(int offset, int length) {
- IndexableObject element = peekElement();
- return new LocationImpl(element, offset, length);
- }
-
- /**
- * @return the [LocationImpl] representing location of the [Token].
- */
- LocationImpl _createLocationForToken(Token token, bool isResolved) {
- IndexableObject element = peekElement();
- return new LocationImpl(element, token.offset, token.length,
- isQualified: true, isResolved: isResolved);
- }
-
- /**
- * Exit the current scope.
- */
- void _exitScope() {
- _elementStack.removeFirst();
- }
-
- /**
- * @return `true` if given node already indexed as more interesting reference, so it should
- * not be indexed again.
- */
- bool _isAlreadyHandledName(SimpleIdentifier node) {
- AstNode parent = node.parent;
- if (parent is MethodInvocation) {
- return parent.methodName == node;
- }
- return false;
- }
-
- bool _isQualifiedClassMemberAccess(AstNode node) {
- if (node is SimpleIdentifier) {
- AstNode parent = node.parent;
- if (parent is PrefixedIdentifier && parent.identifier == node) {
- return parent.prefix.staticElement is! PrefixElement;
- }
- if (parent is PropertyAccess && parent.propertyName == node) {
- return parent.realTarget != null;
- }
- if (parent is MethodInvocation && parent.methodName == node) {
- Expression target = parent.realTarget;
- if (target is SimpleIdentifier &&
- target.staticElement is PrefixElement) {
- return false;
- }
- return target != null;
- }
- }
- return false;
- }
-
- void _recordHasAncestor(ClassElement element) {
- int offset = element.nameOffset;
- int length = element.nameLength;
- LocationImpl location = _createLocationForOffset(offset, length);
- _recordHasAncestor0(location, element, false, <ClassElement>[]);
- }
-
- void _recordHasAncestor0(LocationImpl location, ClassElement element,
- bool includeThis, List<ClassElement> visitedElements) {
- if (element == null) {
- return;
- }
- if (visitedElements.contains(element)) {
- return;
- }
- visitedElements.add(element);
- if (includeThis) {
- recordRelationshipElement(element, IndexConstants.HAS_ANCESTOR, location);
- }
- {
- InterfaceType superType = element.supertype;
- if (superType != null) {
- _recordHasAncestor0(location, superType.element, true, visitedElements);
- }
- }
- for (InterfaceType mixinType in element.mixins) {
- _recordHasAncestor0(location, mixinType.element, true, visitedElements);
- }
- for (InterfaceType implementedType in element.interfaces) {
- _recordHasAncestor0(
- location, implementedType.element, true, visitedElements);
- }
- }
-
- /**
- * Records [ImportElement] reference if given [SimpleIdentifier] references some
- * top-level element and not qualified with import prefix.
- */
- void _recordImportElementReferenceWithoutPrefix(SimpleIdentifier node) {
- if (_isIdentifierInImportCombinator(node)) {
- return;
- }
- if (_isIdentifierInPrefixedIdentifier(node)) {
- return;
- }
- Element element = node.staticElement;
- ImportElement importElement = internal_getImportElement(
- _libraryElement, null, element, _importElementsMap);
- if (importElement != null) {
- LocationImpl location = _createLocationForOffset(node.offset, 0);
- recordRelationshipElement(
- importElement, IndexConstants.IS_REFERENCED_BY, location);
- }
- }
-
- /**
- * Records [ImportElement] that declares given prefix and imports library with element used
- * with given prefix node.
- */
- void _recordImportElementReferenceWithPrefix(SimpleIdentifier prefixNode) {
- ImportElementInfo info = internal_getImportElementInfo(prefixNode);
- if (info != null) {
- int offset = prefixNode.offset;
- int length = info.periodEnd - offset;
- LocationImpl location = _createLocationForOffset(offset, length);
- recordRelationshipElement(
- info.element, IndexConstants.IS_REFERENCED_BY, location);
- }
- }
-
- /**
- * Records reference to defining [CompilationUnitElement] of the given
- * [LibraryElement].
- */
- void _recordLibraryReference(UriBasedDirective node, LibraryElement library) {
- if (library != null) {
- LocationImpl location = _createLocationForNode(node.uri);
- recordRelationshipElement(library.definingCompilationUnit,
- IndexConstants.IS_REFERENCED_BY, location);
- }
- }
-
- /**
- * Record reference to the given operator [Element] and name.
- */
- void _recordOperatorReference(Token operator, Element element) {
- // prepare location
- LocationImpl location = _createLocationForToken(operator, element != null);
- // record name reference
- {
- String name = operator.lexeme;
- if (name == "++") {
- name = "+";
- }
- if (name == "--") {
- name = "-";
- }
- if (StringUtilities.endsWithChar(name, 0x3D) && name != "==") {
- name = name.substring(0, name.length - 1);
- }
- IndexableName indexableName = new IndexableName(name);
- recordRelationshipIndexable(
- indexableName, IndexConstants.IS_INVOKED_BY, location);
- }
- // record element reference
- if (element != null) {
- recordRelationshipElement(
- element, IndexConstants.IS_INVOKED_BY, location);
- }
- }
-
- /**
- * Records a relation between [superNode] and its [Element].
- */
- void _recordSuperType(TypeName superNode, RelationshipImpl relationship) {
- if (superNode != null) {
- Identifier superName = superNode.name;
- if (superName != null) {
- Element superElement = superName.staticElement;
- recordRelationshipElement(
- superElement, relationship, _createLocationForNode(superNode));
- }
- }
- }
-
- /**
- * Records the [Element] definition in the library and universe.
- */
- void _recordTopLevelElementDefinition(Element element) {
- if (element != null) {
- IndexableElement indexable = new IndexableElement(element);
- int offset = element.nameOffset;
- int length = element.nameLength;
- LocationImpl location = new LocationImpl(indexable, offset, length);
- recordRelationshipElement(
- _libraryElement, IndexConstants.DEFINES, location);
- _store.recordTopLevelDeclaration(element);
- }
- }
-
- void _recordUriFileReference(UriBasedDirective directive) {
- Source source = directive.source;
- if (source != null) {
- LocationImpl location = new LocationImpl(
- new IndexableFile(_unitElement.source.fullName),
- directive.uri.offset,
- directive.uri.length);
- _store.recordRelationship(new IndexableFile(source.fullName),
- IndexConstants.IS_REFERENCED_BY, location);
- }
- }
-
- /**
- * If the given expression has resolved type, returns the new location with this type.
- *
- * [location] - the base location
- * [expression] - the expression assigned at the given location
- */
- static LocationImpl _getLocationWithExpressionType(
- LocationImpl location, Expression expression) {
- if (expression != null) {
- return new LocationWithData<DartType>(location, expression.bestType);
- }
- return location;
- }
-
- /**
- * @return `true` if given "node" is part of an import [Combinator].
- */
- static bool _isIdentifierInImportCombinator(SimpleIdentifier node) {
- AstNode parent = node.parent;
- return parent is Combinator;
- }
-
- /**
- * @return `true` if given "node" is part of [PrefixedIdentifier] "prefix.node".
- */
- static bool _isIdentifierInPrefixedIdentifier(SimpleIdentifier node) {
- AstNode parent = node.parent;
- return parent is PrefixedIdentifier && parent.identifier == node;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698