"Cascade if" inspection: do not suggest for one-line if
This commit is contained in:
@@ -21,6 +21,7 @@ import com.intellij.codeInspection.LocalInspectionToolSession
|
||||
import com.intellij.codeInspection.ProblemHighlightType
|
||||
import com.intellij.codeInspection.ProblemsHolder
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions.IfToWhenIntention
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isOneLiner
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isIfBranch
|
||||
import org.jetbrains.kotlin.idea.intentions.branches
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
@@ -36,6 +37,8 @@ class CascadeIfInspection : AbstractKotlinInspection() {
|
||||
|
||||
val branches = expression.branches
|
||||
if (branches.size <= 2) return
|
||||
if (expression.isOneLiner()) return
|
||||
|
||||
if (branches.any {
|
||||
it == null ||
|
||||
it.lastBlockStatementOrThis() is KtIfExpression
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.intellij.codeInspection.ProblemHighlightType
|
||||
import com.intellij.codeInspection.ProblemHighlightType.GENERIC_ERROR_OR_WARNING
|
||||
import com.intellij.codeInspection.ProblemHighlightType.INFORMATION
|
||||
import com.intellij.codeInspection.ProblemsHolder
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
@@ -30,6 +29,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.core.canOmitDeclaredType
|
||||
import org.jetbrains.kotlin.idea.core.replaced
|
||||
import org.jetbrains.kotlin.idea.core.setType
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isOneLiner
|
||||
import org.jetbrains.kotlin.idea.intentions.hasResultingIfWithoutElse
|
||||
import org.jetbrains.kotlin.idea.intentions.resultingWhens
|
||||
import org.jetbrains.kotlin.idea.util.CommentSaver
|
||||
@@ -86,12 +86,6 @@ class UseExpressionBodyInspection(private val convertEmptyToUnit: Boolean) : Abs
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtExpression.isOneLiner(): Boolean {
|
||||
val file = containingFile?.virtualFile ?: return false
|
||||
val document = FileDocumentManager.getInstance().getDocument(file) ?: return false
|
||||
return document.getLineNumber(textRange.startOffset) == document.getLineNumber(textRange.endOffset)
|
||||
}
|
||||
|
||||
private fun KtDeclarationWithBody.findValueStatement(): KtExpression? {
|
||||
val body = blockExpression() ?: return null
|
||||
return body.findValueStatement()
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
// PROBLEM: none
|
||||
|
||||
fun foo(a: Boolean, b: Boolean): Int {
|
||||
return <caret>if (a) 42 else if (b) 13 else 0
|
||||
}
|
||||
@@ -101,6 +101,12 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("oneLiner.kt")
|
||||
public void testOneLiner() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/cascadeIf/oneLiner.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("shortIf.kt")
|
||||
public void testShortIf() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/cascadeIf/shortIf.kt");
|
||||
|
||||
Reference in New Issue
Block a user