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");