Analyzer: Don't report all optional parameters on private ctors as unused
Fixes https://github.com/dart-lang/sdk/issues/44268
Change-Id: Ie0f3b004de2761145b7f8acffc3aa82b59a0aea2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/173420
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
index c4368cf..03496ce 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -97,6 +97,15 @@
}
@override
+ void visitInstanceCreationExpression(InstanceCreationExpression node) {
+ for (var argument in node.argumentList.arguments) {
+ var parameter = argument.staticParameterElement;
+ usedElements.elements.add(parameter);
+ }
+ super.visitInstanceCreationExpression(node);
+ }
+
+ @override
void visitMethodDeclaration(MethodDeclaration node) {
ExecutableElement enclosingExecOld = _enclosingExec;
try {
diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
index fc48249..95cf0b8 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
@@ -957,26 +957,13 @@
]);
}
- test_optionalParameter_constructor_named_notUsed() async {
- await assertErrorsInCode(r'''
-class A {
- A._([int a]);
-}
-f() => A._();
-''', [
- error(HintCode.UNUSED_ELEMENT_PARAMETER, 21, 1),
- ]);
- }
-
- test_optionalParameter_constructor_unnamed_notUsed() async {
- await assertErrorsInCode(r'''
+ test_optionalParameter_isUsed_constructor() async {
+ await assertNoErrorsInCode(r'''
class _A {
- _A([int a]);
+ _A([int a = 0]);
}
-f() => _A();
-''', [
- error(HintCode.UNUSED_ELEMENT_PARAMETER, 21, 1),
- ]);
+f() => _A(0);
+''');
}
test_optionalParameter_isUsed_functionTearoff() async {
@@ -1104,6 +1091,28 @@
''');
}
+ test_optionalParameter_notUsed_constructor_named() async {
+ await assertErrorsInCode(r'''
+class A {
+ A._([int a]);
+}
+f() => A._();
+''', [
+ error(HintCode.UNUSED_ELEMENT_PARAMETER, 21, 1),
+ ]);
+ }
+
+ test_optionalParameter_notUsed_constructor_unnamed() async {
+ await assertErrorsInCode(r'''
+class _A {
+ _A([int a]);
+}
+f() => _A();
+''', [
+ error(HintCode.UNUSED_ELEMENT_PARAMETER, 21, 1),
+ ]);
+ }
+
test_optionalParameter_notUsed_extension() async {
await assertErrorsInCode(r'''
extension E on String {