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() {
