Use textual dumps for index.
Change-Id: I400d675a5c3a6c1c046583538873c0dec2f1e2e0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/282901
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 319a3a7..94f4853 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -7,14 +7,17 @@
import 'package:analyzer/src/dart/analysis/index.dart';
import 'package:analyzer/src/summary/idl.dart';
import 'package:analyzer/src/test_utilities/find_element.dart';
+import 'package:collection/collection.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../resolution/context_collection_resolution.dart';
+import '../resolution/node_text_expectations.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(IndexTest);
+ defineReflectiveTests(UpdateNodeTextExpectations);
});
}
@@ -33,6 +36,15 @@
@reflectiveTest
class IndexTest extends PubPackageResolutionTest with _IndexMixin {
+ void assertElementIndexText(Element element, String expected) {
+ var actual = _getRelationsText(element);
+ if (actual != expected) {
+ print(actual);
+ NodeTextExpectationsCollector.add(actual);
+ }
+ expect(actual, expected);
+ }
+
test_fieldFormalParameter_noSuchField() async {
await _indexTestUnit('''
class B<T> {
@@ -57,15 +69,22 @@
class C4 implements B2 {}
class M extends Object with A {}
''');
- ClassElement classElementA = findElement.class_('A');
- assertThat(classElementA)
- ..isAncestorOf('B1 extends A', length: 2)
- ..isAncestorOf('B2 implements A', length: 2)
- ..isAncestorOf('C1 extends B1', length: 2)
- ..isAncestorOf('C2 extends B2', length: 2)
- ..isAncestorOf('C3 implements B1', length: 2)
- ..isAncestorOf('C4 implements B2', length: 2)
- ..isAncestorOf('M extends Object with A', length: 1);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+17 + 2: IS_ANCESTOR_OF
+28 + 1: IS_EXTENDED_BY
+28 + 1: IS_REFERENCED_BY
+39 + 2: IS_ANCESTOR_OF
+53 + 1: IS_IMPLEMENTED_BY
+53 + 1: IS_REFERENCED_BY
+64 + 2: IS_ANCESTOR_OF
+87 + 2: IS_ANCESTOR_OF
+110 + 2: IS_ANCESTOR_OF
+136 + 2: IS_ANCESTOR_OF
+162 + 1: IS_ANCESTOR_OF
+184 + 1: IS_MIXED_IN_BY
+184 + 1: IS_REFERENCED_BY
+''');
}
test_hasAncestor_ClassTypeAlias() async {
@@ -75,12 +94,24 @@
class C1 = Object with A;
class C2 = Object with B;
''');
- ClassElement classElementA = findElement.class_('A');
- ClassElement classElementB = findElement.class_('B');
- assertThat(classElementA)
- ..isAncestorOf('C1 = Object with A', length: 2)
- ..isAncestorOf('C2 = Object with B', length: 2);
- assertThat(classElementB).isAncestorOf('C2 = Object with B', length: 2);
+
+ final elementA = findElement.class_('A');
+ assertElementIndexText(elementA, r'''
+17 + 1: IS_ANCESTOR_OF
+27 + 1: IS_EXTENDED_BY
+27 + 1: IS_REFERENCED_BY
+38 + 2: IS_ANCESTOR_OF
+55 + 1: IS_MIXED_IN_BY
+55 + 1: IS_REFERENCED_BY
+64 + 2: IS_ANCESTOR_OF
+''');
+
+ final elementB = findElement.class_('B');
+ assertElementIndexText(elementB, r'''
+64 + 2: IS_ANCESTOR_OF
+81 + 1: IS_MIXED_IN_BY
+81 + 1: IS_REFERENCED_BY
+''');
}
test_hasAncestor_MixinDeclaration() async {
@@ -94,14 +125,21 @@
mixin M4 implements B {}
mixin M5 on M2 {}
''');
- ClassElement classElementA = findElement.class_('A');
- assertThat(classElementA)
- ..isAncestorOf('B extends A', length: 1)
- ..isAncestorOf('M1 on A', length: 2)
- ..isAncestorOf('M2 on B', length: 2)
- ..isAncestorOf('M3 implements A', length: 2)
- ..isAncestorOf('M4 implements B', length: 2)
- ..isAncestorOf('M5 on M2', length: 2);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+17 + 1: IS_ANCESTOR_OF
+27 + 1: IS_EXTENDED_BY
+27 + 1: IS_REFERENCED_BY
+39 + 2: IS_ANCESTOR_OF
+45 + 1: CONSTRAINS
+45 + 1: IS_REFERENCED_BY
+56 + 2: IS_ANCESTOR_OF
+73 + 2: IS_ANCESTOR_OF
+87 + 1: IS_IMPLEMENTED_BY
+87 + 1: IS_REFERENCED_BY
+98 + 2: IS_ANCESTOR_OF
+123 + 2: IS_ANCESTOR_OF
+''');
}
test_isConstraint_MixinDeclaration_onClause() async {
@@ -109,10 +147,12 @@
class A {} // 1
mixin M on A {} // 2
''');
- ClassElement elementA = findElement.class_('A');
- assertThat(elementA)
- ..isConstraintAt('A {} // 2', false)
- ..isReferencedAt('A {} // 2', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+22 + 1: IS_ANCESTOR_OF
+27 + 1: CONSTRAINS
+27 + 1: IS_REFERENCED_BY
+''');
}
test_isExtendedBy_ClassDeclaration_isQualified() async {
@@ -123,19 +163,26 @@
import 'lib.dart' as p;
class B extends p.A {} // 2
''');
- ClassElement elementA = importFindLib().class_('A');
- assertThat(elementA)
- ..isExtendedAt('A {} // 2', true)
- ..hasPrefixes('p');
+ final element = importFindLib().class_('A');
+ assertElementIndexText(element, r'''
+30 + 1: IS_ANCESTOR_OF
+42 + 1: IS_EXTENDED_BY qualified
+42 + 1: IS_REFERENCED_BY qualified
+42 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isExtendedBy_ClassDeclaration_Object() async {
await _indexTestUnit('''
class A {}
''');
- ClassElement elementA = findElement.class_('A');
+ final elementA = findElement.class_('A');
final elementObject = elementA.supertype!.element;
- assertThat(elementObject).isExtendedAt('A {}', true, length: 0);
+ assertElementIndexText(elementObject, r'''
+6 + 1: IS_ANCESTOR_OF
+6 + 0: IS_EXTENDED_BY qualified
+''');
}
test_isExtendedBy_ClassDeclaration_TypeAliasElement() async {
@@ -144,10 +191,11 @@
typedef B = A<int>;
class C extends B {}
''');
- var B = findElement.typeAlias('B');
- assertThat(B)
- ..isExtendedAt('B {}', false)
- ..isReferencedAt('B {}', false);
+ final element = findElement.typeAlias('B');
+ assertElementIndexText(element, r'''
+50 + 1: IS_EXTENDED_BY
+50 + 1: IS_REFERENCED_BY
+''');
}
test_isExtendedBy_ClassTypeAlias() async {
@@ -156,10 +204,12 @@
class B {}
class C = A with B;
''');
- ClassElement elementA = findElement.class_('A');
- assertThat(elementA)
- ..isExtendedAt('A with', false)
- ..isReferencedAt('A with', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+28 + 1: IS_ANCESTOR_OF
+32 + 1: IS_EXTENDED_BY
+32 + 1: IS_REFERENCED_BY
+''');
}
test_isExtendedBy_ClassTypeAlias_isQualified() async {
@@ -171,11 +221,14 @@
class B {}
class C = p.A with B;
''');
- ClassElement elementA = importFindLib().class_('A');
- assertThat(elementA)
- ..isExtendedAt('A with', true)
- ..isReferencedAt('A with', true)
- ..hasPrefixes('p');
+ final element = importFindLib().class_('A');
+ assertElementIndexText(element, r'''
+41 + 1: IS_ANCESTOR_OF
+47 + 1: IS_EXTENDED_BY qualified
+47 + 1: IS_REFERENCED_BY qualified
+47 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isImplementedBy_ClassDeclaration() async {
@@ -183,10 +236,12 @@
class A {} // 1
class B implements A {} // 2
''');
- ClassElement elementA = findElement.class_('A');
- assertThat(elementA)
- ..isImplementedAt('A {} // 2', false)
- ..isReferencedAt('A {} // 2', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+22 + 1: IS_ANCESTOR_OF
+35 + 1: IS_IMPLEMENTED_BY
+35 + 1: IS_REFERENCED_BY
+''');
}
test_isImplementedBy_ClassDeclaration_isQualified() async {
@@ -197,11 +252,14 @@
import 'lib.dart' as p;
class B implements p.A {} // 2
''');
- ClassElement elementA = importFindLib().class_('A');
- assertThat(elementA)
- ..isImplementedAt('A {} // 2', true)
- ..isReferencedAt('A {} // 2', true)
- ..hasPrefixes('p');
+ final element = importFindLib().class_('A');
+ assertElementIndexText(element, r'''
+30 + 1: IS_ANCESTOR_OF
+45 + 1: IS_IMPLEMENTED_BY qualified
+45 + 1: IS_REFERENCED_BY qualified
+45 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isImplementedBy_ClassDeclaration_TypeAliasElement() async {
@@ -210,10 +268,11 @@
typedef B = A<int>;
class C implements B {}
''');
- var B = findElement.typeAlias('B');
- assertThat(B)
- ..isImplementedAt('B {}', false)
- ..isReferencedAt('B {}', false);
+ final element = findElement.typeAlias('B');
+ assertElementIndexText(element, r'''
+53 + 1: IS_IMPLEMENTED_BY
+53 + 1: IS_REFERENCED_BY
+''');
}
test_isImplementedBy_ClassTypeAlias() async {
@@ -222,10 +281,12 @@
class B {} // 2
class C = Object with A implements B; // 3
''');
- ClassElement elementB = findElement.class_('B');
- assertThat(elementB)
- ..isImplementedAt('B; // 3', false)
- ..isReferencedAt('B; // 3', false);
+ final element = findElement.class_('B');
+ assertElementIndexText(element, r'''
+38 + 1: IS_ANCESTOR_OF
+67 + 1: IS_IMPLEMENTED_BY
+67 + 1: IS_REFERENCED_BY
+''');
}
test_isImplementedBy_enum() async {
@@ -235,10 +296,12 @@
v;
}
''');
- ClassElement elementA = findElement.class_('A');
- assertThat(elementA)
- ..isImplementedAt('A { // 2', false)
- ..isReferencedAt('A { // 2', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+21 + 1: IS_ANCESTOR_OF
+34 + 1: IS_IMPLEMENTED_BY
+34 + 1: IS_REFERENCED_BY
+''');
}
test_isImplementedBy_MixinDeclaration_implementsClause() async {
@@ -246,10 +309,12 @@
class A {} // 1
mixin M implements A {} // 2
''');
- ClassElement elementA = findElement.class_('A');
- assertThat(elementA)
- ..isImplementedAt('A {} // 2', false)
- ..isReferencedAt('A {} // 2', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+22 + 1: IS_ANCESTOR_OF
+35 + 1: IS_IMPLEMENTED_BY
+35 + 1: IS_REFERENCED_BY
+''');
}
test_isInvokedBy_FunctionElement() async {
@@ -264,10 +329,11 @@
pref.foo(); // q
foo(); // nq
}''');
- FunctionElement element = importFindLib().topFunction('foo');
- assertThat(element)
- ..isInvokedAt('foo(); // q', true)
- ..isInvokedAt('foo(); // nq', false);
+ final element = importFindLib().topFunction('foo');
+ assertElementIndexText(element, r'''
+64 + 3: IS_INVOKED_BY qualified
+78 + 3: IS_INVOKED_BY
+''');
}
test_isInvokedBy_FunctionElement_synthetic_loadLibrary() async {
@@ -279,9 +345,11 @@
}
''');
LibraryElement mathLib = findElement.import('dart:math').importedLibrary!;
- FunctionElement element = mathLib.loadLibraryFunction;
- assertThat(element).isInvokedAt('loadLibrary(); // 1', true);
- assertThat(element).isInvokedAt('loadLibrary(); // 2', true);
+ final element = mathLib.loadLibraryFunction;
+ assertElementIndexText(element, r'''
+55 + 11: IS_INVOKED_BY qualified
+82 + 11: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_MethodElement_class() async {
@@ -293,10 +361,11 @@
foo(); // nq
}
}''');
- MethodElement element = findElement.method('foo');
- assertThat(element)
- ..isInvokedAt('foo(); // q', true)
- ..isInvokedAt('foo(); // nq', false);
+ final element = findElement.method('foo');
+ assertElementIndexText(element, r'''
+43 + 3: IS_INVOKED_BY qualified
+59 + 3: IS_INVOKED_BY
+''');
}
test_isInvokedBy_MethodElement_enum() async {
@@ -313,10 +382,12 @@
e.foo(); // q2
}
''');
- assertThat(findElement.method('foo'))
- ..isInvokedAt('foo(); // q1', true)
- ..isInvokedAt('foo(); // nq', false)
- ..isInvokedAt('foo(); // q2', true);
+ final element = findElement.method('foo');
+ assertElementIndexText(element, r'''
+54 + 3: IS_INVOKED_BY qualified
+71 + 3: IS_INVOKED_BY
+108 + 3: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_MethodElement_ofNamedExtension_instance() async {
@@ -329,8 +400,10 @@
0.foo();
}
''');
- MethodElement element = findElement.method('foo');
- assertThat(element).isInvokedAt('foo();', true);
+ final element = findElement.method('foo');
+ assertElementIndexText(element, r'''
+55 + 3: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_MethodElement_ofNamedExtension_static() async {
@@ -343,8 +416,10 @@
E.foo();
}
''');
- MethodElement element = findElement.method('foo');
- assertThat(element).isInvokedAt('foo();', true);
+ final element = findElement.method('foo');
+ assertElementIndexText(element, r'''
+62 + 3: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_MethodElement_ofUnnamedExtension_instance() async {
@@ -364,12 +439,14 @@
''');
var intMethod = findNode.methodDeclaration('foo() {} // int');
- assertThat(intMethod.declaredElement!)
- .isInvokedAt('foo(); // int ref', true);
+ assertElementIndexText(intMethod.declaredElement!, r'''
+111 + 3: IS_INVOKED_BY qualified
+''');
var doubleMethod = findNode.methodDeclaration('foo() {} // double');
- assertThat(doubleMethod.declaredElement!)
- .isInvokedAt('foo(); // double ref', true);
+ assertElementIndexText(doubleMethod.declaredElement!, r'''
+137 + 3: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_MethodElement_propagatedType() async {
@@ -382,8 +459,10 @@
a.foo();
}
''');
- MethodElement element = findElement.method('foo');
- assertThat(element).isInvokedAt('foo();', true);
+ final element = findElement.method('foo');
+ assertElementIndexText(element, r'''
+57 + 3: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_operator_class_binary() async {
@@ -398,12 +477,13 @@
a++;
}
''');
- MethodElement element = findElement.method('+');
- assertThat(element)
- ..isInvokedAt('+ 1', true, length: 1)
- ..isInvokedAt('+= 2', true, length: 2)
- ..isInvokedAt('++a', true, length: 2)
- ..isInvokedAt('++;', true, length: 2);
+ final element = findElement.method('+');
+ assertElementIndexText(element, r'''
+65 + 1: IS_INVOKED_BY qualified
+75 + 2: IS_INVOKED_BY qualified
+83 + 2: IS_INVOKED_BY qualified
+91 + 2: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_operator_class_index() async {
@@ -417,10 +497,15 @@
a[1] = 42;
}
''');
- MethodElement readElement = findElement.method('[]');
- MethodElement writeElement = findElement.method('[]=');
- assertThat(readElement).isInvokedAt('[0]', true, length: 1);
- assertThat(writeElement).isInvokedAt('[1]', true, length: 1);
+ final readElement = findElement.method('[]');
+ assertElementIndexText(readElement, r'''
+85 + 1: IS_INVOKED_BY qualified
+''');
+
+ final writeElement = findElement.method('[]=');
+ assertElementIndexText(writeElement, r'''
+94 + 1: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_operator_class_prefix() async {
@@ -432,8 +517,10 @@
print(~a);
}
''');
- MethodElement element = findElement.method('~');
- assertThat(element).isInvokedAt('~a', true, length: 1);
+ final element = findElement.method('~');
+ assertElementIndexText(element, r'''
+60 + 1: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_operator_enum_binary() async {
@@ -449,11 +536,13 @@
e++;
}
''');
- assertThat(findElement.method('+'))
- ..isInvokedAt('+ 1', true, length: 1)
- ..isInvokedAt('+= 2', true, length: 2)
- ..isInvokedAt('++e', true, length: 2)
- ..isInvokedAt('++;', true, length: 2);
+ final element = findElement.method('+');
+ assertElementIndexText(element, r'''
+64 + 1: IS_INVOKED_BY qualified
+73 + 2: IS_INVOKED_BY qualified
+81 + 2: IS_INVOKED_BY qualified
+89 + 2: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_operator_enum_index() async {
@@ -468,10 +557,15 @@
e[1] = 42;
}
''');
- MethodElement readElement = findElement.method('[]');
- MethodElement writeElement = findElement.method('[]=');
- assertThat(readElement).isInvokedAt('[0]', true, length: 1);
- assertThat(writeElement).isInvokedAt('[1]', true, length: 1);
+ final readElement = findElement.method('[]');
+ assertElementIndexText(readElement, r'''
+108 + 1: IS_INVOKED_BY qualified
+''');
+
+ final writeElement = findElement.method('[]=');
+ assertElementIndexText(writeElement, r'''
+116 + 1: IS_INVOKED_BY qualified
+''');
}
test_isInvokedBy_operator_enum_prefix() async {
@@ -484,8 +578,10 @@
~e;
}
''');
- MethodElement element = findElement.method('~');
- assertThat(element).isInvokedAt('~e', true, length: 1);
+ final element = findElement.method('~');
+ assertElementIndexText(element, r'''
+57 + 1: IS_INVOKED_BY qualified
+''');
}
test_isMixedBy_ClassDeclaration_TypeAliasElement() async {
@@ -494,10 +590,11 @@
typedef B = A<int>;
class C extends Object with B {}
''');
- var B = findElement.typeAlias('B');
- assertThat(B)
- ..isMixedInAt('B {}', false)
- ..isReferencedAt('B {}', false);
+ final element = findElement.typeAlias('B');
+ assertElementIndexText(element, r'''
+62 + 1: IS_MIXED_IN_BY
+62 + 1: IS_REFERENCED_BY
+''');
}
test_isMixedInBy_ClassDeclaration_class() async {
@@ -505,10 +602,12 @@
class A {} // 1
class B extends Object with A {} // 2
''');
- ClassElement elementA = findElement.class_('A');
- assertThat(elementA)
- ..isMixedInAt('A {} // 2', false)
- ..isReferencedAt('A {} // 2', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+22 + 1: IS_ANCESTOR_OF
+44 + 1: IS_MIXED_IN_BY
+44 + 1: IS_REFERENCED_BY
+''');
}
test_isMixedInBy_ClassDeclaration_isQualified() async {
@@ -519,10 +618,15 @@
import 'lib.dart' as p;
class B extends Object with p.A {} // 2
''');
- ClassElement elementA = importFindLib().class_('A');
- assertThat(elementA)
- ..isMixedInAt('A {} // 2', true)
- ..hasPrefixes('p');
+ final element = importFindLib().class_('A');
+ // TODO(scheglov) Why do we have duplicate?
+ assertElementIndexText(element, r'''
+30 + 1: IS_ANCESTOR_OF
+54 + 1: IS_MIXED_IN_BY qualified
+54 + 1: IS_REFERENCED_BY qualified
+54 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isMixedInBy_ClassDeclaration_mixin() async {
@@ -530,10 +634,12 @@
mixin A {} // 1
class B extends Object with A {} // 2
''');
- final elementA = findElement.mixin('A');
- assertThat(elementA)
- ..isMixedInAt('A {} // 2', false)
- ..isReferencedAt('A {} // 2', false);
+ final element = findElement.mixin('A');
+ assertElementIndexText(element, r'''
+22 + 1: IS_ANCESTOR_OF
+44 + 1: IS_MIXED_IN_BY
+44 + 1: IS_REFERENCED_BY
+''');
}
test_isMixedInBy_ClassTypeAlias_class() async {
@@ -541,8 +647,12 @@
class A {} // 1
class B = Object with A; // 2
''');
- ClassElement elementA = findElement.class_('A');
- assertThat(elementA).isMixedInAt('A; // 2', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+22 + 1: IS_ANCESTOR_OF
+38 + 1: IS_MIXED_IN_BY
+38 + 1: IS_REFERENCED_BY
+''');
}
test_isMixedInBy_ClassTypeAlias_mixin() async {
@@ -550,8 +660,12 @@
mixin A {} // 1
class B = Object with A; // 2
''');
- final elementA = findElement.mixin('A');
- assertThat(elementA).isMixedInAt('A; // 2', false);
+ final element = findElement.mixin('A');
+ assertElementIndexText(element, r'''
+22 + 1: IS_ANCESTOR_OF
+38 + 1: IS_MIXED_IN_BY
+38 + 1: IS_REFERENCED_BY
+''');
}
test_isMixedInBy_enum_mixin() async {
@@ -561,9 +675,12 @@
v
}
''');
- assertThat(findElement.mixin('M'))
- ..isMixedInAt('M { // 2', false)
- ..isReferencedAt('M { // 2', false);
+ final element = findElement.mixin('M');
+ assertElementIndexText(element, r'''
+21 + 1: IS_ANCESTOR_OF
+28 + 1: IS_MIXED_IN_BY
+28 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedAt_PropertyAccessorElement_field_call() async {
@@ -575,10 +692,11 @@
field(); // nq
}
}''');
- FieldElement field = findElement.field('field');
- assertThat(field.getter!)
- ..isReferencedAt('field(); // q', true)
- ..isReferencedAt('field(); // nq', false);
+ final element = findElement.getter('field');
+ assertElementIndexText(element, r'''
+45 + 5: IS_REFERENCED_BY qualified
+63 + 5: IS_REFERENCED_BY
+''');
}
test_isReferencedAt_PropertyAccessorElement_getter_call() async {
@@ -591,9 +709,10 @@
}
}''');
PropertyAccessorElement element = findElement.getter('ggg');
- assertThat(element)
- ..isReferencedAt('ggg(); // q', true)
- ..isReferencedAt('ggg(); // nq', false);
+ assertElementIndexText(element, r'''
+51 + 3: IS_REFERENCED_BY qualified
+67 + 3: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement() async {
@@ -608,13 +727,14 @@
print(A.field); // 3
}
''');
- ClassElement element = findElement.class_('A');
- assertThat(element)
- ..isReferencedAt('A p) {', false)
- ..isReferencedAt('A v;', false)
- ..isReferencedAt('A(); // 2', false)
- ..isReferencedAt('A.field = 1;', false)
- ..isReferencedAt('A.field); // 3', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+39 + 1: IS_REFERENCED_BY
+48 + 1: IS_REFERENCED_BY
+59 + 1: IS_REFERENCED_BY
+71 + 1: IS_REFERENCED_BY
+92 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement_enum() async {
@@ -627,10 +747,11 @@
}
''');
final element = findElement.enum_('MyEnum');
- assertThat(element)
- ..isReferencedAt('MyEnum p) {', false)
- ..isReferencedAt('MyEnum v;', false)
- ..isReferencedAt('MyEnum.a;', false);
+ assertElementIndexText(element, r'''
+24 + 6: IS_REFERENCED_BY
+38 + 6: IS_REFERENCED_BY
+50 + 6: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement_fromExtension() async {
@@ -639,8 +760,10 @@
extension E on A<int> {}
''');
- ClassElement element = findElement.class_('A');
- assertThat(element).isReferencedAt('A<int>', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+30 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement_implicitNew() async {
@@ -649,8 +772,10 @@
void f() {
A(); // invalid code, but still a reference
}''');
- ClassElement element = findElement.class_('A');
- assertThat(element).isReferencedAt('A();', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+24 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement_inGenericAnnotation() async {
@@ -662,9 +787,12 @@
@A<A>()
void f() {}
''');
- assertThat(findElement.class_('A'))
- ..isReferencedAt('A<A', false)
- ..isReferencedAt('A>()', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+21 + 1: IS_REFERENCED_BY
+30 + 1: IS_REFERENCED_BY
+32 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement_inRecordTypeAnnotation_named() async {
@@ -673,7 +801,10 @@
void f(({int foo, A bar}) r) {}
''');
- assertThat(findElement.class_('A')).isReferencedAt('A bar', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+30 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement_inRecordTypeAnnotation_positional() async {
@@ -682,7 +813,10 @@
void f((int, A) r) {}
''');
- assertThat(findElement.class_('A')).isReferencedAt('A)', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+25 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement_inTypeAlias() async {
@@ -691,8 +825,14 @@
typedef B = A<int>;
''');
- assertThat(findElement.class_('A')).isReferencedAt('A<int', false);
- assertThat(intElement).isReferencedAt('int>;', false);
+ final elementA = findElement.class_('A');
+ assertElementIndexText(elementA, r'''
+27 + 1: IS_REFERENCED_BY
+''');
+
+ assertElementIndexText(intElement, r'''
+29 + 3: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassElement_invocation_isQualified() async {
@@ -704,10 +844,11 @@
void f() {
p.A(); // invalid code, but still a reference
}''');
- Element element = importFindLib().class_('A');
- assertThat(element)
- ..isReferencedAt('A();', true)
- ..hasPrefixes('p');
+ final element = importFindLib().class_('A');
+ assertElementIndexText(element, r'''
+39 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isReferencedBy_ClassElement_invocationTypeArgument() async {
@@ -718,8 +859,10 @@
f<A>();
}
''');
- ClassElement element = findElement.class_('A');
- assertThat(element).isReferencedAt('A>();', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+41 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_ClassTypeAlias() async {
@@ -730,10 +873,11 @@
B v;
}
''');
- ClassElement element = findElement.class_('B');
- assertThat(element)
- ..isReferencedAt('B p) {', false)
- ..isReferencedAt('B v;', false);
+ final element = findElement.class_('B');
+ assertElementIndexText(element, r'''
+43 + 1: IS_REFERENCED_BY
+52 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_commentReference() async {
@@ -746,8 +890,11 @@
/// An [A].
void f(A a) {}
''');
- var element = findElement.function('f').parameters[0].type.element!;
- assertThat(element).isReferencedAt('A]', false, length: 1);
+ final element = findElement.function('f').parameters[0].type.element!;
+ assertElementIndexText(element, r'''
+28 + 1: IS_REFERENCED_BY
+39 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_commentReference_withPrefix() async {
@@ -760,10 +907,12 @@
/// A [p.A].
void f(p.A a) {}
''');
- var element = findElement.function('f').parameters[0].type.element!;
- assertThat(element)
- ..isReferencedAt('A]', true, length: 1)
- ..hasPrefixes('p');
+ final element = findElement.function('f').parameters[0].type.element!;
+ assertElementIndexText(element, r'''
+34 + 1: IS_REFERENCED_BY qualified
+47 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isReferencedBy_CompilationUnitElement_export() async {
@@ -773,8 +922,11 @@
await _indexTestUnit('''
export 'lib.dart';
''');
- var element = findElement.export('package:test/lib.dart').exportedLibrary!;
- assertThat(element).isReferencedAt("'lib.dart'", true, length: 10);
+ final element =
+ findElement.export('package:test/lib.dart').exportedLibrary!;
+ assertElementIndexText(element, r'''
+7 + 10: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_CompilationUnitElement_import() async {
@@ -784,8 +936,11 @@
await _indexTestUnit('''
import 'lib.dart';
''');
- var element = findElement.import('package:test/lib.dart').importedLibrary!;
- assertThat(element).isReferencedAt("'lib.dart'", true, length: 10);
+ final element =
+ findElement.import('package:test/lib.dart').importedLibrary!;
+ assertElementIndexText(element, r'''
+7 + 10: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_CompilationUnitElement_part() async {
@@ -794,8 +949,10 @@
library my_lib;
part 'my_unit.dart';
''');
- var element = findElement.part('package:test/my_unit.dart');
- assertThat(element).isReferencedAt("'my_unit.dart';", true, length: 14);
+ final element = findElement.part('package:test/my_unit.dart');
+ assertElementIndexText(element, r'''
+21 + 14: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_CompilationUnitElement_part_inPart() async {
@@ -826,15 +983,15 @@
A.foo; // 6
}
''');
- var element = findElement.constructor('foo');
- assertThat(element)
- ..hasRelationCount(6)
- ..isReferencedAt('.foo] 1', true, length: 4)
- ..isInvokedAt('.foo(); // 2', true, length: 4)
- ..isInvokedAt('.foo(); // 3', true, length: 4)
- ..isReferencedAt('.foo; // 4', true, length: 4)
- ..isInvokedAt('.foo(); // 5', true, length: 4)
- ..isReferencedByConstructorTearOffAt('.foo; // 6', length: 4);
+ final element = findElement.constructor('foo');
+ assertElementIndexText(element, r'''
+10 + 4: IS_REFERENCED_BY qualified
+57 + 4: IS_INVOKED_BY qualified
+105 + 4: IS_INVOKED_BY qualified
+139 + 4: IS_REFERENCED_BY qualified
+166 + 4: IS_INVOKED_BY qualified
+182 + 4: IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF qualified
+''');
}
test_isReferencedBy_ConstructorElement_class_namedOnlyWithDot() async {
@@ -862,10 +1019,15 @@
A.bar();
}
''');
- var constA = findElement.unnamedConstructor('A');
- var constA_bar = findElement.constructor('bar');
- assertThat(constA).isInvokedAt('(); // 2', true, length: 0);
- assertThat(constA_bar).isInvokedAt('.bar(); // 1', true, length: 4);
+ final constructor = findElement.unnamedConstructor('A');
+ assertElementIndexText(constructor, r'''
+51 + 0: IS_INVOKED_BY qualified
+''');
+
+ final constructor_bar = findElement.constructor('bar');
+ assertElementIndexText(constructor_bar, r'''
+22 + 4: IS_INVOKED_BY qualified
+''');
}
test_isReferencedBy_ConstructorElement_class_unnamed_declared() async {
@@ -884,15 +1046,15 @@
A.new; // 6
}
''');
- var element = findElement.unnamedConstructor('A');
- assertThat(element)
- ..hasRelationCount(6)
- ..isReferencedAt('] 1', true, length: 0)
- ..isInvokedAt('(); // 2', true, length: 0)
- ..isInvokedAt('(); // 3', true, length: 0)
- ..isReferencedAt('; // 4', true, length: 0)
- ..isInvokedAt('(); // 5', true, length: 0)
- ..isReferencedByConstructorTearOffAt('.new; // 6', length: 4);
+ final element = findElement.unnamedConstructor('A');
+ assertElementIndexText(element, r'''
+10 + 0: IS_REFERENCED_BY qualified
+51 + 0: IS_INVOKED_BY qualified
+95 + 0: IS_INVOKED_BY qualified
+127 + 0: IS_REFERENCED_BY qualified
+150 + 0: IS_INVOKED_BY qualified
+162 + 4: IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF qualified
+''');
}
test_isReferencedBy_ConstructorElement_class_unnamed_declared_new() async {
@@ -911,15 +1073,15 @@
A.new; // 6
}
''');
- var element = findElement.unnamedConstructor('A');
- assertThat(element)
- ..hasRelationCount(6)
- ..isReferencedAt('] 1', true, length: 0)
- ..isInvokedAt('(); // 2', true, length: 0)
- ..isInvokedAt('(); // 3', true, length: 0)
- ..isReferencedAt('; // 4', true, length: 0)
- ..isInvokedAt('(); // 5', true, length: 0)
- ..isReferencedByConstructorTearOffAt('.new; // 6', length: 4);
+ final element = findElement.unnamedConstructor('A');
+ assertElementIndexText(element, r'''
+10 + 0: IS_REFERENCED_BY qualified
+55 + 0: IS_INVOKED_BY qualified
+99 + 0: IS_INVOKED_BY qualified
+129 + 0: IS_REFERENCED_BY qualified
+152 + 0: IS_INVOKED_BY qualified
+164 + 4: IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF qualified
+''');
}
test_isReferencedBy_ConstructorElement_class_unnamed_synthetic() async {
@@ -935,14 +1097,14 @@
A.new; // 5
}
''');
- var element = findElement.unnamedConstructor('A');
- assertThat(element)
- ..hasRelationCount(5)
- ..isReferencedAt('] 1', true, length: 0)
- ..isInvokedAt('(); // 2', true, length: 0)
- ..isReferencedAt('; // 3', true, length: 0)
- ..isInvokedAt('(); // 4', true, length: 0)
- ..isReferencedByConstructorTearOffAt('.new; // 5', length: 4);
+ final element = findElement.unnamedConstructor('A');
+ assertElementIndexText(element, r'''
+10 + 0: IS_REFERENCED_BY qualified
+58 + 0: IS_INVOKED_BY qualified
+88 + 0: IS_REFERENCED_BY qualified
+111 + 0: IS_INVOKED_BY qualified
+123 + 4: IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF qualified
+''');
}
test_isReferencedBy_ConstructorElement_classTypeAlias() async {
@@ -961,14 +1123,17 @@
new C.named(); // C2
}
''');
- var constA = findElement.unnamedConstructor('A');
- var constA_named = findElement.constructor('named', of: 'A');
- assertThat(constA)
- ..isInvokedAt('(); // B1', true, length: 0)
- ..isInvokedAt('(); // C1', true, length: 0);
- assertThat(constA_named)
- ..isInvokedAt('.named(); // B2', true, length: 6)
- ..isInvokedAt('.named(); // C2', true, length: 6);
+ final constructor = findElement.unnamedConstructor('A');
+ assertElementIndexText(constructor, r'''
+118 + 0: IS_INVOKED_BY qualified
+158 + 0: IS_INVOKED_BY qualified
+''');
+
+ final constructor_named = findElement.constructor('named', of: 'A');
+ assertElementIndexText(constructor_named, r'''
+135 + 6: IS_INVOKED_BY qualified
+175 + 6: IS_INVOKED_BY qualified
+''');
}
test_isReferencedBy_ConstructorElement_classTypeAlias_cycle() async {
@@ -993,12 +1158,12 @@
E.bar() : this.foo(); // 3
}
''');
- var element = findElement.constructor('foo');
- assertThat(element)
- ..hasRelationCount(3)
- ..isReferencedAt('.foo] 1', true, length: 4)
- ..isInvokedAt('.foo(); // 2', true, length: 4)
- ..isInvokedAt('.foo(); // 3', true, length: 4);
+ final element = findElement.constructor('foo');
+ assertElementIndexText(element, r'''
+10 + 4: IS_REFERENCED_BY qualified
+30 + 4: IS_INVOKED_BY qualified
+70 + 4: IS_INVOKED_BY qualified
+''');
}
test_isReferencedBy_ConstructorElement_enum_unnamed_declared() async {
@@ -1012,14 +1177,14 @@
E.other() : this(); // 5
}
''');
- var element = findElement.unnamedConstructor('E');
- assertThat(element)
- ..hasRelationCount(5)
- ..isReferencedAt('] 1', true, length: 0)
- ..isInvokedByEnumConstantWithoutArgumentsAt(', // 2', length: 0)
- ..isInvokedAt('(), // 3', true, length: 0)
- ..isInvokedAt('.new(); // 4', true, length: 4)
- ..isInvokedAt('(); // 5', true, length: 0);
+ final element = findElement.unnamedConstructor('E');
+ assertElementIndexText(element, r'''
+10 + 0: IS_REFERENCED_BY qualified
+27 + 0: IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS qualified
+38 + 0: IS_INVOKED_BY qualified
+51 + 4: IS_INVOKED_BY qualified
+89 + 0: IS_INVOKED_BY qualified
+''');
}
test_isReferencedBy_ConstructorElement_enum_unnamed_declared_new() async {
@@ -1033,14 +1198,14 @@
E.other() : this(); // 5
}
''');
- var element = findElement.unnamedConstructor('E');
- assertThat(element)
- ..hasRelationCount(5)
- ..isReferencedAt('] 1', true, length: 0)
- ..isInvokedByEnumConstantWithoutArgumentsAt(', // 2', length: 0)
- ..isInvokedAt('(), // 3', true, length: 0)
- ..isInvokedAt('.new(); // 4', true, length: 4)
- ..isInvokedAt('(); // 5', true, length: 0);
+ final element = findElement.unnamedConstructor('E');
+ assertElementIndexText(element, r'''
+10 + 0: IS_REFERENCED_BY qualified
+27 + 0: IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS qualified
+38 + 0: IS_INVOKED_BY qualified
+51 + 4: IS_INVOKED_BY qualified
+95 + 0: IS_INVOKED_BY qualified
+''');
}
test_isReferencedBy_ConstructorElement_enum_unnamed_synthetic() async {
@@ -1052,13 +1217,13 @@
v3.new(); // 4
}
''');
- var element = findElement.unnamedConstructor('E');
- assertThat(element)
- ..hasRelationCount(4)
- ..isReferencedAt('] 1', true, length: 0)
- ..isInvokedByEnumConstantWithoutArgumentsAt(', // 2', length: 0)
- ..isInvokedAt('(), // 3', true, length: 0)
- ..isInvokedAt('.new(); // 4', true, length: 4);
+ final element = findElement.unnamedConstructor('E');
+ assertElementIndexText(element, r'''
+10 + 0: IS_REFERENCED_BY qualified
+27 + 0: IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS qualified
+38 + 0: IS_INVOKED_BY qualified
+51 + 4: IS_INVOKED_BY qualified
+''');
}
test_isReferencedBy_DynamicElement() async {
@@ -1081,10 +1246,11 @@
f(E.c);
}
''');
- var element = findElement.function('f').parameters[0].type.element!;
- assertThat(element)
- ..isReferencedAt('E.', false, length: 1)
- ..hasPrefixes('');
+ final element = findElement.function('f').parameters[0].type.element!;
+ assertElementIndexText(element, r'''
+27 + 1: IS_REFERENCED_BY
+38 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_enumConstant_withMultiplePrefixes() async {
@@ -1101,10 +1267,12 @@
f(q.E.c);
}
''');
- var element = findElement.function('f').parameters[0].type.element!;
- assertThat(element)
- ..isReferencedAt('E.', true, length: 1)
- ..hasPrefixes('p,q');
+ final element = findElement.function('f').parameters[0].type.element!;
+ assertElementIndexText(element, r'''
+58 + 1: IS_REFERENCED_BY qualified
+71 + 1: IS_REFERENCED_BY qualified
+Prefixes: p,q
+''');
}
test_isReferencedBy_enumConstant_withPrefix() async {
@@ -1120,10 +1288,12 @@
f(p.E.c);
}
''');
- var element = findElement.function('f').parameters[0].type.element!;
- assertThat(element)
- ..isReferencedAt('E.', true, length: 1)
- ..hasPrefixes('p');
+ final element = findElement.function('f').parameters[0].type.element!;
+ assertElementIndexText(element, r'''
+34 + 1: IS_REFERENCED_BY qualified
+47 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isReferencedBy_ExtensionElement() async {
@@ -1136,8 +1306,10 @@
E(0).foo();
}
''');
- ExtensionElement element = findElement.extension_('E');
- assertThat(element).isReferencedAt('E(0).foo()', false);
+ final element = findElement.extension_('E');
+ assertElementIndexText(element, r'''
+53 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_FieldElement_class() async {
@@ -1156,20 +1328,23 @@
new A(field: 4);
}
''');
- FieldElement field = findElement.field('field');
- PropertyAccessorElement getter = field.getter!;
- PropertyAccessorElement setter = field.setter!;
+ final field = findElement.field('field');
+ final getter = field.getter!;
+ final setter = field.setter!;
- // A()
- assertThat(field)
- ..isWrittenAt('field});', true, length: 5)
- ..hasRelationCount(1);
- // m()
- assertThat(setter).isReferencedAt('field = 2; // nq', false, length: 5);
- assertThat(getter).isReferencedAt('field); // nq', false, length: 5);
- // f()
- assertThat(setter).isReferencedAt('field = 3; // q', true, length: 5);
- assertThat(getter).isReferencedAt('field); // q', true, length: 5);
+ assertElementIndexText(field, r'''
+33 + 5: IS_WRITTEN_BY qualified
+''');
+
+ assertElementIndexText(getter, r'''
+81 + 5: IS_REFERENCED_BY
+145 + 5: IS_REFERENCED_BY qualified
+''');
+
+ assertElementIndexText(setter, r'''
+54 + 5: IS_REFERENCED_BY
+119 + 5: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_FieldElement_class_multiple() async {
@@ -1188,21 +1363,33 @@
''');
// aaa
{
- FieldElement field = findElement.field('aaa');
- PropertyAccessorElement getter = field.getter!;
- PropertyAccessorElement setter = field.setter!;
- assertThat(field).isWrittenAt('aaa, ', true, length: 3);
- assertThat(getter).isReferencedAt('aaa);', false, length: 3);
- assertThat(setter).isReferencedAt('aaa = 1;', false, length: 3);
+ final field = findElement.field('aaa');
+ final getter = field.getter!;
+ final setter = field.setter!;
+ assertElementIndexText(field, r'''
+41 + 3: IS_WRITTEN_BY qualified
+''');
+ assertElementIndexText(getter, r'''
+77 + 3: IS_REFERENCED_BY
+''');
+ assertElementIndexText(setter, r'''
+87 + 3: IS_REFERENCED_BY
+''');
}
// bbb
{
- FieldElement field = findElement.field('bbb');
- PropertyAccessorElement getter = field.getter!;
- PropertyAccessorElement setter = field.setter!;
- assertThat(field).isWrittenAt('bbb) {}', true, length: 3);
- assertThat(getter).isReferencedAt('bbb);', false, length: 3);
- assertThat(setter).isReferencedAt('bbb = 2;', false, length: 3);
+ final field = findElement.field('bbb');
+ final getter = field.getter!;
+ final setter = field.setter!;
+ assertElementIndexText(field, r'''
+51 + 3: IS_WRITTEN_BY qualified
+''');
+ assertElementIndexText(getter, r'''
+106 + 3: IS_REFERENCED_BY
+''');
+ assertElementIndexText(setter, r'''
+116 + 3: IS_REFERENCED_BY
+''');
}
}
@@ -1213,8 +1400,10 @@
int get f => 0;
}
''');
- ClassElement element = findElement.class_('A');
- assertThat(element.getField('f')!).isWrittenAt('f = 42', true);
+ final element = findElement.field('f');
+ assertElementIndexText(element, r'''
+18 + 1: IS_WRITTEN_BY qualified
+''');
}
test_isReferencedBy_FieldElement_class_synthetic_hasGetterSetter() async {
@@ -1225,8 +1414,10 @@
set f(_) {}
}
''');
- ClassElement element = findElement.class_('A');
- assertThat(element.getField('f')!).isWrittenAt('f = 42', true);
+ final element = findElement.field('f');
+ assertElementIndexText(element, r'''
+18 + 1: IS_WRITTEN_BY qualified
+''');
}
test_isReferencedBy_FieldElement_class_synthetic_hasSetter() async {
@@ -1236,8 +1427,10 @@
set f(_) {}
}
''');
- ClassElement element = findElement.class_('A');
- assertThat(element.getField('f')!).isWrittenAt('f = 42', true);
+ final element = findElement.field('f');
+ assertElementIndexText(element, r'''
+18 + 1: IS_WRITTEN_BY qualified
+''');
}
test_isReferencedBy_FieldElement_enum() async {
@@ -1257,20 +1450,23 @@
E(field: 4);
}
''');
- FieldElement field = findElement.field('field');
- PropertyAccessorElement getter = field.getter!;
- PropertyAccessorElement setter = field.setter!;
+ final field = findElement.field('field');
+ final getter = field.getter!;
+ final setter = field.setter!;
- // E()
- assertThat(field)
- ..isWrittenAt('field});', true, length: 5)
- ..hasRelationCount(1);
- // foo()
- assertThat(setter).isReferencedAt('field = 2; // nq', false, length: 5);
- assertThat(getter).isReferencedAt('field; // nq', false, length: 5);
- // f()
- assertThat(setter).isReferencedAt('field = 3; // q', true, length: 5);
- assertThat(getter).isReferencedAt('field; // q', true, length: 5);
+ assertElementIndexText(field, r'''
+62 + 5: IS_WRITTEN_BY qualified
+''');
+
+ assertElementIndexText(getter, r'''
+111 + 5: IS_REFERENCED_BY
+168 + 5: IS_REFERENCED_BY qualified
+''');
+
+ assertElementIndexText(setter, r'''
+90 + 5: IS_REFERENCED_BY
+148 + 5: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_FieldElement_enum_index() async {
@@ -1285,13 +1481,24 @@
print(MyEnum.B);
}
''');
- final enumElement = findElement.enum_('MyEnum');
- assertThat(enumElement.getGetter('values')!)
- .isReferencedAt('values);', true);
- assertThat(typeProvider.enumElement!.getGetter('index')!)
- .isReferencedAt('index);', true);
- assertThat(enumElement.getGetter('A')!).isReferencedAt('A);', true);
- assertThat(enumElement.getGetter('B')!).isReferencedAt('B);', true);
+
+ assertElementIndexText(findElement.getter('values'), r'''
+52 + 6: IS_REFERENCED_BY qualified
+''');
+
+ var index = typeProvider.enumElement!.getGetter('index')!;
+ assertElementIndexText(index, r'''
+78 + 5: IS_REFERENCED_BY qualified
+''');
+
+ assertElementIndexText(findElement.getter('A'), r'''
+76 + 1: IS_REFERENCED_BY qualified
+101 + 1: IS_REFERENCED_BY qualified
+''');
+
+ assertElementIndexText(findElement.getter('B'), r'''
+120 + 1: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_FieldElement_enum_synthetic_hasGetter() async {
@@ -1302,7 +1509,10 @@
int get f => 0;
}
''');
- assertThat(findElement.field('f')).isWrittenAt('f = 42', true);
+ final element = findElement.field('f');
+ assertElementIndexText(element, r'''
+22 + 1: IS_WRITTEN_BY qualified
+''');
}
test_isReferencedBy_FieldElement_enum_synthetic_hasGetterSetter() async {
@@ -1314,7 +1524,10 @@
set f(_) {}
}
''');
- assertThat(findElement.field('f')).isWrittenAt('f = 42', true);
+ final element = findElement.field('f');
+ assertElementIndexText(element, r'''
+22 + 1: IS_WRITTEN_BY qualified
+''');
}
test_isReferencedBy_FieldElement_enum_synthetic_hasSetter() async {
@@ -1325,7 +1538,10 @@
set f(_) {}
}
''');
- assertThat(findElement.field('f')).isWrittenAt('f = 42', true);
+ final element = findElement.field('f');
+ assertElementIndexText(element, r'''
+22 + 1: IS_WRITTEN_BY qualified
+''');
}
test_isReferencedBy_FunctionElement() async {
@@ -1336,10 +1552,11 @@
print(foo());
}
''');
- FunctionElement element = findElement.topFunction('foo');
- assertThat(element)
- ..isReferencedAt('foo);', false)
- ..isInvokedAt('foo());', false);
+ final element = findElement.topFunction('foo');
+ assertElementIndexText(element, r'''
+28 + 3: IS_REFERENCED_BY
+42 + 3: IS_INVOKED_BY
+''');
}
test_isReferencedBy_FunctionElement_with_LibraryElement() async {
@@ -1354,11 +1571,14 @@
''');
var importFind = findElement.importFind('package:test/foo.dart');
- assertThat(importFind.importedLibrary)
- .isReferencedAt('"foo.dart";', true, length: 10);
+ assertElementIndexText(importFind.importedLibrary, r'''
+7 + 10: IS_REFERENCED_BY qualified
+''');
FunctionElement bar = importFind.topFunction('bar');
- assertThat(bar).isInvokedAt('bar();', false);
+ assertElementIndexText(bar, r'''
+32 + 3: IS_INVOKED_BY
+''');
}
test_isReferencedBy_FunctionTypeAliasElement() async {
@@ -1367,8 +1587,10 @@
void f(A p) {
}
''');
- Element element = findElement.typeAlias('A');
- assertThat(element).isReferencedAt('A p) {', false);
+ final element = findElement.typeAlias('A');
+ assertElementIndexText(element, r'''
+20 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_getter_withPrefix() async {
@@ -1384,10 +1606,16 @@
class B extends p.A {}
''');
- var element = findElement.class_('B').supertype!.element;
- assertThat(element)
- ..isReferencedAt('A.', true, length: 1)
- ..hasPrefixes('p');
+ final element = findElement.class_('B').supertype!.element;
+ // TODO(scheglov) Why duplicates?
+ assertElementIndexText(element, r'''
+38 + 1: IS_REFERENCED_BY qualified
+50 + 1: IS_ANCESTOR_OF
+62 + 1: IS_EXTENDED_BY qualified
+62 + 1: IS_REFERENCED_BY qualified
+62 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
/// There was a bug in the AST structure, when single [Comment] was cloned and
@@ -1401,8 +1629,10 @@
/// [A] text
var myVariable = null;
''');
- Element element = findElement.class_('A');
- assertThat(element).isReferencedAt('A] text', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+16 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_MethodElement_class() async {
@@ -1414,10 +1644,11 @@
print(method); // nq
}
}''');
- MethodElement element = findElement.method('method');
- assertThat(element)
- ..isReferencedAt('method); // q', true)
- ..isReferencedAt('method); // nq', false);
+ final element = findElement.method('method');
+ assertElementIndexText(element, r'''
+52 + 6: IS_REFERENCED_BY qualified
+76 + 6: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_MethodElement_enum() async {
@@ -1434,10 +1665,12 @@
e.foo; // q2
}
''');
- assertThat(findElement.method('foo'))
- ..isReferencedAt('foo; // q1', true)
- ..isReferencedAt('foo; // nq', false)
- ..isReferencedAt('foo; // q2', true);
+ final element = findElement.method('foo');
+ assertElementIndexText(element, r'''
+54 + 3: IS_REFERENCED_BY qualified
+69 + 3: IS_REFERENCED_BY
+104 + 3: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_methodInvocation_withPrefix() async {
@@ -1453,10 +1686,16 @@
class B extends p.A {}
''');
- var element = findElement.class_('B').supertype!.element;
- assertThat(element)
- ..isReferencedAt('A.', true, length: 1)
- ..hasPrefixes('p');
+ final element = findElement.class_('B').supertype!.element;
+ // TODO(scheglov) Why duplicates?
+ assertElementIndexText(element, r'''
+39 + 1: IS_REFERENCED_BY qualified
+53 + 1: IS_ANCESTOR_OF
+65 + 1: IS_EXTENDED_BY qualified
+65 + 1: IS_REFERENCED_BY qualified
+65 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isReferencedBy_MultiplyDefinedElement() async {
@@ -1483,8 +1722,10 @@
foo(p: 1);
}
''');
- Element element = findElement.parameter('p');
- assertThat(element).isReferencedAt('p: 1', true);
+ final element = findElement.parameter('p');
+ assertElementIndexText(element, r'''
+33 + 1: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_ParameterElement_genericFunctionType() async {
@@ -1537,8 +1778,10 @@
B({required super.a}); // ref
}
''');
- var element = findElement.unnamedConstructor('A').parameter('a');
- assertThat(element).isReferencedAt('a}); // ref', true, length: 1);
+ final element = findElement.unnamedConstructor('A').parameter('a');
+ assertElementIndexText(element, r'''
+75 + 1: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_ParameterElement_ofConstructor_super_positional() async {
@@ -1550,8 +1793,10 @@
B(super.a); // ref
}
''');
- var element = findElement.unnamedConstructor('A').parameter('a');
- assertThat(element).isReferencedAt('a); // ref', true, length: 1);
+ final element = findElement.unnamedConstructor('A').parameter('a');
+ assertElementIndexText(element, r'''
+54 + 1: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_ParameterElement_optionalNamed_ofConstructor_genericClass() async {
@@ -1564,8 +1809,10 @@
A(test: 0);
}
''');
- Element element = findElement.parameter('test');
- assertThat(element).isReferencedAt('test: 0', true);
+ final element = findElement.parameter('test');
+ assertElementIndexText(element, r'''
+47 + 4: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_ParameterElement_optionalNamed_ofMethod_genericClass() async {
@@ -1578,8 +1825,10 @@
a.foo(test: 0);
}
''');
- Element element = findElement.parameter('test');
- assertThat(element).isReferencedAt('test: 0', true);
+ final element = findElement.parameter('test');
+ assertElementIndexText(element, r'''
+68 + 4: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_ParameterElement_optionalNamed_ofTopFunction() async {
@@ -1590,8 +1839,10 @@
foo(test: 0);
}
''');
- Element element = findElement.parameter('test');
- assertThat(element).isReferencedAt('test: 0', true);
+ final element = findElement.parameter('test');
+ assertElementIndexText(element, r'''
+41 + 4: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_ParameterElement_optionalNamed_ofTopFunction_anywhere() async {
@@ -1602,8 +1853,10 @@
foo(1, test: 0, 2);
}
''');
- Element element = findElement.parameter('test');
- assertThat(element).isReferencedAt('test: 0', true);
+ final element = findElement.parameter('test');
+ assertElementIndexText(element, r'''
+58 + 4: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_ParameterElement_optionalPositional() async {
@@ -1615,10 +1868,10 @@
foo(1); // 2
}
''');
- Element element = findElement.parameter('p');
- assertThat(element)
- ..hasRelationCount(1)
- ..isReferencedAt('1); // 2', true, length: 0);
+ final element = findElement.parameter('p');
+ assertElementIndexText(element, r'''
+40 + 0: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_ParameterElement_requiredNamed_ofTopFunction() async {
@@ -1629,8 +1882,10 @@
foo(test: 0);
}
''');
- Element element = findElement.parameter('test');
- assertThat(element).isReferencedAt('test: 0', true);
+ final element = findElement.parameter('test');
+ assertElementIndexText(element, r'''
+49 + 4: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_PropertyAccessor_ofNamedExtension_instance() async {
@@ -1645,10 +1900,16 @@
0.foo = 0;
}
''');
- PropertyAccessorElement getter = findElement.getter('foo');
- PropertyAccessorElement setter = findElement.setter('foo');
- assertThat(getter).isReferencedAt('foo;', true);
- assertThat(setter).isReferencedAt('foo = 0;', true);
+ final getter = findElement.getter('foo');
+ final setter = findElement.setter('foo');
+
+ assertElementIndexText(getter, r'''
+84 + 3: IS_REFERENCED_BY qualified
+''');
+
+ assertElementIndexText(setter, r'''
+93 + 3: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_PropertyAccessor_ofNamedExtension_static() async {
@@ -1663,10 +1924,16 @@
0.foo = 0;
}
''');
- PropertyAccessorElement getter = findElement.getter('foo');
- PropertyAccessorElement setter = findElement.setter('foo');
- assertThat(getter).isReferencedAt('foo;', true);
- assertThat(setter).isReferencedAt('foo = 0;', true);
+ final getter = findElement.getter('foo');
+ final setter = findElement.setter('foo');
+
+ assertElementIndexText(getter, r'''
+98 + 3: IS_REFERENCED_BY qualified
+''');
+
+ assertElementIndexText(setter, r'''
+107 + 3: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_PropertyAccessor_ofUnnamedExtension_instance() async {
@@ -1691,17 +1958,21 @@
var intGetter = findNode.methodDeclaration('0; // int getter');
var intSetter = findNode.methodDeclaration('{} // int setter');
- assertThat(intGetter.declaredElement!)
- .isReferencedAt('foo; // int getter ref', true);
- assertThat(intSetter.declaredElement!)
- .isReferencedAt('foo = 0; // int setter ref', true);
+ assertElementIndexText(intGetter.declaredElement!, r'''
+214 + 3: IS_REFERENCED_BY qualified
+''');
+ assertElementIndexText(intSetter.declaredElement!, r'''
+241 + 3: IS_REFERENCED_BY qualified
+''');
var doubleGetter = findNode.methodDeclaration('0; // double getter');
var doubleSetter = findNode.methodDeclaration('{} // double setter');
- assertThat(doubleGetter.declaredElement!)
- .isReferencedAt('foo; // double getter ref', true);
- assertThat(doubleSetter.declaredElement!)
- .isReferencedAt('foo = 0; // double setter ref', true);
+ assertElementIndexText(doubleGetter.declaredElement!, r'''
+276 + 3: IS_REFERENCED_BY qualified
+''');
+ assertElementIndexText(doubleSetter.declaredElement!, r'''
+310 + 3: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_setter_withPrefix() async {
@@ -1717,10 +1988,15 @@
class B extends p.A {}
''');
- var element = findElement.class_('B').supertype!.element;
- assertThat(element)
- ..isReferencedAt('A.', true, length: 1)
- ..hasPrefixes('p');
+ final element = findElement.class_('B').supertype!.element;
+ assertElementIndexText(element, r'''
+44 + 1: IS_REFERENCED_BY qualified
+60 + 1: IS_ANCESTOR_OF
+72 + 1: IS_EXTENDED_BY qualified
+72 + 1: IS_REFERENCED_BY qualified
+72 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isReferencedBy_simpleIdentifier_withPrefix() async {
@@ -1734,10 +2010,15 @@
class B extends p.A {}
''');
- var element = findElement.class_('B').supertype!.element;
- assertThat(element)
- ..isReferencedAt('A;', true, length: 1)
- ..hasPrefixes('p');
+ final element = findElement.class_('B').supertype!.element;
+ assertElementIndexText(element, r'''
+35 + 1: IS_REFERENCED_BY qualified
+45 + 1: IS_ANCESTOR_OF
+57 + 1: IS_EXTENDED_BY qualified
+57 + 1: IS_REFERENCED_BY qualified
+57 + 1: IS_REFERENCED_BY qualified
+Prefixes: p
+''');
}
test_isReferencedBy_synthetic_leastUpperBound() async {
@@ -1767,13 +2048,21 @@
print(V); // nq
}''');
TopLevelVariableElement variable = importFindLib().topVar('V');
- assertThat(variable).isReferencedAt('V; // imp', true);
- assertThat(variable.getter!)
- ..isReferencedAt('V); // q', true)
- ..isReferencedAt('V); // nq', false);
- assertThat(variable.setter!)
- ..isReferencedAt('V = 5; // q', true)
- ..isReferencedAt('V = 5; // nq', false);
+
+ assertElementIndexText(variable, r'''
+23 + 1: IS_REFERENCED_BY qualified
+''');
+
+ assertElementIndexText(variable.getter!, r'''
+103 + 1: IS_REFERENCED_BY qualified
+135 + 1: IS_REFERENCED_BY
+Prefixes: pref
+''');
+
+ assertElementIndexText(variable.setter!, r'''
+78 + 1: IS_REFERENCED_BY qualified
+114 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_TopLevelVariableElement_synthetic_hasGetterSetter() async {
@@ -1784,8 +2073,10 @@
await _indexTestUnit('''
import 'lib.dart' show V;
''');
- TopLevelVariableElement element = importFindLib().topVar('V');
- assertThat(element).isReferencedAt('V;', true);
+ final element = importFindLib().topVar('V');
+ assertElementIndexText(element, r'''
+23 + 1: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_TopLevelVariableElement_synthetic_hasSetter() async {
@@ -1795,8 +2086,10 @@
await _indexTestUnit('''
import 'lib.dart' show V;
''');
- TopLevelVariableElement element = importFindLib().topVar('V');
- assertThat(element).isReferencedAt('V;', true);
+ final element = importFindLib().topVar('V');
+ assertElementIndexText(element, r'''
+23 + 1: IS_REFERENCED_BY qualified
+''');
}
test_isReferencedBy_TypeAliasElement() async {
@@ -1816,14 +2109,15 @@
B.method(); // 4
}
''');
- var element = findElement.typeAlias('B');
- assertThat(element)
- ..isReferencedAt('B p) {', false)
- ..isReferencedAt('B v;', false)
- ..isReferencedAt('B(); // 2', false)
- ..isReferencedAt('B.field = 1;', false)
- ..isReferencedAt('B.field; // 3', false)
- ..isReferencedAt('B.method(); // 4', false);
+ final element = findElement.typeAlias('B');
+ assertElementIndexText(element, r'''
+94 + 1: IS_REFERENCED_BY
+103 + 1: IS_REFERENCED_BY
+110 + 1: IS_REFERENCED_BY
+122 + 1: IS_REFERENCED_BY
+137 + 1: IS_REFERENCED_BY
+153 + 1: IS_REFERENCED_BY
+''');
}
test_isReferencedBy_typeInVariableList() async {
@@ -1831,8 +2125,10 @@
class A {}
A myVariable = null;
''');
- Element element = findElement.class_('A');
- assertThat(element).isReferencedAt('A myVariable', false);
+ final element = findElement.class_('A');
+ assertElementIndexText(element, r'''
+11 + 1: IS_REFERENCED_BY
+''');
}
test_isWrittenBy_FieldElement() async {
@@ -1843,10 +2139,11 @@
A.bar() : field = 5;
}
''');
- FieldElement element = findElement.field('field');
- assertThat(element)
- ..isWrittenAt('field})', true, length: 5)
- ..isWrittenAt('field = 5', true, length: 5);
+ final element = findElement.field('field');
+ assertElementIndexText(element, r'''
+37 + 5: IS_WRITTEN_BY qualified
+58 + 5: IS_WRITTEN_BY qualified
+''');
}
test_subtypes_classDeclaration() async {
@@ -2078,109 +2375,54 @@
..isUsed('x += 2;', IndexRelationKind.IS_READ_WRITTEN_BY)
..isUsed('x();', IndexRelationKind.IS_INVOKED_BY);
}
-}
-class _ElementIndexAssert {
- final _IndexMixin test;
- final Element element;
- final List<_Relation> relations;
+ String _getRelationsText(Element element) {
+ final elementId = _findElementId(element);
- _ElementIndexAssert(this.test, this.element, this.relations);
+ final relations = <_Relation>[];
+ for (var i = 0; i < index.usedElementOffsets.length; i++) {
+ if (index.usedElements[i] == elementId) {
+ relations.add(_Relation(
+ index.usedElementKinds[i],
+ index.usedElementOffsets[i],
+ index.usedElementLengths[i],
+ index.usedElementIsQualifiedFlags[i]));
+ }
+ }
- void hasPrefixes(String expectedPrefixes) {
- var id = test._findElementId(element);
- var actualPrefixes = test.index.elementImportPrefixes[id];
- expect(actualPrefixes, expectedPrefixes);
- }
+ final sortedRelations = relations.sorted((a, b) {
+ final byOffset = a.offset - b.offset;
+ if (byOffset != 0) {
+ return byOffset;
+ }
+ return a.kind.name.compareTo(b.kind.name);
+ });
- void hasRelationCount(int expectedCount) {
- expect(relations, hasLength(expectedCount));
- }
+ final buffer = StringBuffer();
+ for (final relation in sortedRelations) {
+ buffer.write(relation.offset);
+ buffer.write(' + ');
+ buffer.write(relation.length);
+ buffer.write(': ');
+ buffer.write(relation.kind.name);
+ if (relation.isQualified) {
+ buffer.write(' qualified');
+ }
+ buffer.writeln();
+ }
- void isAncestorOf(String search, {int? length}) {
- test._assertHasRelation(
- element,
- relations,
- IndexRelationKind.IS_ANCESTOR_OF,
- test._expectedLocation(search, false, length: length));
- }
+ final prefixes = index.elementImportPrefixes[elementId];
+ if (prefixes.isNotEmpty) {
+ buffer.writeln('Prefixes: $prefixes');
+ }
- void isConstraintAt(String search, bool isQualified, {int? length}) {
- test._assertHasRelation(element, relations, IndexRelationKind.CONSTRAINS,
- test._expectedLocation(search, isQualified, length: length));
- }
-
- void isExtendedAt(String search, bool isQualified, {int? length}) {
- test._assertHasRelation(
- element,
- relations,
- IndexRelationKind.IS_EXTENDED_BY,
- test._expectedLocation(search, isQualified, length: length));
- }
-
- void isImplementedAt(String search, bool isQualified, {int? length}) {
- test._assertHasRelation(
- element,
- relations,
- IndexRelationKind.IS_IMPLEMENTED_BY,
- test._expectedLocation(search, isQualified, length: length));
- }
-
- void isInvokedAt(String search, bool isQualified, {int? length}) {
- test._assertHasRelation(element, relations, IndexRelationKind.IS_INVOKED_BY,
- test._expectedLocation(search, isQualified, length: length));
- }
-
- void isInvokedByEnumConstantWithoutArgumentsAt(String search,
- {required int length}) {
- test._assertHasRelation(
- element,
- relations,
- IndexRelationKind.IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
- test._expectedLocation(search, true, length: length),
- );
- }
-
- void isMixedInAt(String search, bool isQualified, {int? length}) {
- test._assertHasRelation(
- element,
- relations,
- IndexRelationKind.IS_MIXED_IN_BY,
- test._expectedLocation(search, isQualified, length: length));
- }
-
- void isReferencedAt(String search, bool isQualified, {int? length}) {
- test._assertHasRelation(
- element,
- relations,
- IndexRelationKind.IS_REFERENCED_BY,
- test._expectedLocation(search, isQualified, length: length));
- }
-
- void isReferencedByConstructorTearOffAt(String search,
- {required int length}) {
- test._assertHasRelation(
- element,
- relations,
- IndexRelationKind.IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF,
- test._expectedLocation(search, true, length: length),
- );
- }
-
- void isWrittenAt(String search, bool isQualified, {int? length}) {
- test._assertHasRelation(element, relations, IndexRelationKind.IS_WRITTEN_BY,
- test._expectedLocation(search, isQualified, length: length));
+ return buffer.toString();
}
}
mixin _IndexMixin on PubPackageResolutionTest {
late AnalysisDriverUnitIndex index;
- _ElementIndexAssert assertThat(Element element) {
- List<_Relation> relations = _getElementRelations(element);
- return _ElementIndexAssert(this, element, relations);
- }
-
_NameIndexAssert assertThatName(String name) {
return _NameIndexAssert(this, name);
}
@@ -2193,24 +2435,6 @@
);
}
- /// Asserts that [index] has an item with the expected properties.
- void _assertHasRelation(
- Element element,
- List<_Relation> relations,
- IndexRelationKind expectedRelationKind,
- ExpectedLocation expectedLocation) {
- for (_Relation relation in relations) {
- if (relation.kind == expectedRelationKind &&
- relation.offset == expectedLocation.offset &&
- relation.length == expectedLocation.length &&
- relation.isQualified == expectedLocation.isQualified) {
- return;
- }
- }
- _failWithIndexDump(
- 'not found\n$element $expectedRelationKind at $expectedLocation');
- }
-
void _assertSubtype(
int i, String superEncoded, String subName, List<String> members) {
expect(index.strings[index.supertypes[i]], superEncoded);
@@ -2297,22 +2521,6 @@
return 0;
}
- /// Return all relations with [element] in [index].
- List<_Relation> _getElementRelations(Element element) {
- int elementId = _findElementId(element);
- List<_Relation> relations = <_Relation>[];
- for (int i = 0; i < index.usedElementOffsets.length; i++) {
- if (index.usedElements[i] == elementId) {
- relations.add(_Relation(
- index.usedElementKinds[i],
- index.usedElementOffsets[i],
- index.usedElementLengths[i],
- index.usedElementIsQualifiedFlags[i]));
- }
- }
- return relations;
- }
-
int _getStringId(String? str) {
if (str == null) {
return index.nullStringId;
diff --git a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
index f9723e7..3e333b4 100644
--- a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
+++ b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
@@ -14,6 +14,7 @@
static const assertMethods = {
'ContextResolutionTest.assertDriverStateString',
'FileResolutionTest.assertStateString',
+ 'IndexTest.assertRelationsText',
'ParserDiagnosticsTest.assertParsedNodeText',
'ResolutionTest.assertParsedNodeText',
'ResolutionTest.assertResolvedNodeText',