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

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

Issue 1347943006: Replace NameElement with IndexableName. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library services.src.index.index_contributor; 5 library services.src.index.index_contributor;
6 6
7 import 'dart:collection' show Queue; 7 import 'dart:collection' show Queue;
8 8
9 import 'package:analysis_server/analysis/index/index_core.dart'; 9 import 'package:analysis_server/analysis/index/index_core.dart';
10 import 'package:analysis_server/analysis/index/index_dart.dart'; 10 import 'package:analysis_server/analysis/index/index_dart.dart';
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 return new IndexableElement(element); 120 return new IndexableElement(element);
121 } 121 }
122 } 122 }
123 return null; 123 return null;
124 } 124 }
125 125
126 /** 126 /**
127 * Record the given relationship between the given [Element] and 127 * Record the given relationship between the given [Element] and
128 * [LocationImpl]. 128 * [LocationImpl].
129 */ 129 */
130 void recordRelationship( 130 void recordRelationshipElement(
131 Element element, RelationshipImpl relationship, LocationImpl location) { 131 Element element, RelationshipImpl relationship, LocationImpl location) {
132 if (element != null && location != null) { 132 if (element != null && location != null) {
133 _store.recordRelationship( 133 _store.recordRelationship(
134 new IndexableElement(element), relationship, location); 134 new IndexableElement(element), relationship, location);
135 } 135 }
136 } 136 }
137 137
138 /**
139 * Record the given relationship between the given [IndexableObject] and
140 * [LocationImpl].
141 */
142 void recordRelationshipIndexable(IndexableObject indexable,
143 RelationshipImpl relationship, LocationImpl location) {
144 if (indexable != null && location != null) {
145 _store.recordRelationship(indexable, relationship, location);
146 }
147 }
148
138 @override 149 @override
139 visitAssignmentExpression(AssignmentExpression node) { 150 visitAssignmentExpression(AssignmentExpression node) {
140 _recordOperatorReference(node.operator, node.bestElement); 151 _recordOperatorReference(node.operator, node.bestElement);
141 super.visitAssignmentExpression(node); 152 super.visitAssignmentExpression(node);
142 } 153 }
143 154
144 @override 155 @override
145 visitBinaryExpression(BinaryExpression node) { 156 visitBinaryExpression(BinaryExpression node) {
146 _recordOperatorReference(node.operator, node.bestElement); 157 _recordOperatorReference(node.operator, node.bestElement);
147 super.visitBinaryExpression(node); 158 super.visitBinaryExpression(node);
148 } 159 }
149 160
150 @override 161 @override
151 visitClassDeclaration(ClassDeclaration node) { 162 visitClassDeclaration(ClassDeclaration node) {
152 ClassElement element = node.element; 163 ClassElement element = node.element;
153 enterScope(element); 164 enterScope(element);
154 try { 165 try {
155 _recordTopLevelElementDefinition(element); 166 _recordTopLevelElementDefinition(element);
156 { 167 {
157 ExtendsClause extendsClause = node.extendsClause; 168 ExtendsClause extendsClause = node.extendsClause;
158 if (extendsClause != null) { 169 if (extendsClause != null) {
159 TypeName superclassNode = extendsClause.superclass; 170 TypeName superclassNode = extendsClause.superclass;
160 _recordSuperType(superclassNode, IndexConstants.IS_EXTENDED_BY); 171 _recordSuperType(superclassNode, IndexConstants.IS_EXTENDED_BY);
161 } else { 172 } else {
162 InterfaceType superType = element.supertype; 173 InterfaceType superType = element.supertype;
163 if (superType != null) { 174 if (superType != null) {
164 ClassElement objectElement = superType.element; 175 ClassElement objectElement = superType.element;
165 recordRelationship(objectElement, IndexConstants.IS_EXTENDED_BY, 176 recordRelationshipElement(
177 objectElement,
178 IndexConstants.IS_EXTENDED_BY,
166 _createLocationForOffset(node.name.offset, 0)); 179 _createLocationForOffset(node.name.offset, 0));
167 } 180 }
168 } 181 }
169 } 182 }
170 { 183 {
171 WithClause withClause = node.withClause; 184 WithClause withClause = node.withClause;
172 if (withClause != null) { 185 if (withClause != null) {
173 for (TypeName mixinNode in withClause.mixinTypes) { 186 for (TypeName mixinNode in withClause.mixinTypes) {
174 _recordSuperType(mixinNode, IndexConstants.IS_MIXED_IN_BY); 187 _recordSuperType(mixinNode, IndexConstants.IS_MIXED_IN_BY);
175 } 188 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 } 260 }
248 261
249 @override 262 @override
250 visitConstructorFieldInitializer(ConstructorFieldInitializer node) { 263 visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
251 SimpleIdentifier fieldName = node.fieldName; 264 SimpleIdentifier fieldName = node.fieldName;
252 Expression expression = node.expression; 265 Expression expression = node.expression;
253 // field reference is write here 266 // field reference is write here
254 if (fieldName != null) { 267 if (fieldName != null) {
255 Element element = fieldName.staticElement; 268 Element element = fieldName.staticElement;
256 LocationImpl location = _createLocationForNode(fieldName); 269 LocationImpl location = _createLocationForNode(fieldName);
257 recordRelationship(element, IndexConstants.IS_WRITTEN_BY, location); 270 recordRelationshipElement(
271 element, IndexConstants.IS_WRITTEN_BY, location);
258 } 272 }
259 // index expression 273 // index expression
260 if (expression != null) { 274 if (expression != null) {
261 expression.accept(this); 275 expression.accept(this);
262 } 276 }
263 } 277 }
264 278
265 @override 279 @override
266 visitConstructorName(ConstructorName node) { 280 visitConstructorName(ConstructorName node) {
267 ConstructorElement element = node.staticElement; 281 ConstructorElement element = node.staticElement;
268 // in 'class B = A;' actually A constructors are invoked 282 // in 'class B = A;' actually A constructors are invoked
269 if (element != null && 283 if (element != null &&
270 element.isSynthetic && 284 element.isSynthetic &&
271 element.redirectedConstructor != null) { 285 element.redirectedConstructor != null) {
272 element = element.redirectedConstructor; 286 element = element.redirectedConstructor;
273 } 287 }
274 // prepare location 288 // prepare location
275 LocationImpl location; 289 LocationImpl location;
276 if (node.name != null) { 290 if (node.name != null) {
277 int start = node.period.offset; 291 int start = node.period.offset;
278 int end = node.name.end; 292 int end = node.name.end;
279 location = _createLocationForOffset(start, end - start); 293 location = _createLocationForOffset(start, end - start);
280 } else { 294 } else {
281 int start = node.type.end; 295 int start = node.type.end;
282 location = _createLocationForOffset(start, 0); 296 location = _createLocationForOffset(start, 0);
283 } 297 }
284 // record relationship 298 // record relationship
285 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); 299 recordRelationshipElement(
300 element, IndexConstants.IS_REFERENCED_BY, location);
286 super.visitConstructorName(node); 301 super.visitConstructorName(node);
287 } 302 }
288 303
289 @override 304 @override
290 visitDeclaredIdentifier(DeclaredIdentifier node) { 305 visitDeclaredIdentifier(DeclaredIdentifier node) {
291 LocalVariableElement element = node.element; 306 LocalVariableElement element = node.element;
292 enterScope(element); 307 enterScope(element);
293 try { 308 try {
294 super.visitDeclaredIdentifier(node); 309 super.visitDeclaredIdentifier(node);
295 } finally { 310 } finally {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 super.visitImportDirective(node); 374 super.visitImportDirective(node);
360 } 375 }
361 376
362 @override 377 @override
363 visitIndexExpression(IndexExpression node) { 378 visitIndexExpression(IndexExpression node) {
364 MethodElement element = node.bestElement; 379 MethodElement element = node.bestElement;
365 if (element is MethodElement) { 380 if (element is MethodElement) {
366 Token operator = node.leftBracket; 381 Token operator = node.leftBracket;
367 LocationImpl location = 382 LocationImpl location =
368 _createLocationForToken(operator, element != null); 383 _createLocationForToken(operator, element != null);
369 recordRelationship(element, IndexConstants.IS_INVOKED_BY, location); 384 recordRelationshipElement(
385 element, IndexConstants.IS_INVOKED_BY, location);
370 } 386 }
371 super.visitIndexExpression(node); 387 super.visitIndexExpression(node);
372 } 388 }
373 389
374 @override 390 @override
375 visitMethodDeclaration(MethodDeclaration node) { 391 visitMethodDeclaration(MethodDeclaration node) {
376 ExecutableElement element = node.element; 392 ExecutableElement element = node.element;
377 enterScope(element); 393 enterScope(element);
378 try { 394 try {
379 super.visitMethodDeclaration(node); 395 super.visitMethodDeclaration(node);
380 } finally { 396 } finally {
381 _exitScope(); 397 _exitScope();
382 } 398 }
383 } 399 }
384 400
385 @override 401 @override
386 visitMethodInvocation(MethodInvocation node) { 402 visitMethodInvocation(MethodInvocation node) {
387 SimpleIdentifier name = node.methodName; 403 SimpleIdentifier name = node.methodName;
388 LocationImpl location = _createLocationForNode(name); 404 LocationImpl location = _createLocationForNode(name);
405 // name invocation
406 recordRelationshipIndexable(
407 new IndexableName(name.name), IndexConstants.IS_INVOKED_BY, location);
389 // element invocation 408 // element invocation
390 Element element = name.bestElement; 409 Element element = name.bestElement;
391 if (element is MethodElement || 410 if (element is MethodElement ||
392 element is PropertyAccessorElement || 411 element is PropertyAccessorElement ||
393 element is FunctionElement || 412 element is FunctionElement ||
394 element is VariableElement) { 413 element is VariableElement) {
395 recordRelationship(element, IndexConstants.IS_INVOKED_BY, location); 414 recordRelationshipElement(
396 } 415 element, IndexConstants.IS_INVOKED_BY, location);
397 // name invocation
398 {
399 recordRelationship(
400 new NameElement(name.name), IndexConstants.IS_INVOKED_BY, location);
401 } 416 }
402 _recordImportElementReferenceWithoutPrefix(name); 417 _recordImportElementReferenceWithoutPrefix(name);
403 super.visitMethodInvocation(node); 418 super.visitMethodInvocation(node);
404 } 419 }
405 420
406 @override 421 @override
407 visitPartDirective(PartDirective node) { 422 visitPartDirective(PartDirective node) {
408 Element element = node.element; 423 Element element = node.element;
409 LocationImpl location = _createLocationForNode(node.uri); 424 LocationImpl location = _createLocationForNode(node.uri);
410 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); 425 recordRelationshipElement(
426 element, IndexConstants.IS_REFERENCED_BY, location);
411 super.visitPartDirective(node); 427 super.visitPartDirective(node);
412 } 428 }
413 429
414 @override 430 @override
415 visitPartOfDirective(PartOfDirective node) { 431 visitPartOfDirective(PartOfDirective node) {
416 LocationImpl location = _createLocationForNode(node.libraryName); 432 LocationImpl location = _createLocationForNode(node.libraryName);
417 recordRelationship(node.element, IndexConstants.IS_REFERENCED_BY, location); 433 recordRelationshipElement(
434 node.element, IndexConstants.IS_REFERENCED_BY, location);
418 } 435 }
419 436
420 @override 437 @override
421 visitPostfixExpression(PostfixExpression node) { 438 visitPostfixExpression(PostfixExpression node) {
422 _recordOperatorReference(node.operator, node.bestElement); 439 _recordOperatorReference(node.operator, node.bestElement);
423 super.visitPostfixExpression(node); 440 super.visitPostfixExpression(node);
424 } 441 }
425 442
426 @override 443 @override
427 visitPrefixExpression(PrefixExpression node) { 444 visitPrefixExpression(PrefixExpression node) {
428 _recordOperatorReference(node.operator, node.bestElement); 445 _recordOperatorReference(node.operator, node.bestElement);
429 super.visitPrefixExpression(node); 446 super.visitPrefixExpression(node);
430 } 447 }
431 448
432 @override 449 @override
433 visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) { 450 visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
434 ConstructorElement element = node.staticElement; 451 ConstructorElement element = node.staticElement;
435 LocationImpl location; 452 LocationImpl location;
436 if (node.constructorName != null) { 453 if (node.constructorName != null) {
437 int start = node.period.offset; 454 int start = node.period.offset;
438 int end = node.constructorName.end; 455 int end = node.constructorName.end;
439 location = _createLocationForOffset(start, end - start); 456 location = _createLocationForOffset(start, end - start);
440 } else { 457 } else {
441 int start = node.thisKeyword.end; 458 int start = node.thisKeyword.end;
442 location = _createLocationForOffset(start, 0); 459 location = _createLocationForOffset(start, 0);
443 } 460 }
444 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); 461 recordRelationshipElement(
462 element, IndexConstants.IS_REFERENCED_BY, location);
445 super.visitRedirectingConstructorInvocation(node); 463 super.visitRedirectingConstructorInvocation(node);
446 } 464 }
447 465
448 @override 466 @override
449 visitSimpleIdentifier(SimpleIdentifier node) { 467 visitSimpleIdentifier(SimpleIdentifier node) {
450 NameElement nameElement = new NameElement(node.name); 468 IndexableName indexableName = new IndexableName(node.name);
451 LocationImpl location = _createLocationForNode(node); 469 LocationImpl location = _createLocationForNode(node);
452 if (location == null) { 470 if (location == null) {
453 return; 471 return;
454 } 472 }
455 // name in declaration 473 // name in declaration
456 if (node.inDeclarationContext()) { 474 if (node.inDeclarationContext()) {
457 recordRelationship( 475 recordRelationshipIndexable(
458 nameElement, IndexConstants.NAME_IS_DEFINED_BY, location); 476 indexableName, IndexConstants.NAME_IS_DEFINED_BY, location);
459 return; 477 return;
460 } 478 }
461 // prepare information 479 // prepare information
462 Element element = node.bestElement; 480 Element element = node.bestElement;
463 // stop if already handled 481 // stop if already handled
464 if (_isAlreadyHandledName(node)) { 482 if (_isAlreadyHandledName(node)) {
465 return; 483 return;
466 } 484 }
467 // record name read/write 485 // record name read/write
468 if (element != null && element.enclosingElement is ClassElement || 486 if (element != null && element.enclosingElement is ClassElement ||
469 element == null && location.isQualified) { 487 element == null && location.isQualified) {
470 bool inGetterContext = node.inGetterContext(); 488 bool inGetterContext = node.inGetterContext();
471 bool inSetterContext = node.inSetterContext(); 489 bool inSetterContext = node.inSetterContext();
472 if (inGetterContext && inSetterContext) { 490 if (inGetterContext && inSetterContext) {
473 recordRelationship( 491 recordRelationshipIndexable(
474 nameElement, IndexConstants.IS_READ_WRITTEN_BY, location); 492 indexableName, IndexConstants.IS_READ_WRITTEN_BY, location);
475 } else if (inGetterContext) { 493 } else if (inGetterContext) {
476 recordRelationship(nameElement, IndexConstants.IS_READ_BY, location); 494 recordRelationshipIndexable(
495 indexableName, IndexConstants.IS_READ_BY, location);
477 } else if (inSetterContext) { 496 } else if (inSetterContext) {
478 recordRelationship(nameElement, IndexConstants.IS_WRITTEN_BY, location); 497 recordRelationshipIndexable(
498 indexableName, IndexConstants.IS_WRITTEN_BY, location);
479 } 499 }
480 } 500 }
481 // this.field parameter 501 // this.field parameter
482 if (element is FieldFormalParameterElement) { 502 if (element is FieldFormalParameterElement) {
483 RelationshipImpl relationship = peekElement().element == element 503 RelationshipImpl relationship = peekElement().element == element
484 ? IndexConstants.IS_WRITTEN_BY 504 ? IndexConstants.IS_WRITTEN_BY
485 : IndexConstants.IS_REFERENCED_BY; 505 : IndexConstants.IS_REFERENCED_BY;
486 recordRelationship(element.field, relationship, location); 506 recordRelationshipElement(element.field, relationship, location);
487 return; 507 return;
488 } 508 }
489 // record specific relations 509 // record specific relations
490 if (element is ClassElement || 510 if (element is ClassElement ||
491 element is FunctionElement || 511 element is FunctionElement ||
492 element is FunctionTypeAliasElement || 512 element is FunctionTypeAliasElement ||
493 element is LabelElement || 513 element is LabelElement ||
494 element is MethodElement || 514 element is MethodElement ||
495 element is PropertyAccessorElement || 515 element is PropertyAccessorElement ||
496 element is PropertyInducingElement || 516 element is PropertyInducingElement ||
497 element is TypeParameterElement) { 517 element is TypeParameterElement) {
498 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); 518 recordRelationshipElement(
519 element, IndexConstants.IS_REFERENCED_BY, location);
499 } else if (element is PrefixElement) { 520 } else if (element is PrefixElement) {
500 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); 521 recordRelationshipElement(
522 element, IndexConstants.IS_REFERENCED_BY, location);
501 _recordImportElementReferenceWithPrefix(node); 523 _recordImportElementReferenceWithPrefix(node);
502 } else if (element is ParameterElement || element is LocalVariableElement) { 524 } else if (element is ParameterElement || element is LocalVariableElement) {
503 bool inGetterContext = node.inGetterContext(); 525 bool inGetterContext = node.inGetterContext();
504 bool inSetterContext = node.inSetterContext(); 526 bool inSetterContext = node.inSetterContext();
505 if (inGetterContext && inSetterContext) { 527 if (inGetterContext && inSetterContext) {
506 recordRelationship( 528 recordRelationshipElement(
507 element, IndexConstants.IS_READ_WRITTEN_BY, location); 529 element, IndexConstants.IS_READ_WRITTEN_BY, location);
508 } else if (inGetterContext) { 530 } else if (inGetterContext) {
509 recordRelationship(element, IndexConstants.IS_READ_BY, location); 531 recordRelationshipElement(element, IndexConstants.IS_READ_BY, location);
510 } else if (inSetterContext) { 532 } else if (inSetterContext) {
511 recordRelationship(element, IndexConstants.IS_WRITTEN_BY, location); 533 recordRelationshipElement(
534 element, IndexConstants.IS_WRITTEN_BY, location);
512 } else { 535 } else {
513 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); 536 recordRelationshipElement(
537 element, IndexConstants.IS_REFERENCED_BY, location);
514 } 538 }
515 } 539 }
516 _recordImportElementReferenceWithoutPrefix(node); 540 _recordImportElementReferenceWithoutPrefix(node);
517 super.visitSimpleIdentifier(node); 541 super.visitSimpleIdentifier(node);
518 } 542 }
519 543
520 @override 544 @override
521 visitSuperConstructorInvocation(SuperConstructorInvocation node) { 545 visitSuperConstructorInvocation(SuperConstructorInvocation node) {
522 ConstructorElement element = node.staticElement; 546 ConstructorElement element = node.staticElement;
523 LocationImpl location; 547 LocationImpl location;
524 if (node.constructorName != null) { 548 if (node.constructorName != null) {
525 int start = node.period.offset; 549 int start = node.period.offset;
526 int end = node.constructorName.end; 550 int end = node.constructorName.end;
527 location = _createLocationForOffset(start, end - start); 551 location = _createLocationForOffset(start, end - start);
528 } else { 552 } else {
529 int start = node.superKeyword.end; 553 int start = node.superKeyword.end;
530 location = _createLocationForOffset(start, 0); 554 location = _createLocationForOffset(start, 0);
531 } 555 }
532 recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location); 556 recordRelationshipElement(
557 element, IndexConstants.IS_REFERENCED_BY, location);
533 super.visitSuperConstructorInvocation(node); 558 super.visitSuperConstructorInvocation(node);
534 } 559 }
535 560
536 @override 561 @override
537 visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) { 562 visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
538 VariableDeclarationList variables = node.variables; 563 VariableDeclarationList variables = node.variables;
539 for (VariableDeclaration variableDeclaration in variables.variables) { 564 for (VariableDeclaration variableDeclaration in variables.variables) {
540 Element element = variableDeclaration.element; 565 Element element = variableDeclaration.element;
541 _recordTopLevelElementDefinition(element); 566 _recordTopLevelElementDefinition(element);
542 } 567 }
(...skipping 12 matching lines...) Expand all
555 } 580 }
556 581
557 @override 582 @override
558 visitVariableDeclaration(VariableDeclaration node) { 583 visitVariableDeclaration(VariableDeclaration node) {
559 VariableElement element = node.element; 584 VariableElement element = node.element;
560 // record declaration 585 // record declaration
561 { 586 {
562 SimpleIdentifier name = node.name; 587 SimpleIdentifier name = node.name;
563 LocationImpl location = _createLocationForNode(name); 588 LocationImpl location = _createLocationForNode(name);
564 location = _getLocationWithExpressionType(location, node.initializer); 589 location = _getLocationWithExpressionType(location, node.initializer);
565 recordRelationship(element, IndexConstants.NAME_IS_DEFINED_BY, location); 590 recordRelationshipElement(
591 element, IndexConstants.NAME_IS_DEFINED_BY, location);
566 } 592 }
567 // visit 593 // visit
568 enterScope(element); 594 enterScope(element);
569 try { 595 try {
570 super.visitVariableDeclaration(node); 596 super.visitVariableDeclaration(node);
571 } finally { 597 } finally {
572 _exitScope(); 598 _exitScope();
573 } 599 }
574 } 600 }
575 601
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 return; 708 return;
683 } 709 }
684 if (_isIdentifierInPrefixedIdentifier(node)) { 710 if (_isIdentifierInPrefixedIdentifier(node)) {
685 return; 711 return;
686 } 712 }
687 Element element = node.staticElement; 713 Element element = node.staticElement;
688 ImportElement importElement = internal_getImportElement( 714 ImportElement importElement = internal_getImportElement(
689 _libraryElement, null, element, _importElementsMap); 715 _libraryElement, null, element, _importElementsMap);
690 if (importElement != null) { 716 if (importElement != null) {
691 LocationImpl location = _createLocationForOffset(node.offset, 0); 717 LocationImpl location = _createLocationForOffset(node.offset, 0);
692 recordRelationship( 718 recordRelationshipElement(
693 importElement, IndexConstants.IS_REFERENCED_BY, location); 719 importElement, IndexConstants.IS_REFERENCED_BY, location);
694 } 720 }
695 } 721 }
696 722
697 /** 723 /**
698 * Records [ImportElement] that declares given prefix and imports library with element used 724 * Records [ImportElement] that declares given prefix and imports library with element used
699 * with given prefix node. 725 * with given prefix node.
700 */ 726 */
701 void _recordImportElementReferenceWithPrefix(SimpleIdentifier prefixNode) { 727 void _recordImportElementReferenceWithPrefix(SimpleIdentifier prefixNode) {
702 ImportElementInfo info = internal_getImportElementInfo(prefixNode); 728 ImportElementInfo info = internal_getImportElementInfo(prefixNode);
703 if (info != null) { 729 if (info != null) {
704 int offset = prefixNode.offset; 730 int offset = prefixNode.offset;
705 int length = info.periodEnd - offset; 731 int length = info.periodEnd - offset;
706 LocationImpl location = _createLocationForOffset(offset, length); 732 LocationImpl location = _createLocationForOffset(offset, length);
707 recordRelationship( 733 recordRelationshipElement(
708 info.element, IndexConstants.IS_REFERENCED_BY, location); 734 info.element, IndexConstants.IS_REFERENCED_BY, location);
709 } 735 }
710 } 736 }
711 737
712 /** 738 /**
713 * Records reference to defining [CompilationUnitElement] of the given 739 * Records reference to defining [CompilationUnitElement] of the given
714 * [LibraryElement]. 740 * [LibraryElement].
715 */ 741 */
716 void _recordLibraryReference(UriBasedDirective node, LibraryElement library) { 742 void _recordLibraryReference(UriBasedDirective node, LibraryElement library) {
717 if (library != null) { 743 if (library != null) {
718 LocationImpl location = _createLocationForNode(node.uri); 744 LocationImpl location = _createLocationForNode(node.uri);
719 recordRelationship(library.definingCompilationUnit, 745 recordRelationshipElement(library.definingCompilationUnit,
720 IndexConstants.IS_REFERENCED_BY, location); 746 IndexConstants.IS_REFERENCED_BY, location);
721 } 747 }
722 } 748 }
723 749
724 /** 750 /**
725 * Record reference to the given operator [Element] and name. 751 * Record reference to the given operator [Element] and name.
726 */ 752 */
727 void _recordOperatorReference(Token operator, Element element) { 753 void _recordOperatorReference(Token operator, Element element) {
728 // prepare location 754 // prepare location
729 LocationImpl location = _createLocationForToken(operator, element != null); 755 LocationImpl location = _createLocationForToken(operator, element != null);
730 // record name reference 756 // record name reference
731 { 757 {
732 String name = operator.lexeme; 758 String name = operator.lexeme;
733 if (name == "++") { 759 if (name == "++") {
734 name = "+"; 760 name = "+";
735 } 761 }
736 if (name == "--") { 762 if (name == "--") {
737 name = "-"; 763 name = "-";
738 } 764 }
739 if (StringUtilities.endsWithChar(name, 0x3D) && name != "==") { 765 if (StringUtilities.endsWithChar(name, 0x3D) && name != "==") {
740 name = name.substring(0, name.length - 1); 766 name = name.substring(0, name.length - 1);
741 } 767 }
742 Element nameElement = new NameElement(name); 768 IndexableName indexableName = new IndexableName(name);
743 recordRelationship(nameElement, IndexConstants.IS_INVOKED_BY, location); 769 recordRelationshipIndexable(
770 indexableName, IndexConstants.IS_INVOKED_BY, location);
744 } 771 }
745 // record element reference 772 // record element reference
746 if (element != null) { 773 if (element != null) {
747 recordRelationship(element, IndexConstants.IS_INVOKED_BY, location); 774 recordRelationshipElement(
775 element, IndexConstants.IS_INVOKED_BY, location);
748 } 776 }
749 } 777 }
750 778
751 /** 779 /**
752 * Records a relation between [superNode] and its [Element]. 780 * Records a relation between [superNode] and its [Element].
753 */ 781 */
754 void _recordSuperType(TypeName superNode, RelationshipImpl relationship) { 782 void _recordSuperType(TypeName superNode, RelationshipImpl relationship) {
755 if (superNode != null) { 783 if (superNode != null) {
756 Identifier superName = superNode.name; 784 Identifier superName = superNode.name;
757 if (superName != null) { 785 if (superName != null) {
758 Element superElement = superName.staticElement; 786 Element superElement = superName.staticElement;
759 recordRelationship( 787 recordRelationshipElement(
760 superElement, relationship, _createLocationForNode(superNode)); 788 superElement, relationship, _createLocationForNode(superNode));
761 } 789 }
762 } 790 }
763 } 791 }
764 792
765 /** 793 /**
766 * Records the [Element] definition in the library and universe. 794 * Records the [Element] definition in the library and universe.
767 */ 795 */
768 void _recordTopLevelElementDefinition(Element element) { 796 void _recordTopLevelElementDefinition(Element element) {
769 if (element != null) { 797 if (element != null) {
770 IndexableElement indexable = new IndexableElement(element); 798 IndexableElement indexable = new IndexableElement(element);
771 int offset = indexable.offset; 799 int offset = indexable.offset;
772 int length = indexable.length; 800 int length = indexable.length;
773 LocationImpl location = new LocationImpl(indexable, offset, length); 801 LocationImpl location = new LocationImpl(indexable, offset, length);
774 recordRelationship(_libraryElement, IndexConstants.DEFINES, location); 802 recordRelationshipElement(
803 _libraryElement, IndexConstants.DEFINES, location);
775 _store.recordTopLevelDeclaration(element); 804 _store.recordTopLevelDeclaration(element);
776 } 805 }
777 } 806 }
778 807
779 /** 808 /**
780 * If the given expression has resolved type, returns the new location with th is type. 809 * If the given expression has resolved type, returns the new location with th is type.
781 * 810 *
782 * [location] - the base location 811 * [location] - the base location
783 * [expression] - the expression assigned at the given location 812 * [expression] - the expression assigned at the given location
784 */ 813 */
(...skipping 14 matching lines...) Expand all
799 } 828 }
800 829
801 /** 830 /**
802 * @return `true` if given "node" is part of [PrefixedIdentifier] "prefix.node ". 831 * @return `true` if given "node" is part of [PrefixedIdentifier] "prefix.node ".
803 */ 832 */
804 static bool _isIdentifierInPrefixedIdentifier(SimpleIdentifier node) { 833 static bool _isIdentifierInPrefixedIdentifier(SimpleIdentifier node) {
805 AstNode parent = node.parent; 834 AstNode parent = node.parent;
806 return parent is PrefixedIdentifier && parent.identifier == node; 835 return parent is PrefixedIdentifier && parent.identifier == node;
807 } 836 }
808 } 837 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698