diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt index daa8253767c..ae9c1d3201b 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt @@ -693,6 +693,8 @@ internal class KtUltraLightParameter( override fun getNavigationElement(): PsiElement = kotlinOrigin + override fun isValid() = parent.isValid + private val kotlinType: KotlinType? by lazyPub { when { receiver != null -> (kotlinOrigin.resolve() as? CallableMemberDescriptor)?.extensionReceiverParameter?.type diff --git a/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightAfter.1.java b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightAfter.1.java new file mode 100644 index 00000000000..d789386f98b --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightAfter.1.java @@ -0,0 +1,5 @@ +class J { + void test() { + new A(3).foo(new X(0), "1", 2); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightAfter.kt b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightAfter.kt new file mode 100644 index 00000000000..94a8cb8f405 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightAfter.kt @@ -0,0 +1,17 @@ +class A(val k: Int) { + fun X.foo(s: String, k: Int): Boolean { + return this.k + s.length - k + this@A.k/2 > 0 + } + + fun test() { + X(0).foo("1", 2) + } +} + +class X(val k: Int) + +fun test() { + with(A(3)) { + X(0).foo("1", 2) + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightBefore.1.java b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightBefore.1.java new file mode 100644 index 00000000000..d789386f98b --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightBefore.1.java @@ -0,0 +1,5 @@ +class J { + void test() { + new A(3).foo(new X(0), "1", 2); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightBefore.kt b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightBefore.kt new file mode 100644 index 00000000000..c2c9d2a5f7e --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverForMemberUltraLightBefore.kt @@ -0,0 +1,17 @@ +class A(val k: Int) { + fun foo(x: X, s: String, k: Int): Boolean { + return x.k + s.length - k + this.k/2 > 0 + } + + fun test() { + foo(X(0), "1", 2) + } +} + +class X(val k: Int) + +fun test() { + with(A(3)) { + foo(X(0), "1", 2) + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt index f26aaec1fb8..0c80bc7c79b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt @@ -37,9 +37,10 @@ import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinMethodNode -import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangeSignatureDialog.Companion.getTypeInfo +import org.jetbrains.kotlin.idea.perf.forceUsingUltraLightClassesForTest import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangeSignatureDialog.Companion.getTypeCodeFragmentContext +import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangeSignatureDialog.Companion.getTypeInfo +import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinMethodNode import org.jetbrains.kotlin.idea.search.allScope import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex @@ -575,6 +576,11 @@ class KotlinChangeSignatureTest : KotlinLightCodeInsightFixtureTestCase() { fun testConvertParameterToReceiverForMember1() = doTest { receiverParameterInfo = newParameters[0] } + fun testConvertParameterToReceiverForMemberUltraLight() { + forceUsingUltraLightClassesForTest() + doTest { receiverParameterInfo = newParameters[0] } + } + fun testConvertParameterToReceiverForMember2() = doTest { receiverParameterInfo = newParameters[1] } fun testConvertParameterToReceiverForMemberConflict() = doTestConflict { receiverParameterInfo = newParameters[0] } @@ -1012,4 +1018,4 @@ class KotlinChangeSignatureTest : KotlinLightCodeInsightFixtureTestCase() { fun testKotlinOverridingJavaWithDifferentParamName() = doJavaTest { newParameters.add(ParameterInfoImpl(-1, "n", PsiType.INT)) } -} \ No newline at end of file +}