Lift assignment out: don't report when expression is used as expression
#KT-36357 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
8baba38099
commit
6c93217539
@@ -21,12 +21,15 @@ import com.intellij.codeInspection.ProblemHighlightType.GENERIC_ERROR_OR_WARNING
|
||||
import com.intellij.codeInspection.ProblemHighlightType.INFORMATION
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isElseIf
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.lineCount
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
|
||||
class LiftReturnOrAssignmentInspection @JvmOverloads constructor(private val skipLongExpressions: Boolean = true) :
|
||||
AbstractKotlinInspection() {
|
||||
@@ -35,6 +38,7 @@ class LiftReturnOrAssignmentInspection @JvmOverloads constructor(private val ski
|
||||
object : KtVisitorVoid() {
|
||||
override fun visitExpression(expression: KtExpression) {
|
||||
val states = getState(expression, skipLongExpressions) ?: return
|
||||
if (expression.isUsedAsExpression(expression.analyze(BodyResolveMode.PARTIAL_WITH_CFA))) return
|
||||
states.forEach { state ->
|
||||
registerProblem(
|
||||
expression,
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// PROBLEM: none
|
||||
var a = 5
|
||||
|
||||
fun foo() = <caret>if (true) {
|
||||
a = 6
|
||||
} else {
|
||||
a = 8
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// PROBLEM: none
|
||||
var a = 5
|
||||
|
||||
fun foo() = <caret>try {
|
||||
a = 6
|
||||
} catch (e: Exception) {
|
||||
a = 8
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// PROBLEM: none
|
||||
var a = 5
|
||||
|
||||
fun foo() = <caret>when {
|
||||
true -> a = 6
|
||||
else -> a = 8
|
||||
}
|
||||
+15
@@ -5389,6 +5389,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
||||
public void testTypeMismatchMutableList2_ni() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/liftOut/ifToAssignment/typeMismatchMutableList2_ni.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("usedAsExpression.kt")
|
||||
public void testUsedAsExpression() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/liftOut/ifToAssignment/usedAsExpression.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/inspectionsLocal/liftOut/ifToReturn")
|
||||
@@ -5516,6 +5521,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
||||
runTest("idea/testData/inspectionsLocal/liftOut/tryToAssignment/lambda.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("usedAsExpression.kt")
|
||||
public void testUsedAsExpression() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/liftOut/tryToAssignment/usedAsExpression.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("withUnmatchedAssignments.kt")
|
||||
public void testWithUnmatchedAssignments() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/liftOut/tryToAssignment/withUnmatchedAssignments.kt");
|
||||
@@ -5647,6 +5657,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
||||
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/simpleWhenWithoutTerminatingAssignment.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("usedAsExpression.kt")
|
||||
public void testUsedAsExpression() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/usedAsExpression.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("whenHasMissingCase.kt")
|
||||
public void testWhenHasMissingCase() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/whenHasMissingCase.kt");
|
||||
|
||||
Reference in New Issue
Block a user