Minor. Extract method from the huge when entry
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user