Minor. Extract method in ControlFlowProcessor

This commit is contained in:
Denis Zharkov
2016-10-18 16:37:08 +03:00
parent 8a2c9ec7fe
commit 9716d2ad54
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.cfg
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.cfg.TailRecursionKind.* import org.jetbrains.kotlin.cfg.TailRecursionKind.*
import org.jetbrains.kotlin.cfg.VariableUseState.READ import org.jetbrains.kotlin.cfg.VariableUseState.*
import org.jetbrains.kotlin.cfg.pseudocode.Pseudocode import org.jetbrains.kotlin.cfg.pseudocode.Pseudocode
import org.jetbrains.kotlin.cfg.pseudocode.PseudocodeUtil import org.jetbrains.kotlin.cfg.pseudocode.PseudocodeUtil
import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction
@@ -606,22 +606,41 @@ class ControlFlowInformationProvider private constructor(
report(Errors.UNUSED_VARIABLE.on(element, variableDescriptor), ctxt) report(Errors.UNUSED_VARIABLE.on(element, variableDescriptor), ctxt)
} }
else if (element is KtParameter) { else if (element is KtParameter) {
processUnusedParameter(ctxt, element, variableDescriptor)
}
}
else if (variableUseState === ONLY_WRITTEN_NEVER_READ && KtPsiUtil.isRemovableVariableDeclaration(element)) {
report(Errors.ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE.on(element, variableDescriptor), ctxt)
}
else if (variableUseState === WRITTEN_AFTER_READ && element is KtVariableDeclaration) {
when (element) {
is KtProperty ->
element.initializer?.let {
report(Errors.VARIABLE_WITH_REDUNDANT_INITIALIZER.on(it, variableDescriptor), ctxt)
}
is KtDestructuringDeclarationEntry ->
report(VARIABLE_WITH_REDUNDANT_INITIALIZER.on(element, variableDescriptor), ctxt)
}
}
}
private fun processUnusedParameter(ctxt: VariableUseContext, element: KtParameter, variableDescriptor: VariableDescriptor) {
val owner = element.parent?.parent val owner = element.parent?.parent
if (element.isSingleUnderscore) return if (element.isSingleUnderscore) return
when (owner) { when (owner) {
is KtPrimaryConstructor -> if (!element.hasValOrVar()) { is KtPrimaryConstructor -> if (!element.hasValOrVar()) {
val containingClass = owner.getContainingClassOrObject() val containingClass = owner.getContainingClassOrObject()
val containingClassDescriptor = trace.get( val containingClassDescriptor = trace.get(
BindingContext.DECLARATION_TO_DESCRIPTOR, containingClass) DECLARATION_TO_DESCRIPTOR, containingClass)
if (!DescriptorUtils.isAnnotationClass(containingClassDescriptor)) { if (!DescriptorUtils.isAnnotationClass(containingClassDescriptor)) {
report(Errors.UNUSED_PARAMETER.on(element, variableDescriptor), ctxt) report(UNUSED_PARAMETER.on(element, variableDescriptor), ctxt)
} }
} }
is KtFunction -> { is KtFunction -> {
val mainFunctionDetector = MainFunctionDetector(trace.bindingContext) val mainFunctionDetector = MainFunctionDetector(trace.bindingContext)
val isMain = owner is KtNamedFunction && mainFunctionDetector.isMain(owner) val isMain = owner is KtNamedFunction && mainFunctionDetector.isMain(owner)
val functionDescriptor = val functionDescriptor =
trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, owner) as? FunctionDescriptor trace.get(DECLARATION_TO_DESCRIPTOR, owner) as? FunctionDescriptor
?: throw AssertionError(owner.text) ?: throw AssertionError(owner.text)
val functionName = functionDescriptor.name.asString() val functionName = functionDescriptor.name.asString()
if (isMain if (isMain
@@ -632,22 +651,7 @@ class ControlFlowInformationProvider private constructor(
|| "propertyDelegated" == functionName) { || "propertyDelegated" == functionName) {
return return
} }
report(Errors.UNUSED_PARAMETER.on(element, variableDescriptor), ctxt) report(UNUSED_PARAMETER.on(element, variableDescriptor), ctxt)
}
}
}
}
else if (variableUseState === org.jetbrains.kotlin.cfg.VariableUseState.ONLY_WRITTEN_NEVER_READ && KtPsiUtil.isRemovableVariableDeclaration(element)) {
report(Errors.ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE.on(element, variableDescriptor), ctxt)
}
else if (variableUseState === org.jetbrains.kotlin.cfg.VariableUseState.WRITTEN_AFTER_READ && element is KtVariableDeclaration) {
when (element) {
is KtProperty ->
element.initializer?.let {
report(Errors.VARIABLE_WITH_REDUNDANT_INITIALIZER.on(it, variableDescriptor), ctxt)
}
is KtDestructuringDeclarationEntry ->
report(VARIABLE_WITH_REDUNDANT_INITIALIZER.on(element, variableDescriptor), ctxt)
} }
} }
} }