| 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
|
| index 53ef4643de0866f62992588f869869d37d7558bf..a93b62c3a108f76c8f5b01c1303520553eb382cf 100644
|
| --- a/pkg/analysis_server/lib/src/services/index/index_contributor.dart
|
| +++ b/pkg/analysis_server/lib/src/services/index/index_contributor.dart
|
| @@ -127,7 +127,7 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| * Record the given relationship between the given [Element] and
|
| * [LocationImpl].
|
| */
|
| - void recordRelationship(
|
| + void recordRelationshipElement(
|
| Element element, RelationshipImpl relationship, LocationImpl location) {
|
| if (element != null && location != null) {
|
| _store.recordRelationship(
|
| @@ -135,6 +135,17 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| }
|
| }
|
|
|
| + /**
|
| + * 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);
|
| @@ -162,7 +173,9 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| InterfaceType superType = element.supertype;
|
| if (superType != null) {
|
| ClassElement objectElement = superType.element;
|
| - recordRelationship(objectElement, IndexConstants.IS_EXTENDED_BY,
|
| + recordRelationshipElement(
|
| + objectElement,
|
| + IndexConstants.IS_EXTENDED_BY,
|
| _createLocationForOffset(node.name.offset, 0));
|
| }
|
| }
|
| @@ -254,7 +267,8 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| if (fieldName != null) {
|
| Element element = fieldName.staticElement;
|
| LocationImpl location = _createLocationForNode(fieldName);
|
| - recordRelationship(element, IndexConstants.IS_WRITTEN_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_WRITTEN_BY, location);
|
| }
|
| // index expression
|
| if (expression != null) {
|
| @@ -282,7 +296,8 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| location = _createLocationForOffset(start, 0);
|
| }
|
| // record relationship
|
| - recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_REFERENCED_BY, location);
|
| super.visitConstructorName(node);
|
| }
|
|
|
| @@ -366,7 +381,8 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| Token operator = node.leftBracket;
|
| LocationImpl location =
|
| _createLocationForToken(operator, element != null);
|
| - recordRelationship(element, IndexConstants.IS_INVOKED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_INVOKED_BY, location);
|
| }
|
| super.visitIndexExpression(node);
|
| }
|
| @@ -386,18 +402,17 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| 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) {
|
| - recordRelationship(element, IndexConstants.IS_INVOKED_BY, location);
|
| - }
|
| - // name invocation
|
| - {
|
| - recordRelationship(
|
| - new NameElement(name.name), IndexConstants.IS_INVOKED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_INVOKED_BY, location);
|
| }
|
| _recordImportElementReferenceWithoutPrefix(name);
|
| super.visitMethodInvocation(node);
|
| @@ -407,14 +422,16 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| visitPartDirective(PartDirective node) {
|
| Element element = node.element;
|
| LocationImpl location = _createLocationForNode(node.uri);
|
| - recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_REFERENCED_BY, location);
|
| super.visitPartDirective(node);
|
| }
|
|
|
| @override
|
| visitPartOfDirective(PartOfDirective node) {
|
| LocationImpl location = _createLocationForNode(node.libraryName);
|
| - recordRelationship(node.element, IndexConstants.IS_REFERENCED_BY, location);
|
| + recordRelationshipElement(
|
| + node.element, IndexConstants.IS_REFERENCED_BY, location);
|
| }
|
|
|
| @override
|
| @@ -441,21 +458,22 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| int start = node.thisKeyword.end;
|
| location = _createLocationForOffset(start, 0);
|
| }
|
| - recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_REFERENCED_BY, location);
|
| super.visitRedirectingConstructorInvocation(node);
|
| }
|
|
|
| @override
|
| visitSimpleIdentifier(SimpleIdentifier node) {
|
| - NameElement nameElement = new NameElement(node.name);
|
| + IndexableName indexableName = new IndexableName(node.name);
|
| LocationImpl location = _createLocationForNode(node);
|
| if (location == null) {
|
| return;
|
| }
|
| // name in declaration
|
| if (node.inDeclarationContext()) {
|
| - recordRelationship(
|
| - nameElement, IndexConstants.NAME_IS_DEFINED_BY, location);
|
| + recordRelationshipIndexable(
|
| + indexableName, IndexConstants.NAME_IS_DEFINED_BY, location);
|
| return;
|
| }
|
| // prepare information
|
| @@ -470,12 +488,14 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| bool inGetterContext = node.inGetterContext();
|
| bool inSetterContext = node.inSetterContext();
|
| if (inGetterContext && inSetterContext) {
|
| - recordRelationship(
|
| - nameElement, IndexConstants.IS_READ_WRITTEN_BY, location);
|
| + recordRelationshipIndexable(
|
| + indexableName, IndexConstants.IS_READ_WRITTEN_BY, location);
|
| } else if (inGetterContext) {
|
| - recordRelationship(nameElement, IndexConstants.IS_READ_BY, location);
|
| + recordRelationshipIndexable(
|
| + indexableName, IndexConstants.IS_READ_BY, location);
|
| } else if (inSetterContext) {
|
| - recordRelationship(nameElement, IndexConstants.IS_WRITTEN_BY, location);
|
| + recordRelationshipIndexable(
|
| + indexableName, IndexConstants.IS_WRITTEN_BY, location);
|
| }
|
| }
|
| // this.field parameter
|
| @@ -483,7 +503,7 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| RelationshipImpl relationship = peekElement().element == element
|
| ? IndexConstants.IS_WRITTEN_BY
|
| : IndexConstants.IS_REFERENCED_BY;
|
| - recordRelationship(element.field, relationship, location);
|
| + recordRelationshipElement(element.field, relationship, location);
|
| return;
|
| }
|
| // record specific relations
|
| @@ -495,22 +515,26 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| element is PropertyAccessorElement ||
|
| element is PropertyInducingElement ||
|
| element is TypeParameterElement) {
|
| - recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_REFERENCED_BY, location);
|
| } else if (element is PrefixElement) {
|
| - recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
|
| + 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) {
|
| - recordRelationship(
|
| + recordRelationshipElement(
|
| element, IndexConstants.IS_READ_WRITTEN_BY, location);
|
| } else if (inGetterContext) {
|
| - recordRelationship(element, IndexConstants.IS_READ_BY, location);
|
| + recordRelationshipElement(element, IndexConstants.IS_READ_BY, location);
|
| } else if (inSetterContext) {
|
| - recordRelationship(element, IndexConstants.IS_WRITTEN_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_WRITTEN_BY, location);
|
| } else {
|
| - recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_REFERENCED_BY, location);
|
| }
|
| }
|
| _recordImportElementReferenceWithoutPrefix(node);
|
| @@ -529,7 +553,8 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| int start = node.superKeyword.end;
|
| location = _createLocationForOffset(start, 0);
|
| }
|
| - recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_REFERENCED_BY, location);
|
| super.visitSuperConstructorInvocation(node);
|
| }
|
|
|
| @@ -562,7 +587,8 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| SimpleIdentifier name = node.name;
|
| LocationImpl location = _createLocationForNode(name);
|
| location = _getLocationWithExpressionType(location, node.initializer);
|
| - recordRelationship(element, IndexConstants.NAME_IS_DEFINED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.NAME_IS_DEFINED_BY, location);
|
| }
|
| // visit
|
| enterScope(element);
|
| @@ -689,7 +715,7 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| _libraryElement, null, element, _importElementsMap);
|
| if (importElement != null) {
|
| LocationImpl location = _createLocationForOffset(node.offset, 0);
|
| - recordRelationship(
|
| + recordRelationshipElement(
|
| importElement, IndexConstants.IS_REFERENCED_BY, location);
|
| }
|
| }
|
| @@ -704,7 +730,7 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| int offset = prefixNode.offset;
|
| int length = info.periodEnd - offset;
|
| LocationImpl location = _createLocationForOffset(offset, length);
|
| - recordRelationship(
|
| + recordRelationshipElement(
|
| info.element, IndexConstants.IS_REFERENCED_BY, location);
|
| }
|
| }
|
| @@ -716,7 +742,7 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| void _recordLibraryReference(UriBasedDirective node, LibraryElement library) {
|
| if (library != null) {
|
| LocationImpl location = _createLocationForNode(node.uri);
|
| - recordRelationship(library.definingCompilationUnit,
|
| + recordRelationshipElement(library.definingCompilationUnit,
|
| IndexConstants.IS_REFERENCED_BY, location);
|
| }
|
| }
|
| @@ -739,12 +765,14 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| if (StringUtilities.endsWithChar(name, 0x3D) && name != "==") {
|
| name = name.substring(0, name.length - 1);
|
| }
|
| - Element nameElement = new NameElement(name);
|
| - recordRelationship(nameElement, IndexConstants.IS_INVOKED_BY, location);
|
| + IndexableName indexableName = new IndexableName(name);
|
| + recordRelationshipIndexable(
|
| + indexableName, IndexConstants.IS_INVOKED_BY, location);
|
| }
|
| // record element reference
|
| if (element != null) {
|
| - recordRelationship(element, IndexConstants.IS_INVOKED_BY, location);
|
| + recordRelationshipElement(
|
| + element, IndexConstants.IS_INVOKED_BY, location);
|
| }
|
| }
|
|
|
| @@ -756,7 +784,7 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| Identifier superName = superNode.name;
|
| if (superName != null) {
|
| Element superElement = superName.staticElement;
|
| - recordRelationship(
|
| + recordRelationshipElement(
|
| superElement, relationship, _createLocationForNode(superNode));
|
| }
|
| }
|
| @@ -771,7 +799,8 @@ class _IndexContributor extends GeneralizingAstVisitor {
|
| int offset = indexable.offset;
|
| int length = indexable.length;
|
| LocationImpl location = new LocationImpl(indexable, offset, length);
|
| - recordRelationship(_libraryElement, IndexConstants.DEFINES, location);
|
| + recordRelationshipElement(
|
| + _libraryElement, IndexConstants.DEFINES, location);
|
| _store.recordTopLevelDeclaration(element);
|
| }
|
| }
|
|
|