[wildcards] extension type parameter scopes
Fixes:
CompileTimeError -> Pass (expected Pass)
co19/LanguageFeatures/Wildcards/binding_A02_t08
See: https://github.com/dart-lang/sdk/issues/55680
Change-Id: I5fffc47b52a2fa5d86e6be0b8a780bc3abcff1c7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/380206
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index d87a268..8f0777e 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -2595,6 +2595,8 @@
ExtensionTypeElementImpl element,
) {
for (var typeParameter in element.typeParameters) {
+ if (typeParameter.isWildcardVariable) continue;
+
var name = typeParameter.name;
// name is same as the name of the enclosing class
if (element.name == name) {
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_type_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_type_test.dart
index 8b9f87a..0b7615b 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_type_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_type_test.dart
@@ -334,4 +334,49 @@
declaredElement: <testLibraryFragment>::@extensionType::A
''');
}
+
+ test_typeParameters_wildcards() async {
+ await assertNoErrorsInCode(r'''
+extension type ET<_, _, _ extends num>(int _) {}
+''');
+
+ var node = findNode.singleExtensionTypeDeclaration;
+ assertResolvedNodeText(node, r'''
+ExtensionTypeDeclaration
+ extensionKeyword: extension
+ typeKeyword: type
+ name: ET
+ typeParameters: TypeParameterList
+ leftBracket: <
+ typeParameters
+ TypeParameter
+ name: _
+ declaredElement: _@18
+ TypeParameter
+ name: _
+ declaredElement: _@21
+ TypeParameter
+ name: _
+ extendsKeyword: extends
+ bound: NamedType
+ name: num
+ element: dart:core::<fragment>::@class::num
+ type: num
+ declaredElement: _@24
+ rightBracket: >
+ representation: RepresentationDeclaration
+ leftParenthesis: (
+ fieldType: NamedType
+ name: int
+ element: dart:core::<fragment>::@class::int
+ type: int
+ fieldName: _
+ rightParenthesis: )
+ fieldElement: <testLibraryFragment>::@extensionType::ET::@field::_
+ constructorElement: <testLibraryFragment>::@extensionType::ET::@constructor::new
+ leftBracket: {
+ rightBracket: }
+ declaredElement: <testLibraryFragment>::@extensionType::ET
+''');
+ }
}