Fix analyzer/FE integration of references to class type parameters.
Fixes #33844.
Change-Id: Id73a9af39a7fa699b71ed8825dfd16c3aa90b877
Reviewed-on: https://dart-review.googlesource.com/64981
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 9397292..6d53e7d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -1215,8 +1215,8 @@
} else if (referencedNode is kernel.DynamicType) {
element = DynamicElementImpl.instance;
} else if (referencedNode is kernel.TypeParameter) {
- // TODO(paulberry): find the corresponding element (dartbug.com/33844)
- element = null;
+ element = resynthesizer.getTypeParameter(context, referencedNode,
+ getLocalTypeParameter: _getLocalTypeParameter);
} else if (referencedNode is kernel.InvalidType) {
element = DynamicElementImpl.instance;
} else {
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
index bb24909..deb8881 100644
--- a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
@@ -203,13 +203,6 @@
await super.test_mapValueTypeNotAssignable();
}
- @override
- @failingTest
- test_parameterAssignable_typeSubstitution() {
- // Failed to resolve 1 nodes
- return super.test_parameterAssignable_typeSubstitution();
- }
-
@failingTest
@override
test_parameterAssignable_undefined_null() async {
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
index ffd3480..bfc95d5 100644
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
@@ -283,13 +283,6 @@
@failingTest
@override
- test_unusedElement_method_isUsed_invocation_MemberElement() {
- // Failed to resolve 1 nodes
- return super.test_unusedElement_method_isUsed_invocation_MemberElement();
- }
-
- @failingTest
- @override
test_unusedImport_inComment_libraryDirective() async {
// Expected 0 errors of type HintCode.UNUSED_IMPORT, found 1 (42)
return super.test_unusedImport_inComment_libraryDirective();
diff --git a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
index 56e80b6..4c45c7f 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
@@ -63,14 +63,6 @@
@override
@failingTest
- test_argumentTypeNotAssignable_invocation_functionParameter_generic() {
- // Failed to resolve 1 nodes
- return super
- .test_argumentTypeNotAssignable_invocation_functionParameter_generic();
- }
-
- @override
- @failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
test_commentReference_beforeConstructor() async {
return super.test_commentReference_beforeConstructor();
@@ -150,13 +142,6 @@
@override
@failingTest
- test_const_constructor_with_named_generic_parameter() {
- // Failed to resolve 1 nodes
- return super.test_const_constructor_with_named_generic_parameter();
- }
-
- @override
- @failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/33676')
test_constConstructorWithMixinWithField() {
// Bad state: Unable to convert (Unspecified, null, @52, Can't extend a mixin application and be 'const'.)
@@ -179,13 +164,6 @@
@override
@failingTest
- test_extraPositionalArguments_implicitConstructor() {
- // Failed to resolve 2 nodes
- return super.test_extraPositionalArguments_implicitConstructor();
- }
-
- @override
- @failingTest
test_fieldFormalParameter_genericFunctionTyped() {
// Expected 0 errors of type ParserErrorCode.EXPECTED_TOKEN, found 1 (88)
return super.test_fieldFormalParameter_genericFunctionTyped();
@@ -227,64 +205,6 @@
return super.test_functionTypeAlias_scope_signature();
}
- @override
- @failingTest
- test_genericTypeAlias_fieldAndReturnType_noTypeParameters() {
- // Failed to resolve 1 nodes
- return super.test_genericTypeAlias_fieldAndReturnType_noTypeParameters();
- }
-
- @override
- @failingTest
- test_genericTypeAlias_fieldAndReturnType_typeParameters_arguments() {
- // Failed to resolve 1 nodes
- return super
- .test_genericTypeAlias_fieldAndReturnType_typeParameters_arguments();
- }
-
- @override
- @failingTest
- test_genericTypeAlias_fieldAndReturnType_typeParameters_noArguments() {
- // Failed to resolve 1 nodes
- return super
- .test_genericTypeAlias_fieldAndReturnType_typeParameters_noArguments();
- }
-
- @override
- @failingTest
- test_genericTypeAlias_noTypeParameters() {
- // Failed to resolve 1 nodes
- return super.test_genericTypeAlias_noTypeParameters();
- }
-
- @override
- @failingTest
- test_genericTypeAlias_typeParameters() {
- // Failed to resolve 1 nodes
- return super.test_genericTypeAlias_typeParameters();
- }
-
- @override
- @failingTest
- test_implicitThisReferenceInInitializer_typeParameter() {
- // Failed to resolve 1 nodes
- return super.test_implicitThisReferenceInInitializer_typeParameter();
- }
-
- @override
- @failingTest
- test_inconsistentMethodInheritance_methods_typeParameter2() {
- // Failed to resolve 3 nodes
- return super.test_inconsistentMethodInheritance_methods_typeParameter2();
- }
-
- @override
- @failingTest
- test_inconsistentMethodInheritance_methods_typeParameters1() {
- // Failed to resolve 3 nodes
- return super.test_inconsistentMethodInheritance_methods_typeParameters1();
- }
-
@override // passes with kernel
test_infer_mixin() => super.test_infer_mixin();
@@ -301,13 +221,6 @@
@override
@failingTest
- test_invalidTypeArgumentInConstMap() {
- // Failed to resolve 1 nodes
- return super.test_invalidTypeArgumentInConstMap();
- }
-
- @override
- @failingTest
test_invocationOfNonFunction_functionTypeTypeParameter() {
// Bad state: Not found #lib2::C::T in null
return super.test_invocationOfNonFunction_functionTypeTypeParameter();
@@ -365,13 +278,6 @@
@override
@failingTest
- test_nonTypeInCatchClause_isTypeParameter() {
- // Failed to resolve 1 nodes
- return super.test_nonTypeInCatchClause_isTypeParameter();
- }
-
- @override
- @failingTest
@notForDart2
test_null_callMethod() async {
return super.test_null_callMethod();
@@ -393,20 +299,6 @@
@override
@failingTest
- test_propagateTypeArgs_intoSupertype() {
- // Failed to resolve 4 nodes
- return super.test_propagateTypeArgs_intoSupertype();
- }
-
- @override
- @failingTest
- test_reversedTypeArguments() {
- // Failed to resolve 4 nodes
- return super.test_reversedTypeArguments();
- }
-
- @override
- @failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/33677')
test_undefinedIdentifier_synthetic_whenExpression() {
// Expected 0 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 1 (29)
diff --git a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
index 8df0aa8..7359ca5b 100644
--- a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
@@ -54,13 +54,6 @@
@override
@failingTest
- test_propagatedFieldType() {
- // Failed to resolve 1 nodes
- return super.test_propagatedFieldType();
- }
-
- @override
- @failingTest
@notForDart2
test_undefinedOperator_binaryExpression_inSubtype() async {
await super.test_undefinedOperator_binaryExpression_inSubtype();
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
index 1ac4f2b..a11639e 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
@@ -19,11 +19,4 @@
@override
bool get useCFE => true;
-
- @override
- @failingTest
- test_staticMethods_classTypeParameters_genericMethod() {
- // Bad state: Not found U in m<S>(S s) → void
- return super.test_staticMethods_classTypeParameters_genericMethod();
- }
}
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index 08a0800..363b81f 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -141,13 +141,6 @@
@override
@failingTest
- test_forIn_typeBoundGood() {
- // Failed to resolve 1 nodes
- return super.test_forIn_typeBoundGood();
- }
-
- @override
- @failingTest
test_forIn_upcast() {
// Failed to resolve 1 nodes
return super.test_forIn_upcast();
@@ -532,13 +525,6 @@
@override
@failingTest
- test_returnOfInvalidType_not_issued_for_valid_generic_return() {
- // Failed to resolve 2 nodes
- return super.test_returnOfInvalidType_not_issued_for_valid_generic_return();
- }
-
- @override
- @failingTest
test_returnOfInvalidType_void() async {
// Expected 1 errors of type StaticTypeWarningCode.RETURN_OF_INVALID_TYPE, found 0
await super.test_returnOfInvalidType_void();
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
index 804de7b..e8408a0 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -139,27 +139,6 @@
@override
@failingTest
- test_argumentTypeNotAssignable_invocation_functionParameter_generic() {
- return super
- .test_argumentTypeNotAssignable_invocation_functionParameter_generic();
- }
-
- @override
- @failingTest
- test_argumentTypeNotAssignable_invocation_generic() {
- // Failed to resolve 1 nodes
- return super.test_argumentTypeNotAssignable_invocation_generic();
- }
-
- @override
- @failingTest
- test_argumentTypeNotAssignable_new_generic() {
- // Failed to resolve 1 nodes
- return super.test_argumentTypeNotAssignable_new_generic();
- }
-
- @override
- @failingTest
@potentialAnalyzerProblem
test_assignmentToClass() async {
return super.test_assignmentToClass();
@@ -819,14 +798,6 @@
@override
@failingTest
- test_invalidMethodOverrideNormalParamType_superclass_interface() {
- // Failed to resolve 2 nodes
- return super
- .test_invalidMethodOverrideNormalParamType_superclass_interface();
- }
-
- @override
- @failingTest
@potentialAnalyzerProblem
test_invalidMethodOverrideNormalParamType_twoInterfaces_conflicting() async {
return super
@@ -1476,13 +1447,6 @@
@override
@failingTest
- test_typeParameterReferencedByStatic_methodBodyReference() {
- // Failed to resolve 1 nodes
- return super.test_typeParameterReferencedByStatic_methodBodyReference();
- }
-
- @override
- @failingTest
@potentialAnalyzerProblem
test_typeParameterReferencedByStatic_methodParameter() async {
return super.test_typeParameterReferencedByStatic_methodParameter();
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
index 0e09713..982bea1 100644
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
@@ -37,13 +37,6 @@
@override
@failingTest
- test_constrainedByBounds1() {
- // Failed to resolve 1 nodes
- return super.test_constrainedByBounds1();
- }
-
- @override
- @failingTest
test_constrainedByBounds2() async {
// Expected: InterfaceTypeImpl:<int>
await super.test_constrainedByBounds2();
@@ -58,13 +51,6 @@
@override
@failingTest
- test_constrainedByBounds4() {
- // Failed to resolve 1 nodes
- return super.test_constrainedByBounds4();
- }
-
- @override
- @failingTest
test_constrainedByBounds5() async {
// Bad state: Expected a type for 4 at 119; got one for kernel offset 118
await super.test_constrainedByBounds5();
@@ -100,90 +86,6 @@
@override
@failingTest
- test_futureOr_assignFromFuture() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_assignFromFuture();
- }
-
- @override
- @failingTest
- test_futureOr_assignFromValue() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_assignFromValue();
- }
-
- @override
- @failingTest
- test_futureOr_asyncExpressionBody() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_asyncExpressionBody();
- }
-
- @override
- @failingTest
- test_futureOr_asyncReturn() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_asyncReturn();
- }
-
- @override
- @failingTest
- test_futureOr_await() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_await();
- }
-
- @override
- @failingTest
- test_futureOr_downwards1() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_downwards1();
- }
-
- @override
- @failingTest
- test_futureOr_downwards2() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_downwards2();
- }
-
- @override
- @failingTest
- test_futureOr_downwards3() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_downwards3();
- }
-
- @override
- @failingTest
- test_futureOr_downwards4() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_downwards4();
- }
-
- @override
- @failingTest
- test_futureOr_downwards5() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_downwards5();
- }
-
- @override
- @failingTest
- test_futureOr_downwards6() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_downwards6();
- }
-
- @override
- @failingTest
- test_futureOr_downwards7() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_downwards7();
- }
-
- @override
- @failingTest
test_futureOr_downwards8() async {
// type 'BottomTypeImpl' is not a subtype of type 'InterfaceType' in type cast where
await super.test_futureOr_downwards8();
@@ -191,13 +93,6 @@
@override
@failingTest
- test_futureOr_downwards9() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_downwards9();
- }
-
- @override
- @failingTest
test_futureOr_methods2() async {
// Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_METHOD, found 0
await super.test_futureOr_methods2();
@@ -240,13 +135,6 @@
@override
@failingTest
- test_futureOr_upwards1() {
- // Failed to resolve 1 nodes
- return super.test_futureOr_upwards1();
- }
-
- @override
- @failingTest
test_futureOr_upwards2() async {
// Expected 1 errors of type StrongModeCode.STRONG_MODE_COULD_NOT_INFER, found 0
await super.test_futureOr_upwards2();
@@ -254,27 +142,6 @@
@override
@failingTest
- test_futureOrNull_no_return() {
- // Failed to resolve 1 nodes
- return super.test_futureOrNull_no_return();
- }
-
- @override
- @failingTest
- test_futureOrNull_no_return_value() {
- // Failed to resolve 1 nodes
- return super.test_futureOrNull_no_return_value();
- }
-
- @override
- @failingTest
- test_futureOrNull_return_null() {
- // Failed to resolve 1 nodes
- return super.test_futureOrNull_return_null();
- }
-
- @override
- @failingTest
test_generic_partial() async {
// AnalysisException: Element mismatch in /test.dart at class A<T>
await super.test_generic_partial();
@@ -331,34 +198,6 @@
@override
@failingTest
- test_inference_simplePolymorphicRecursion_function() {
- // Failed to resolve 4 nodes
- return super.test_inference_simplePolymorphicRecursion_function();
- }
-
- @override
- @failingTest
- test_inference_simplePolymorphicRecursion_interface() {
- // Failed to resolve 2 nodes
- return super.test_inference_simplePolymorphicRecursion_interface();
- }
-
- @override
- @failingTest
- test_inference_simplePolymorphicRecursion_simple() {
- // Failed to resolve 2 nodes
- return super.test_inference_simplePolymorphicRecursion_simple();
- }
-
- @override
- @failingTest
- test_inferGenericInstantiation() {
- // Failed to resolve 1 nodes
- return super.test_inferGenericInstantiation();
- }
-
- @override
- @failingTest
test_inferGenericInstantiation2() async {
// Expected 1 errors of type StrongModeCode.STRONG_MODE_COULD_NOT_INFER, found 0;
// 1 errors of type StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, found 0
@@ -378,13 +217,6 @@
@override
@failingTest
- test_partialTypes1() {
- // Failed to resolve 2 nodes
- return super.test_partialTypes1();
- }
-
- @override
- @failingTest
test_pinning_multipleConstraints1() async {
// Expected 1 errors of type StrongModeCode.STRONG_MODE_INVALID_CAST_LITERAL, found 0
await super.test_pinning_multipleConstraints1();
@@ -392,13 +224,6 @@
@override
@failingTest
- test_pinning_multipleConstraints2() {
- // Failed to resolve 1 nodes
- return super.test_pinning_multipleConstraints2();
- }
-
- @override
- @failingTest
test_pinning_multipleConstraints3() async {
// Expected 1 errors of type StrongModeCode.STRONG_MODE_INVALID_CAST_LITERAL, found 0
await super.test_pinning_multipleConstraints3();
@@ -406,34 +231,6 @@
@override
@failingTest
- test_pinning_multipleConstraints_contravariant1() {
- // Failed to resolve 2 nodes
- return super.test_pinning_multipleConstraints_contravariant1();
- }
-
- @override
- @failingTest
- test_pinning_multipleConstraints_contravariant2() {
- // Failed to resolve 2 nodes
- return super.test_pinning_multipleConstraints_contravariant2();
- }
-
- @override
- @failingTest
- test_pinning_multipleConstraints_contravariant3() {
- // Failed to resolve 2 nodes
- return super.test_pinning_multipleConstraints_contravariant3();
- }
-
- @override
- @failingTest
- test_pinning_multipleConstraints_contravariant4() {
- // Failed to resolve 2 nodes
- return super.test_pinning_multipleConstraints_contravariant4();
- }
-
- @override
- @failingTest
test_redirectedConstructor_named() {
// Expected: 'A<T2, U2>'; Actual: 'A<T, U>'
return super.test_redirectedConstructor_named();
@@ -454,48 +251,6 @@
// TODO(brianwilkerson) Figure out why this test is flaky.
fail('Flaky test');
}
-
- @override
- @failingTest
- test_returnType_variance1() {
- // Failed to resolve 1 nodes
- return super.test_returnType_variance1();
- }
-
- @override
- @failingTest
- test_returnType_variance2() {
- // Failed to resolve 1 nodes
- return super.test_returnType_variance2();
- }
-
- @override
- @failingTest
- test_returnType_variance3() {
- // Failed to resolve 1 nodes
- return super.test_returnType_variance3();
- }
-
- @override
- @failingTest
- test_returnType_variance4() {
- // Failed to resolve 1 nodes
- return super.test_returnType_variance4();
- }
-
- @override
- @failingTest
- test_returnType_variance5() {
- // Failed to resolve 3 nodes
- return super.test_returnType_variance5();
- }
-
- @override
- @failingTest
- test_returnType_variance6() {
- // Failed to resolve 3 nodes
- return super.test_returnType_variance6();
- }
}
@reflectiveTest
@@ -512,34 +267,6 @@
@override
@failingTest
- test_futureOr_promotion3() async {
- // Failed to resolve 2 nodes
- await super.test_futureOr_promotion3();
- }
-
- @override
- @failingTest
- test_futureOr_promotion4() {
- // Failed to resolve 2 nodes
- return super.test_futureOr_promotion4();
- }
-
- @override
- @failingTest
- test_genericFunction() {
- // Failed to resolve 1 nodes
- return super.test_genericFunction();
- }
-
- @override
- @failingTest
- test_genericFunction_bounds() {
- // Failed to resolve 1 nodes
- return super.test_genericFunction_bounds();
- }
-
- @override
- @failingTest
test_genericFunction_parameter() async {
// Failed to resolve 1 nodes:
await super.test_genericFunction_parameter();
@@ -547,20 +274,6 @@
@override
@failingTest
- test_genericFunction_static() {
- // Failed to resolve 1 nodes
- return super.test_genericFunction_static();
- }
-
- @override
- @failingTest
- test_genericMethod() async {
- // Failed to resolve 1 nodes
- await super.test_genericMethod();
- }
-
- @override
- @failingTest
test_genericMethod_explicitTypeParams() async {
// Bad state: Found 2 argument types for 1 type arguments
await super.test_genericMethod_explicitTypeParams();
@@ -642,13 +355,6 @@
@override
@failingTest
- test_genericMethod_nestedBound() async {
- // Failed to resolve 1 nodes
- await super.test_genericMethod_nestedBound();
- }
-
- @override
- @failingTest
test_genericMethod_nestedCapture() async {
// Bad state: Found 2 argument types for 1 type arguments
await super.test_genericMethod_nestedCapture();
@@ -656,34 +362,6 @@
@override
@failingTest
- test_genericMethod_nestedFunctions() async {
- // Failed to resolve 1 nodes
- await super.test_genericMethod_nestedFunctions();
- }
-
- @override
- @failingTest
- test_genericMethod_override() async {
- // Failed to resolve 2 nodes
- await super.test_genericMethod_override();
- }
-
- @override
- @failingTest
- test_genericMethod_override_bounds() async {
- // Failed to resolve 3 nodes
- await super.test_genericMethod_override_bounds();
- }
-
- @override
- @failingTest
- test_genericMethod_override_differentContextsSameBounds() async {
- // Failed to resolve 4 nodes
- await super.test_genericMethod_override_differentContextsSameBounds();
- }
-
- @override
- @failingTest
test_genericMethod_override_invalidContravariantTypeParamBounds() async {
// Expected 1 errors of type StrongModeCode.STRONG_MODE_INVALID_METHOD_OVERRIDE, found 0
await super
@@ -700,13 +378,6 @@
@override
@failingTest
- test_genericMethod_override_invalidReturnType() {
- // Failed to resolve 2 nodes
- return super.test_genericMethod_override_invalidReturnType();
- }
-
- @override
- @failingTest
test_genericMethod_override_invalidTypeParamCount() async {
// Expected 1 errors of type StrongModeCode.STRONG_MODE_INVALID_METHOD_OVERRIDE, found 0
await super.test_genericMethod_override_invalidTypeParamCount();
@@ -734,27 +405,6 @@
}
@override
- @failingTest
- test_instantiateToBounds_method_ok_referenceOther_before() {
- // Failed to resolve 2 nodes
- return super.test_instantiateToBounds_method_ok_referenceOther_before();
- }
-
- @override
- @failingTest
- test_instantiateToBounds_method_ok_simpleBounds() {
- // Failed to resolve 1 nodes
- return super.test_instantiateToBounds_method_ok_simpleBounds();
- }
-
- @override
- @failingTest
- test_issue32396() {
- // Failed to resolve 1 nodes
- return super.test_issue32396();
- }
-
- @override
test_notInstantiatedBound_class_error_recursion_less_direct() async {
return super.test_notInstantiatedBound_class_error_recursion_less_direct();
}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index db34b81..d30217a 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -5793,6 +5793,22 @@
}
}
+ test_reference_to_class_type_parameter() async {
+ addTestFile('''
+class C<T> {
+ void f() {
+ T x;
+ }
+}
+''');
+ await resolveTestFile();
+ var tElement = findElement.class_('C').typeParameters[0];
+ var tReference = findNode.simple('T x');
+ var tReferenceType = tReference.staticType as TypeParameterType;
+ expect(tReferenceType.element, same(tElement));
+ assertElement(tReference, tElement);
+ }
+
test_stringInterpolation() async {
String content = r'''
void main() {