Skip to content

Commit fe8c301

Browse files
pqpull[bot]
authored andcommitted
[wildcards] DUPLICATE_DEFINITION support
Fixes: #56089 I'll follow-up with more tests for `DUPLICATE_FIELD_FORMAL_PARAMETER`s in another CL (see: #56092). Change-Id: I23b13e697df6d16f856fef54b0fcf2a5db47bb22 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/373404 Commit-Queue: Phil Quitslund <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 5388a2a commit fe8c301

File tree

5 files changed

+515
-8
lines changed

5 files changed

+515
-8
lines changed

pkg/analyzer/lib/src/dart/element/extensions.dart

+11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:analyzer/dart/analysis/features.dart';
56
import 'package:analyzer/dart/element/element.dart';
67
import 'package:analyzer/dart/element/nullability_suffix.dart';
78
import 'package:analyzer/dart/element/type.dart';
@@ -116,6 +117,16 @@ extension ElementExtension on Element {
116117
}
117118
return false;
118119
}
120+
121+
/// Return true if this element is a wildcard variable.
122+
bool get isWildcardVariable =>
123+
name == '_' &&
124+
(this is LocalVariableElement ||
125+
this is TypeParameterElement ||
126+
(this is ParameterElement &&
127+
this is! FieldFormalParameterElement &&
128+
this is! SuperFormalParameterElement)) &&
129+
(library?.featureSet.isEnabled(Feature.wildcard_variables) ?? false);
119130
}
120131

121132
extension ExecutableElementExtension on ExecutableElement {

pkg/analyzer/lib/src/dart/element/scope.dart

+1-7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:analyzer/dart/analysis/features.dart';
77
import 'package:analyzer/dart/element/element.dart';
88
import 'package:analyzer/dart/element/scope.dart';
99
import 'package:analyzer/src/dart/element/element.dart';
10+
import 'package:analyzer/src/dart/element/extensions.dart';
1011
import 'package:analyzer/src/summary2/combinator.dart';
1112
import 'package:analyzer/src/utilities/extensions/collection.dart';
1213

@@ -440,10 +441,3 @@ class _LibraryOrAugmentationImportScope implements Scope {
440441
return _nullPrefixScope.lookup(id);
441442
}
442443
}
443-
444-
extension on Element {
445-
bool get isWildcardVariable =>
446-
name == '_' &&
447-
(this is LocalVariableElement || this is ParameterElement) &&
448-
(library?.featureSet.isEnabled(Feature.wildcard_variables) ?? false);
449-
}

pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:analyzer/dart/element/element.dart';
99
import 'package:analyzer/error/error.dart';
1010
import 'package:analyzer/error/listener.dart';
1111
import 'package:analyzer/src/dart/ast/ast.dart';
12+
import 'package:analyzer/src/dart/element/extensions.dart';
1213
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
1314
import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
1415
import 'package:analyzer/src/error/codes.dart';
@@ -33,6 +34,8 @@ class DuplicateDefinitionVerifier {
3334
var exceptionParameter = node.exceptionParameter;
3435
var stackTraceParameter = node.stackTraceParameter;
3536
if (exceptionParameter != null && stackTraceParameter != null) {
37+
var element = exceptionParameter.declaredElement;
38+
if (element != null && element.isWildcardVariable) return;
3639
String exceptionName = exceptionParameter.name.lexeme;
3740
if (exceptionName == stackTraceParameter.name.lexeme) {
3841
_errorReporter.reportError(_diagnosticFactory
@@ -533,7 +536,7 @@ class DuplicateDefinitionVerifier {
533536
void _checkDuplicateIdentifier(
534537
Map<String, Element> getterScope, Token identifier,
535538
{required Element element, Map<String, Element>? setterScope}) {
536-
if (identifier.isSynthetic) {
539+
if (identifier.isSynthetic || element.isWildcardVariable) {
537540
return;
538541
}
539542

0 commit comments

Comments
 (0)