From cbbdec58989449acb25f1606cc8292f15f70c666 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 11 Jun 2020 18:10:12 +0900 Subject: [PATCH] Change Signature: enable on primary constructor keyword (#2482) #KT-19744 Fixed --- .../KotlinChangeSignatureHandler.kt | 1 + ...aryConstructorOnConstructorKeywordAfter.kt | 25 +++++++++++++++++++ ...ryConstructorOnConstructorKeywordBefore.kt | 25 +++++++++++++++++++ .../KotlinChangeSignatureTest.kt | 14 +++++++++++ 4 files changed, 65 insertions(+) create mode 100644 idea/testData/refactoring/changeSignature/PrimaryConstructorOnConstructorKeywordAfter.kt create mode 100644 idea/testData/refactoring/changeSignature/PrimaryConstructorOnConstructorKeywordBefore.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureHandler.kt index 2d50107c427..07139b3b2ca 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureHandler.kt @@ -79,6 +79,7 @@ class KotlinChangeSignatureHandler : ChangeSignatureHandler { ) return elementParent } + if (elementParent is KtPrimaryConstructor && elementParent.getConstructorKeyword() === element) return elementParent if (elementParent is KtSecondaryConstructor && elementParent.getConstructorKeyword() === element) return elementParent element.getStrictParentOfType()?.let { parameterList -> diff --git a/idea/testData/refactoring/changeSignature/PrimaryConstructorOnConstructorKeywordAfter.kt b/idea/testData/refactoring/changeSignature/PrimaryConstructorOnConstructorKeywordAfter.kt new file mode 100644 index 00000000000..5677e8317c4 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/PrimaryConstructorOnConstructorKeywordAfter.kt @@ -0,0 +1,25 @@ +open class A internal constructor(s: String) { + constructor(a: Int) : this("foo") { + + } +} + +open class B : A { + constructor() : super("foo") { + + } +} + +open class C : A { + constructor() : super("foo") { + + } +} + +class D : A("foo") { + +} + +fun test() { + A("foo") +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/PrimaryConstructorOnConstructorKeywordBefore.kt b/idea/testData/refactoring/changeSignature/PrimaryConstructorOnConstructorKeywordBefore.kt new file mode 100644 index 00000000000..af27df84963 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/PrimaryConstructorOnConstructorKeywordBefore.kt @@ -0,0 +1,25 @@ +open class A internal constructor() { + constructor(a: Int) : this() { + + } +} + +open class B : A { + constructor() : super() { + + } +} + +open class C : A { + constructor() { + + } +} + +class D : A() { + +} + +fun test() { + A() +} \ 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 5bd7ff6cc41..5b633e90cd3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt @@ -808,6 +808,20 @@ class KotlinChangeSignatureTest : KotlinLightCodeInsightFixtureTestCase() { } } + fun testPrimaryConstructorOnConstructorKeyword() = doTest { + val defaultValueForCall = KtPsiFactory(project).createExpression("\"foo\"") + addParameter( + KotlinParameterInfo( + originalBaseFunctionDescriptor, + -1, + "s", + KotlinTypeInfo(false, BUILT_INS.stringType), + null, + defaultValueForCall + ) + ) + } + fun testJavaConstructorInDelegationCall() { doJavaTest { newParameters.add(ParameterInfoImpl(-1, "s", stringPsiType, "\"foo\"")) } }