diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index a5d61b89145..08a09191704 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -69,4 +69,10 @@ public class Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated ex public void testUnresolved() throws Exception { runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unresolved.kt"); } + + @Test + @TestMetadata("unusedDestructuring.kt") + public void testUnusedDestructuring() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.kt"); + } } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index aeaeec28df4..4121d388fd8 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -69,4 +69,10 @@ public class FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated ext public void testUnresolved() throws Exception { runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unresolved.kt"); } + + @Test + @TestMetadata("unusedDestructuring.kt") + public void testUnusedDestructuring() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.kt"); + } } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index d08cbe0c9ef..9752e0da976 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -69,4 +69,10 @@ public class FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenera public void testUnresolved() throws Exception { runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unresolved.kt"); } + + @Test + @TestMetadata("unusedDestructuring.kt") + public void testUnusedDestructuring() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.kt"); + } } diff --git a/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.kt b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.kt new file mode 100644 index 00000000000..9c0fe2d77b3 --- /dev/null +++ b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.kt @@ -0,0 +1,11 @@ +class Test { + private fun test(x: Int, y: Int) { + val (_, _) = invert(x, y) + } + + private fun invert(x: Int, y: Int): Point { + return Point(-x, -y) + } +} + +data class Point(val x: Int, val y: Int) \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.txt b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.txt new file mode 100644 index 00000000000..9f370a89565 --- /dev/null +++ b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/unusedDestructuring.txt @@ -0,0 +1 @@ +Diagnostics from elements: diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt index 8ba3d32b895..56afae2bd28 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt @@ -79,7 +79,12 @@ object UnusedChecker : AbstractFirPropertyInitializationChecker() { variableSymbol.lazyResolveToPhase(FirResolvePhase.BODY_RESOLVE) @OptIn(SymbolInternals::class) val variable = variableSymbol.fir - val variableSource = variable.source.takeIf { it?.elementType != KtNodeTypes.DESTRUCTURING_DECLARATION } + val variableSource = variable.source + + if (variableSource?.elementType == KtNodeTypes.DESTRUCTURING_DECLARATION) { + continue + } + when { data == VariableStatus.UNUSED -> { when {