Lift assignment out: do not report when assignment variables are different
#KT-38649 Fixed
This commit is contained in:
committed by
Yan Zhulanow
parent
498c40548b
commit
5efbbdea57
+4
-1
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.diagnostics.Errors
|
|||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.core.replaced
|
import org.jetbrains.kotlin.idea.core.replaced
|
||||||
import org.jetbrains.kotlin.idea.intentions.branches
|
import org.jetbrains.kotlin.idea.intentions.branches
|
||||||
|
import org.jetbrains.kotlin.idea.references.mainReference
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
|
import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
|
||||||
@@ -66,7 +67,9 @@ object BranchedFoldingUtils {
|
|||||||
): Boolean {
|
): Boolean {
|
||||||
val left = this.left ?: return false
|
val left = this.left ?: return false
|
||||||
val otherLeft = other.left ?: return false
|
val otherLeft = other.left ?: return false
|
||||||
if (left.text != otherLeft.text || operationToken != other.operationToken) return false
|
if (left.text != otherLeft.text || operationToken != other.operationToken ||
|
||||||
|
left.mainReference?.resolve() != otherLeft.mainReference?.resolve()
|
||||||
|
) return false
|
||||||
val rightType = other.rightType() ?: return false
|
val rightType = other.rightType() ?: return false
|
||||||
return rightType.constructor == rightTypeConstructor || (operationToken == KtTokens.EQ && rightType.isSubtypeOf(leftType))
|
return rightType.constructor == rightTypeConstructor || (operationToken == KtTokens.EQ && rightType.isSubtypeOf(leftType))
|
||||||
}
|
}
|
||||||
|
|||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
class A {
|
||||||
|
val list: MutableList<String> = mutableListOf()
|
||||||
|
}
|
||||||
|
|
||||||
|
class B {
|
||||||
|
val list: MutableList<String> = mutableListOf()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.add(s: String) {
|
||||||
|
<caret>when (this) {
|
||||||
|
is A -> list += s
|
||||||
|
is B -> list += s
|
||||||
|
else -> throw IllegalStateException()
|
||||||
|
}
|
||||||
|
}
|
||||||
+5
@@ -5707,6 +5707,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/cascadeWhen.kt");
|
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/cascadeWhen.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("differentVariablesWithSame.kt")
|
||||||
|
public void testDifferentVariablesWithSame() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/differentVariablesWithSame.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("innerWhenTransformed.kt")
|
@TestMetadata("innerWhenTransformed.kt")
|
||||||
public void testInnerWhenTransformed() throws Exception {
|
public void testInnerWhenTransformed() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/innerWhenTransformed.kt");
|
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/innerWhenTransformed.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user