Migrate class_element_test
Change-Id: I73be4cd6d5bf218d6fa63a2ef1abdbfa2b063ac8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400743
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/analyzer/analyzer_use_new_elements.txt b/pkg/analyzer/analyzer_use_new_elements.txt
index aa6eeb4..a387c4a 100644
--- a/pkg/analyzer/analyzer_use_new_elements.txt
+++ b/pkg/analyzer/analyzer_use_new_elements.txt
@@ -182,7 +182,6 @@
test/src/dart/constant/evaluation_test.dart
test/src/dart/constant/has_type_parameter_reference_test.dart
test/src/dart/constant/value_test.dart
-test/src/dart/element/class_element_test.dart
test/src/dart/element/display_string_test.dart
test/src/dart/element/element_test.dart
test/src/dart/element/function_type_test.dart
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 7e94b9b..3106251 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -662,6 +662,40 @@
@override
bool get isDartCoreObject => firstFragment.isDartCoreObject;
+ bool get isEnumLike {
+ // Must be a concrete class.
+ if (isAbstract) {
+ return false;
+ }
+
+ // With only private non-factory constructors.
+ for (var constructor in constructors) {
+ if (constructor.isPublic || constructor.isFactory) {
+ return false;
+ }
+ }
+
+ // With 2+ static const fields with the type of this class.
+ var numberOfElements = 0;
+ for (var field in fields) {
+ if (field.isStatic && field.isConst && field.type == thisType) {
+ numberOfElements++;
+ }
+ }
+ if (numberOfElements < 2) {
+ return false;
+ }
+
+ // No subclasses in the library.
+ for (var class_ in library2.classes) {
+ if (class_.supertype?.element3 == this) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
@override
bool get isExhaustive => firstFragment.isExhaustive;
@@ -5724,6 +5758,10 @@
}
}
+ Iterable<PropertyAccessorElement2> _implementationsOfGetter2(String name) {
+ return _implementationsOfGetter(name).map((e) => e.asElement2);
+ }
+
/// Return an iterable containing all of the implementations of a method with
/// the given [name] that are defined in this class and any superclass of this
/// class (but not in interfaces).
@@ -5756,6 +5794,10 @@
}
}
+ Iterable<MethodElement2> _implementationsOfMethod2(String name) {
+ return _implementationsOfMethod(name).map((e) => e.asElement2);
+ }
+
/// Return an iterable containing all of the implementations of a setter with
/// the given [name] that are defined in this class and any superclass of this
/// class (but not in interfaces).
@@ -5788,6 +5830,10 @@
augmented = augmented.firstFragment.supertype?.element.augmented;
}
}
+
+ Iterable<PropertyAccessorElement2> _implementationsOfSetter2(String name) {
+ return _implementationsOfSetter(name).map((e) => e.asElement2);
+ }
}
abstract class InterfaceElementImpl extends InstanceElementImpl
@@ -6358,6 +6404,41 @@
firstFragment.instantiate(
typeArguments: typeArguments, nullabilitySuffix: nullabilitySuffix);
+ PropertyAccessorElement2? lookUpInheritedConcreteGetter(
+ String getterName, LibraryElement2 library) {
+ return _implementationsOfGetter2(getterName).firstWhereOrNull((getter) =>
+ !getter.isAbstract &&
+ !getter.isStatic &&
+ getter.isAccessibleIn2(library) &&
+ getter.enclosingElement2 != this);
+ }
+
+ MethodElement2? lookUpInheritedConcreteMethod(
+ String methodName, LibraryElement2 library) {
+ return _implementationsOfMethod2(methodName).firstWhereOrNull((method) =>
+ !method.isAbstract &&
+ !method.isStatic &&
+ method.isAccessibleIn2(library) &&
+ method.enclosingElement2 != this);
+ }
+
+ PropertyAccessorElement2? lookUpInheritedConcreteSetter(
+ String setterName, LibraryElement2 library) {
+ return _implementationsOfSetter2(setterName).firstWhereOrNull((setter) =>
+ !setter.isAbstract &&
+ !setter.isStatic &&
+ setter.isAccessibleIn2(library) &&
+ setter.enclosingElement2 != this);
+ }
+
+ MethodElement2? lookUpInheritedMethod(
+ String methodName, LibraryElement2 library) {
+ return _implementationsOfMethod2(methodName).firstWhereOrNull((method) =>
+ !method.isStatic &&
+ method.isAccessibleIn2(library) &&
+ method.enclosingElement2 != this);
+ }
+
@override
MethodElement2? lookUpInheritedMethod2({
required String methodName,
diff --git a/pkg/analyzer/test/src/dart/element/class_element_test.dart b/pkg/analyzer/test/src/dart/element/class_element_test.dart
index 7270987..233634d 100644
--- a/pkg/analyzer/test/src/dart/element/class_element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/class_element_test.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:test/test.dart';
@@ -29,14 +29,14 @@
A._foo();
}
''');
- _assertIsEnumLike(findElement.class_('A'), false);
+ _assertIsEnumLike(findElement2.class_('A'), false);
}
test_isEnumLike_false_constructors_hasPublic() async {
await assertNoErrorsInCode('''
class A {}
''');
- _assertIsEnumLike(findElement.class_('A'), false);
+ _assertIsEnumLike(findElement2.class_('A'), false);
}
test_isEnumLike_false_fields_empty() async {
@@ -49,14 +49,14 @@
A._();
}
''');
- _assertIsEnumLike(findElement.class_('A'), false);
+ _assertIsEnumLike(findElement2.class_('A'), false);
}
test_isEnumLike_false_isAbstract() async {
await assertNoErrorsInCode('''
abstract class A {}
''');
- _assertIsEnumLike(findElement.class_('A'), false);
+ _assertIsEnumLike(findElement2.class_('A'), false);
}
test_isEnumLike_false_isExtended() async {
@@ -71,7 +71,7 @@
B() : super._();
}
''');
- _assertIsEnumLike(findElement.class_('A'), false);
+ _assertIsEnumLike(findElement2.class_('A'), false);
}
test_isEnumLike_true() async {
@@ -82,7 +82,7 @@
const A._();
}
''');
- _assertIsEnumLike(findElement.class_('A'), true);
+ _assertIsEnumLike(findElement2.class_('A'), true);
}
test_isEnumLike_true_hasInstanceField() async {
@@ -94,7 +94,7 @@
const A._(this.f);
}
''');
- _assertIsEnumLike(findElement.class_('A'), true);
+ _assertIsEnumLike(findElement2.class_('A'), true);
}
test_isEnumLike_true_hasSuperclass() async {
@@ -109,7 +109,7 @@
const B._();
}
''');
- _assertIsEnumLike(findElement.class_('B'), true);
+ _assertIsEnumLike(findElement2.class_('B'), true);
}
test_isEnumLike_true_hasSyntheticField() async {
@@ -121,7 +121,7 @@
int get foo => 0;
}
''');
- _assertIsEnumLike(findElement.class_('A'), true);
+ _assertIsEnumLike(findElement2.class_('A'), true);
}
test_isEnumLike_true_isImplemented() async {
@@ -134,7 +134,7 @@
class B implements A {}
''');
- _assertIsEnumLike(findElement.class_('A'), true);
+ _assertIsEnumLike(findElement2.class_('A'), true);
}
test_lookUpInheritedConcreteGetter_declared() async {
@@ -143,7 +143,7 @@
int get foo => 0;
}
''');
- var A = findElement.class_('A');
+ var A = findElement2.class_('A');
assertElementNull(
A._lookUpInheritedConcreteGetter('foo'),
);
@@ -159,10 +159,10 @@
int get foo => 0;
}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'A'),
+ declaration: findElement2.getter('foo', of: 'A'),
);
}
@@ -180,7 +180,7 @@
int get _foo => 0;
}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteGetter('_foo'),
);
@@ -198,10 +198,10 @@
int get _foo => 0;
}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('_foo'),
- declaration: findElement.getter('_foo', of: 'A'),
+ declaration: findElement2.getter('_foo', of: 'A'),
);
}
@@ -215,7 +215,7 @@
int get foo => 0;
}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteGetter('foo'),
);
@@ -229,10 +229,10 @@
class B extends A {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'A'),
+ declaration: findElement2.getter('foo', of: 'A'),
);
}
@@ -244,7 +244,7 @@
abstract class B extends A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteGetter('foo'),
);
@@ -262,10 +262,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'M'),
+ declaration: findElement2.getter('foo', of: 'M'),
);
}
@@ -285,10 +285,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'M2'),
+ declaration: findElement2.getter('foo', of: 'M2'),
);
}
@@ -306,10 +306,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'M1'),
+ declaration: findElement2.getter('foo', of: 'M1'),
);
}
@@ -323,10 +323,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'A'),
+ declaration: findElement2.getter('foo', of: 'A'),
);
}
@@ -344,10 +344,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'M1'),
+ declaration: findElement2.getter('foo', of: 'M1'),
);
}
@@ -363,10 +363,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'A'),
+ declaration: findElement2.getter('foo', of: 'A'),
);
}
@@ -378,7 +378,7 @@
class B extends A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteGetter('foo'),
);
@@ -396,10 +396,10 @@
class C extends A implements B {}
''');
- var C = findElement.class_('C');
- assertElement2(
+ var C = findElement2.class_('C');
+ assertElement3(
C._lookUpInheritedConcreteGetter('foo'),
- declaration: findElement.getter('foo', of: 'A'),
+ declaration: findElement2.getter('foo', of: 'A'),
);
}
@@ -411,7 +411,7 @@
abstract class B implements A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteGetter('foo'),
);
@@ -425,7 +425,7 @@
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 27, 1),
]);
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteGetter('foo'),
);
@@ -435,7 +435,7 @@
await assertNoErrorsInCode('''
class A {}
''');
- var A = findElement.class_('A');
+ var A = findElement2.class_('A');
assertElementNull(
A._lookUpInheritedConcreteGetter('foo'),
);
@@ -447,7 +447,7 @@
void foo() {}
}
''');
- var A = findElement.class_('A');
+ var A = findElement2.class_('A');
assertElementNull(
A._lookUpInheritedConcreteMethod('foo'),
);
@@ -463,10 +463,10 @@
void foo() {}
}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -484,7 +484,7 @@
void _foo() {}
}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteMethod('_foo'),
);
@@ -502,10 +502,10 @@
void _foo() {}
}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('_foo'),
- declaration: findElement.method('_foo', of: 'A'),
+ declaration: findElement2.method('_foo', of: 'A'),
);
}
@@ -519,7 +519,7 @@
void foo() {}
}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteMethod('foo'),
);
@@ -533,10 +533,10 @@
class B extends A {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -548,7 +548,7 @@
abstract class B extends A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteMethod('foo'),
);
@@ -566,10 +566,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'M'),
+ declaration: findElement2.method('foo', of: 'M'),
);
}
@@ -589,10 +589,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'M2'),
+ declaration: findElement2.method('foo', of: 'M2'),
);
}
@@ -610,10 +610,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'M1'),
+ declaration: findElement2.method('foo', of: 'M1'),
);
}
@@ -627,10 +627,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -648,10 +648,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'M1'),
+ declaration: findElement2.method('foo', of: 'M1'),
);
}
@@ -667,10 +667,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -682,7 +682,7 @@
class B extends A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteMethod('foo'),
);
@@ -700,10 +700,10 @@
class C extends A implements B {}
''');
- var C = findElement.class_('C');
- assertElement2(
+ var C = findElement2.class_('C');
+ assertElement3(
C._lookUpInheritedConcreteMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -715,7 +715,7 @@
abstract class B implements A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteMethod('foo'),
);
@@ -729,7 +729,7 @@
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 27, 1),
]);
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteMethod('foo'),
);
@@ -739,7 +739,7 @@
await assertNoErrorsInCode('''
class A {}
''');
- var A = findElement.class_('A');
+ var A = findElement2.class_('A');
assertElementNull(
A._lookUpInheritedConcreteMethod('foo'),
);
@@ -751,7 +751,7 @@
set foo(int _) {}
}
''');
- var A = findElement.class_('A');
+ var A = findElement2.class_('A');
assertElementNull(
A._lookUpInheritedConcreteSetter('foo'),
);
@@ -767,10 +767,10 @@
set foo(int _) {}
}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'A'),
+ declaration: findElement2.setter('foo', of: 'A'),
);
}
@@ -788,7 +788,7 @@
set _foo(int _) {}
}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteSetter('_foo'),
);
@@ -806,10 +806,10 @@
set _foo(int _) {}
}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('_foo'),
- declaration: findElement.setter('_foo', of: 'A'),
+ declaration: findElement2.setter('_foo', of: 'A'),
);
}
@@ -823,7 +823,7 @@
set foo(int _) {}
}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteSetter('foo'),
);
@@ -837,10 +837,10 @@
class B extends A {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'A'),
+ declaration: findElement2.setter('foo', of: 'A'),
);
}
@@ -852,7 +852,7 @@
abstract class B extends A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteSetter('foo'),
);
@@ -870,10 +870,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'M'),
+ declaration: findElement2.setter('foo', of: 'M'),
);
}
@@ -893,10 +893,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'M2'),
+ declaration: findElement2.setter('foo', of: 'M2'),
);
}
@@ -914,10 +914,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'M1'),
+ declaration: findElement2.setter('foo', of: 'M1'),
);
}
@@ -931,10 +931,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'A'),
+ declaration: findElement2.setter('foo', of: 'A'),
);
}
@@ -952,10 +952,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'M1'),
+ declaration: findElement2.setter('foo', of: 'M1'),
);
}
@@ -971,10 +971,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'A'),
+ declaration: findElement2.setter('foo', of: 'A'),
);
}
@@ -986,7 +986,7 @@
class B extends A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteSetter('foo'),
);
@@ -1004,10 +1004,10 @@
class C extends A implements B {}
''');
- var C = findElement.class_('C');
- assertElement2(
+ var C = findElement2.class_('C');
+ assertElement3(
C._lookUpInheritedConcreteSetter('foo'),
- declaration: findElement.setter('foo', of: 'A'),
+ declaration: findElement2.setter('foo', of: 'A'),
);
}
@@ -1019,7 +1019,7 @@
abstract class B implements A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteSetter('foo'),
);
@@ -1033,7 +1033,7 @@
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 27, 1),
]);
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedConcreteSetter('foo'),
);
@@ -1043,7 +1043,7 @@
await assertNoErrorsInCode('''
class A {}
''');
- var A = findElement.class_('A');
+ var A = findElement2.class_('A');
assertElementNull(
A._lookUpInheritedConcreteSetter('foo'),
);
@@ -1055,7 +1055,7 @@
void foo() {}
}
''');
- var A = findElement.class_('A');
+ var A = findElement2.class_('A');
assertElementNull(
A._lookUpInheritedMethod('foo'),
);
@@ -1071,10 +1071,10 @@
void foo() {}
}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -1092,7 +1092,7 @@
void _foo() {}
}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedMethod('_foo'),
);
@@ -1110,10 +1110,10 @@
void _foo() {}
}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedMethod('_foo'),
- declaration: findElement.method('_foo', of: 'A'),
+ declaration: findElement2.method('_foo', of: 'A'),
);
}
@@ -1127,7 +1127,7 @@
void foo() {}
}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedMethod('foo'),
);
@@ -1141,10 +1141,10 @@
class B extends A {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -1160,10 +1160,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedMethod('foo'),
- declaration: findElement.method('foo', of: 'M'),
+ declaration: findElement2.method('foo', of: 'M'),
);
}
@@ -1183,10 +1183,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedMethod('foo'),
- declaration: findElement.method('foo', of: 'M2'),
+ declaration: findElement2.method('foo', of: 'M2'),
);
}
@@ -1204,10 +1204,10 @@
class B extends A with M1, M2 {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedMethod('foo'),
- declaration: findElement.method('foo', of: 'M1'),
+ declaration: findElement2.method('foo', of: 'M1'),
);
}
@@ -1221,10 +1221,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -1240,10 +1240,10 @@
class B extends A with M {}
''');
- var B = findElement.class_('B');
- assertElement2(
+ var B = findElement2.class_('B');
+ assertElement3(
B._lookUpInheritedMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -1255,7 +1255,7 @@
class B extends A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedMethod('foo'),
);
@@ -1273,10 +1273,10 @@
class C extends A implements B {}
''');
- var C = findElement.class_('C');
- assertElement2(
+ var C = findElement2.class_('C');
+ assertElement3(
C._lookUpInheritedMethod('foo'),
- declaration: findElement.method('foo', of: 'A'),
+ declaration: findElement2.method('foo', of: 'A'),
);
}
@@ -1288,7 +1288,7 @@
abstract class B implements A {}
''');
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedMethod('foo'),
);
@@ -1302,7 +1302,7 @@
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 27, 1),
]);
- var B = findElement.class_('B');
+ var B = findElement2.class_('B');
assertElementNull(
B._lookUpInheritedMethod('foo'),
);
@@ -1312,31 +1312,35 @@
await assertNoErrorsInCode('''
class A {}
''');
- var A = findElement.class_('A');
+ var A = findElement2.class_('A');
assertElementNull(
A._lookUpInheritedMethod('foo'),
);
}
- static void _assertIsEnumLike(ClassElement element, bool expected) {
- expect((element as ClassElementImpl).isEnumLike, expected);
+ static void _assertIsEnumLike(ClassElement2 element, bool expected) {
+ expect((element as ClassElementImpl2).isEnumLike, expected);
}
}
-extension on ClassElement {
- PropertyAccessorElement? _lookUpInheritedConcreteGetter(String name) {
- return lookUpInheritedConcreteGetter(name, library);
+extension on ClassElement2 {
+ PropertyAccessorElement2? _lookUpInheritedConcreteGetter(String name) {
+ return (this as InterfaceElementImpl2)
+ .lookUpInheritedConcreteGetter(name, library2);
}
- MethodElement? _lookUpInheritedConcreteMethod(String name) {
- return lookUpInheritedConcreteMethod(name, library);
+ MethodElement2? _lookUpInheritedConcreteMethod(String name) {
+ return (this as InterfaceElementImpl2)
+ .lookUpInheritedConcreteMethod(name, library2);
}
- PropertyAccessorElement? _lookUpInheritedConcreteSetter(String name) {
- return lookUpInheritedConcreteSetter(name, library);
+ PropertyAccessorElement2? _lookUpInheritedConcreteSetter(String name) {
+ return (this as InterfaceElementImpl2)
+ .lookUpInheritedConcreteSetter(name, library2);
}
- MethodElement? _lookUpInheritedMethod(String name) {
- return lookUpInheritedMethod(name, library);
+ MethodElement2? _lookUpInheritedMethod(String name) {
+ return (this as InterfaceElementImpl2)
+ .lookUpInheritedMethod(name, library2);
}
}
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index dea3f93..4af67a9 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -7,6 +7,7 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/constant/value.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/error/error.dart';
@@ -167,6 +168,28 @@
}
}
+ void assertElement3(
+ Object? nodeOrElement, {
+ required Element2 declaration,
+ Map<String, String> substitution = const {},
+ }) {
+ Element2? element;
+ if (nodeOrElement is AstNode) {
+ element = getNodeElement2(nodeOrElement);
+ } else {
+ element = nodeOrElement as Element2?;
+ }
+
+ var actualDeclaration = element?.baseElement;
+ expect(actualDeclaration, same(declaration));
+
+ if (element is Member) {
+ assertSubstitution((element as Member).substitution, substitution);
+ } else if (substitution.isNotEmpty) {
+ fail('Expected to be a Member: (${element.runtimeType}) $element');
+ }
+ }
+
void assertElementNull(Object? nodeOrElement) {
Element? element;
if (nodeOrElement is AstNode) {
@@ -466,6 +489,57 @@
}
}
+ Element2? getNodeElement2(AstNode node) {
+ if (node is Annotation) {
+ return node.element2;
+ } else if (node is AssignmentExpression) {
+ return node.element;
+ } else if (node is BinaryExpression) {
+ return node.element;
+ } else if (node is ConstructorReference) {
+ return node.constructorName.element;
+ } else if (node is Declaration) {
+ return node.declaredFragment?.element;
+ } else if (node is ExtensionOverride) {
+ return node.element2;
+ } else if (node is FormalParameter) {
+ return node.declaredFragment?.element;
+ } else if (node is FunctionExpressionInvocation) {
+ return node.element;
+ } else if (node is FunctionReference) {
+ var function = node.function.unParenthesized;
+ if (function is Identifier) {
+ return function.element;
+ } else if (function is PropertyAccess) {
+ return function.propertyName.element;
+ } else if (function is ConstructorReference) {
+ return function.constructorName.element;
+ } else {
+ fail('Unsupported node: (${function.runtimeType}) $function');
+ }
+ } else if (node is Identifier) {
+ return node.element;
+ } else if (node is ImplicitCallReference) {
+ return node.element;
+ } else if (node is IndexExpression) {
+ return node.element;
+ } else if (node is InstanceCreationExpression) {
+ return node.constructorName.element;
+ } else if (node is MethodInvocation) {
+ return node.methodName.element;
+ } else if (node is PostfixExpression) {
+ return node.element;
+ } else if (node is PrefixExpression) {
+ return node.element;
+ } else if (node is PropertyAccess) {
+ return node.propertyName.element;
+ } else if (node is NamedType) {
+ return node.element2;
+ } else {
+ fail('Unsupported node: (${node.runtimeType}) $node');
+ }
+ }
+
ExpectedContextMessage message(File file, int offset, int length) =>
ExpectedContextMessage(file, offset, length);