Skip to content

Commit

Permalink
[wildcards] DUPLICATE_DEFINITION support
Browse files Browse the repository at this point in the history
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 <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
  • Loading branch information
pq authored and pull[bot] committed Jun 27, 2024
1 parent 5388a2a commit fe8c301
Show file tree
Hide file tree
Showing 5 changed files with 515 additions and 8 deletions.
11 changes: 11 additions & 0 deletions pkg/analyzer/lib/src/dart/element/extensions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +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/analysis/features.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
Expand Down Expand Up @@ -116,6 +117,16 @@ extension ElementExtension on Element {
}
return false;
}

/// Return true if this element is a wildcard variable.
bool get isWildcardVariable =>
name == '_' &&
(this is LocalVariableElement ||
this is TypeParameterElement ||
(this is ParameterElement &&
this is! FieldFormalParameterElement &&
this is! SuperFormalParameterElement)) &&
(library?.featureSet.isEnabled(Feature.wildcard_variables) ?? false);
}

extension ExecutableElementExtension on ExecutableElement {
Expand Down
8 changes: 1 addition & 7 deletions pkg/analyzer/lib/src/dart/element/scope.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/scope.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/extensions.dart';
import 'package:analyzer/src/summary2/combinator.dart';
import 'package:analyzer/src/utilities/extensions/collection.dart';

Expand Down Expand Up @@ -440,10 +441,3 @@ class _LibraryOrAugmentationImportScope implements Scope {
return _nullPrefixScope.lookup(id);
}
}

extension on Element {
bool get isWildcardVariable =>
name == '_' &&
(this is LocalVariableElement || this is ParameterElement) &&
(library?.featureSet.isEnabled(Feature.wildcard_variables) ?? false);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/element/extensions.dart';
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
import 'package:analyzer/src/error/codes.dart';
Expand All @@ -33,6 +34,8 @@ class DuplicateDefinitionVerifier {
var exceptionParameter = node.exceptionParameter;
var stackTraceParameter = node.stackTraceParameter;
if (exceptionParameter != null && stackTraceParameter != null) {
var element = exceptionParameter.declaredElement;
if (element != null && element.isWildcardVariable) return;
String exceptionName = exceptionParameter.name.lexeme;
if (exceptionName == stackTraceParameter.name.lexeme) {
_errorReporter.reportError(_diagnosticFactory
Expand Down Expand Up @@ -533,7 +536,7 @@ class DuplicateDefinitionVerifier {
void _checkDuplicateIdentifier(
Map<String, Element> getterScope, Token identifier,
{required Element element, Map<String, Element>? setterScope}) {
if (identifier.isSynthetic) {
if (identifier.isSynthetic || element.isWildcardVariable) {
return;
}

Expand Down
Loading

0 comments on commit fe8c301

Please sign in to comment.