Minor. Extract method from the huge when entry

This commit is contained in:
Denis Zharkov
2016-10-17 14:50:01 +03:00
parent 4c69416f2b
commit 8a2c9ec7fe
@@ -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.* import org.jetbrains.kotlin.cfg.VariableUseState.READ
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
@@ -571,14 +571,43 @@ class ControlFlowInformationProvider private constructor(
} }
is VariableDeclarationInstruction -> { is VariableDeclarationInstruction -> {
val element = instruction.variableDeclarationElement as? KtNamedDeclaration ?: return@traverse val element = instruction.variableDeclarationElement as? KtNamedDeclaration ?: return@traverse
element.nameIdentifier ?: return@traverse processUnusedDeclaration(element, variableDescriptor, ctxt, variableUseState)
}
}
}
unusedValueExpressions.keys.removeAll(usedValueExpressions)
for ((expressionInQuestion, variableInContext) in unusedValueExpressions) {
val (variableDescriptor, ctxt) = variableInContext
when (expressionInQuestion) {
is KtBinaryExpression -> if (expressionInQuestion.operationToken === KtTokens.EQ) {
expressionInQuestion.right?.let {
report(Errors.UNUSED_VALUE.on(expressionInQuestion, it, variableDescriptor), ctxt)
}
}
is KtPostfixExpression -> {
val operationToken = expressionInQuestion.operationReference.getReferencedNameElementType()
if (operationToken === KtTokens.PLUSPLUS || operationToken === KtTokens.MINUSMINUS) {
report(Errors.UNUSED_CHANGED_VALUE.on(expressionInQuestion, expressionInQuestion), ctxt)
}
}
}
}
}
private fun processUnusedDeclaration(
element: KtNamedDeclaration,
variableDescriptor: VariableDescriptor,
ctxt: VariableUseContext,
variableUseState: VariableUseState?
) {
element.nameIdentifier ?: return
if (!VariableUseState.isUsed(variableUseState)) { if (!VariableUseState.isUsed(variableUseState)) {
if (!element.isSingleUnderscore && KtPsiUtil.isRemovableVariableDeclaration(element)) { if (!element.isSingleUnderscore && KtPsiUtil.isRemovableVariableDeclaration(element)) {
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) {
val owner = element.parent?.parent val owner = element.parent?.parent
if (element.isSingleUnderscore) return@traverse 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()
@@ -601,17 +630,17 @@ class ControlFlowInformationProvider private constructor(
|| "getValue" == functionName || "getValue" == functionName
|| "setValue" == functionName || "setValue" == functionName
|| "propertyDelegated" == functionName) { || "propertyDelegated" == functionName) {
return@traverse return
} }
report(Errors.UNUSED_PARAMETER.on(element, variableDescriptor), ctxt) report(Errors.UNUSED_PARAMETER.on(element, variableDescriptor), ctxt)
} }
} }
} }
} }
else if (variableUseState === ONLY_WRITTEN_NEVER_READ && KtPsiUtil.isRemovableVariableDeclaration(element)) { 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) report(Errors.ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE.on(element, variableDescriptor), ctxt)
} }
else if (variableUseState === WRITTEN_AFTER_READ && element is KtVariableDeclaration) { else if (variableUseState === org.jetbrains.kotlin.cfg.VariableUseState.WRITTEN_AFTER_READ && element is KtVariableDeclaration) {
when (element) { when (element) {
is KtProperty -> is KtProperty ->
element.initializer?.let { element.initializer?.let {
@@ -622,26 +651,6 @@ class ControlFlowInformationProvider private constructor(
} }
} }
} }
}
}
unusedValueExpressions.keys.removeAll(usedValueExpressions)
for ((expressionInQuestion, variableInContext) in unusedValueExpressions) {
val (variableDescriptor, ctxt) = variableInContext
when (expressionInQuestion) {
is KtBinaryExpression -> if (expressionInQuestion.operationToken === KtTokens.EQ) {
expressionInQuestion.right?.let {
report(Errors.UNUSED_VALUE.on(expressionInQuestion, it, variableDescriptor), ctxt)
}
}
is KtPostfixExpression -> {
val operationToken = expressionInQuestion.operationReference.getReferencedNameElementType()
if (operationToken === KtTokens.PLUSPLUS || operationToken === KtTokens.MINUSMINUS) {
report(Errors.UNUSED_CHANGED_VALUE.on(expressionInQuestion, expressionInQuestion), ctxt)
}
}
}
}
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// "Unused expressions" in block // "Unused expressions" in block