Don't report unused variable warning for delegated variables with provide delegate

^KT-38871 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2023-03-27 11:20:33 +02:00
committed by Space Team
parent 18cfc9fcf1
commit 681e85eaed
9 changed files with 142 additions and 2 deletions
@@ -690,6 +690,14 @@ class ControlFlowInformationProviderImpl private constructor(
private val VariableDescriptor.isLocalVariableWithDelegate: Boolean
get() = this is LocalVariableDescriptor && this.isDelegated
private val VariableDescriptor.isLocalVariableWithProvideDelegate: Boolean
get() {
if (!isLocalVariableWithDelegate) return false
if (this !is VariableDescriptorWithAccessors) return false
return trace.bindingContext[PROVIDE_DELEGATE_RESOLVED_CALL, this] != null
}
private fun processUnusedDeclaration(
element: KtNamedDeclaration,
variableDescriptor: VariableDescriptor,
@@ -704,8 +712,11 @@ class ControlFlowInformationProviderImpl private constructor(
element is KtDestructuringDeclarationEntry && element.parent.parent?.parent is KtParameterList ->
report(Errors.UNUSED_DESTRUCTURED_PARAMETER_ENTRY.on(element, variableDescriptor), ctxt)
KtPsiUtil.isRemovableVariableDeclaration(element) ->
report(Errors.UNUSED_VARIABLE.on(element, variableDescriptor), ctxt)
KtPsiUtil.isRemovableVariableDeclaration(element) -> {
if (!variableDescriptor.isLocalVariableWithProvideDelegate) {
report(Errors.UNUSED_VARIABLE.on(element, variableDescriptor), ctxt)
}
}
element is KtParameter ->
processUnusedParameter(ctxt, element, variableDescriptor)