From 74673a44dfa35a5c2a455ef486c99ae894322215 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 6 May 2024 12:18:48 +0200 Subject: [PATCH] [kotlin] k2: disable introduce on java class qualifiers KTIJ-29112 GitOrigin-RevId: 331670ed0531ebb3dd54b2850773ae574efdd10e --- .../refactoring/introduce/ExtractionTestGenerated.java | 5 +++++ .../introduceVariable/javaInnerClassQualifier.kt | 3 +++ .../javaInnerClassQualifier.kt.conflicts | 1 + .../KotlinIntroduceVariableServiceK2Impl.kt | 8 +++++--- .../K2IntroduceVariableTestGenerated.java | 5 +++++ 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt.conflicts diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java index c0eda87f0a94..4100157d1970 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java @@ -561,6 +561,11 @@ public abstract class ExtractionTestGenerated extends AbstractExtractionTest { runTest("testData/refactoring/introduceVariable/It.kt"); } + @TestMetadata("javaInnerClassQualifier.kt") + public void testJavaInnerClassQualifier() throws Exception { + runTest("testData/refactoring/introduceVariable/javaInnerClassQualifier.kt"); + } + @TestMetadata("kt10808.kt") public void testKt10808() throws Exception { runTest("testData/refactoring/introduceVariable/kt10808.kt"); diff --git a/plugins/kotlin/idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt b/plugins/kotlin/idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt new file mode 100644 index 000000000000..28ac4f877e29 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + Thread.State.BLOCKED +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt.conflicts b/plugins/kotlin/idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt.conflicts new file mode 100644 index 000000000000..072400d731d7 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt.conflicts @@ -0,0 +1 @@ +Cannot perform refactoring without an expression diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/introduce/introduceVariable/KotlinIntroduceVariableServiceK2Impl.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/introduce/introduceVariable/KotlinIntroduceVariableServiceK2Impl.kt index c1dbb2578f93..00630faf6cbe 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/introduce/introduceVariable/KotlinIntroduceVariableServiceK2Impl.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/introduce/introduceVariable/KotlinIntroduceVariableServiceK2Impl.kt @@ -3,6 +3,7 @@ package org.jetbrains.kotlin.idea.k2.refactoring.introduce.introduceVariable import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project +import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement import com.intellij.psi.PsiPackage import com.intellij.psi.util.elementType @@ -38,11 +39,12 @@ internal class KotlinIntroduceVariableServiceK2Impl(private val project: Project ?: findStringTemplateOrStringTemplateEntryExpression(file, startOffset, endOffset, elementKind) ?: findStringTemplateFragment(file, startOffset, endOffset, elementKind) - if (element is KtSimpleNameExpression) { + if (element is KtExpression) { val qualifiedExpression = element.parent as? KtDotQualifiedExpression if (qualifiedExpression != null && qualifiedExpression.receiverExpression == element) { - val resolved = element.mainReference.resolve() - if (resolved is PsiPackage || resolved is KtTypeAlias || resolved is KtClassOrObject && resolved.getDeclarationKeyword()?.elementType != KtTokens.OBJECT_KEYWORD) { + val resolved = ((element as? KtDotQualifiedExpression)?.selectorExpression ?: element).mainReference?.resolve() + if (resolved is PsiPackage || resolved is PsiClass || + resolved is KtTypeAlias || resolved is KtClassOrObject && resolved.getDeclarationKeyword()?.elementType != KtTokens.OBJECT_KEYWORD) { element = null } } diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/introduce/introduceVariable/K2IntroduceVariableTestGenerated.java b/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/introduce/introduceVariable/K2IntroduceVariableTestGenerated.java index 319f63d40c88..9f24f459c378 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/introduce/introduceVariable/K2IntroduceVariableTestGenerated.java +++ b/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/introduce/introduceVariable/K2IntroduceVariableTestGenerated.java @@ -559,6 +559,11 @@ public abstract class K2IntroduceVariableTestGenerated extends AbstractK2Introdu runTest("../../idea/tests/testData/refactoring/introduceVariable/It.kt"); } + @TestMetadata("javaInnerClassQualifier.kt") + public void testJavaInnerClassQualifier() throws Exception { + runTest("../../idea/tests/testData/refactoring/introduceVariable/javaInnerClassQualifier.kt"); + } + @TestMetadata("kt10808.kt") public void testKt10808() throws Exception { runTest("../../idea/tests/testData/refactoring/introduceVariable/kt10808.kt");