From 35517a82531e60dc265de6df68ac817b5ffeed51 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 24 May 2018 20:12:36 +0300 Subject: [PATCH] Quick Fixes: Fix adding parameter to Java constructor #KT-24574 In Progress --- .../changeSignature/KotlinChangeInfo.kt | 3 +-- .../changeSignature/KotlinChangeSignature.kt | 5 ++-- ...ConstructorParameter.after.Dependency.java | 5 ++++ .../kj/addConstructorParameter.after.kt | 4 ++++ ...onstructorParameter.before.Dependency.java | 3 +++ .../kj/addConstructorParameter.before.Main.kt | 4 ++++ .../addMethodParameter.after.Dependency.java | 5 ++++ .../kj/addMethodParameter.after.kt | 4 ++++ .../addMethodParameter.before.Dependency.java | 3 +++ .../kj/addMethodParameter.before.Main.kt | 4 ++++ .../QuickFixMultiFileTestGenerated.java | 23 +++++++++++++++++++ .../idea/quickfix/QuickFixTestGenerated.java | 13 +++++++++++ 12 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 idea/testData/quickfix/changeSignature/kj/addConstructorParameter.after.Dependency.java create mode 100644 idea/testData/quickfix/changeSignature/kj/addConstructorParameter.after.kt create mode 100644 idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Dependency.java create mode 100644 idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Main.kt create mode 100644 idea/testData/quickfix/changeSignature/kj/addMethodParameter.after.Dependency.java create mode 100644 idea/testData/quickfix/changeSignature/kj/addMethodParameter.after.kt create mode 100644 idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Dependency.java create mode 100644 idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Main.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt index 2421043ca70..8c7eba20ac7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt @@ -264,9 +264,8 @@ open class KotlinChangeInfo( } buffer.append('.') } + buffer.append(name) } - - buffer.append(name) } buffer.append(getNewParametersSignature(inheritedCallable)) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt index 508e58d5162..5904a7d304e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt @@ -153,16 +153,17 @@ class KotlinChangeSignature( // Generate new Java method signature from the Kotlin point of view val ktChangeInfo = KotlinChangeInfo(methodDescriptor = descriptor, context = defaultValueContext) val ktSignature = ktChangeInfo.getNewSignature(descriptor.originalPrimaryCallable) + val previewClassName = if (originalMethod.isConstructor) originalMethod.name else "Dummy" val dummyFileText = with(StringBuilder()) { contextFile.packageDirective?.let { append(it.text).append("\n") } - append("class Dummy {\n").append(ktSignature).append("{}\n}") + append("class $previewClassName {\n").append(ktSignature).append("{}\n}") toString() } val dummyFile = KtPsiFactory(project).createFileWithLightClassSupport("dummy.kt", dummyFileText, originalMethod) val dummyDeclaration = (dummyFile.declarations.first() as KtClass).getBody()!!.declarations.first() // Convert to PsiMethod which can be used in Change Signature dialog - val containingClass = PsiElementFactory.SERVICE.getInstance(project).createClass("Dummy") + val containingClass = PsiElementFactory.SERVICE.getInstance(project).createClass(previewClassName) val preview = createJavaMethod(dummyDeclaration.getRepresentativeLightMethod()!!, containingClass) // Create JavaChangeInfo based on new signature diff --git a/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.after.Dependency.java b/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.after.Dependency.java new file mode 100644 index 00000000000..9ef2e937924 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.after.Dependency.java @@ -0,0 +1,5 @@ +import java.util.Set; + +class Foo { + Foo(int n, String s, Set of) {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.after.kt b/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.after.kt new file mode 100644 index 00000000000..e3e37aa515f --- /dev/null +++ b/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.after.kt @@ -0,0 +1,4 @@ +// "Add parameter to constructor 'Foo'" "true" +// WITH_RUNTIME +// DISABLE-ERRORS +private val foo = Foo(1, "2", setOf("3")) \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Dependency.java b/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Dependency.java new file mode 100644 index 00000000000..e6e56f4987a --- /dev/null +++ b/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Dependency.java @@ -0,0 +1,3 @@ +class Foo { + Foo(int n, String s) {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Main.kt b/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Main.kt new file mode 100644 index 00000000000..e3e37aa515f --- /dev/null +++ b/idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Main.kt @@ -0,0 +1,4 @@ +// "Add parameter to constructor 'Foo'" "true" +// WITH_RUNTIME +// DISABLE-ERRORS +private val foo = Foo(1, "2", setOf("3")) \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/kj/addMethodParameter.after.Dependency.java b/idea/testData/quickfix/changeSignature/kj/addMethodParameter.after.Dependency.java new file mode 100644 index 00000000000..b58c1708ee5 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/kj/addMethodParameter.after.Dependency.java @@ -0,0 +1,5 @@ +import java.util.Set; + +class Foo { + void bar(int n, String s, Set of) {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/kj/addMethodParameter.after.kt b/idea/testData/quickfix/changeSignature/kj/addMethodParameter.after.kt new file mode 100644 index 00000000000..a272ad5cf77 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/kj/addMethodParameter.after.kt @@ -0,0 +1,4 @@ +// "Add parameter to function 'bar'" "true" +// WITH_RUNTIME +// DISABLE-ERRORS +private val foo = Foo().bar(1, "2", setOf("3")) \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Dependency.java b/idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Dependency.java new file mode 100644 index 00000000000..722945eb557 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Dependency.java @@ -0,0 +1,3 @@ +class Foo { + void bar(int n, String s) {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Main.kt b/idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Main.kt new file mode 100644 index 00000000000..a272ad5cf77 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Main.kt @@ -0,0 +1,4 @@ +// "Add parameter to function 'bar'" "true" +// WITH_RUNTIME +// DISABLE-ERRORS +private val foo = Foo().bar(1, "2", setOf("3")) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index 4d705305ea9..b31ce5d94a7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -1100,6 +1100,29 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes runTest("idea/testData/quickfix/changeSignature/jk/jkRemoveSecondaryConstructorParameter.before.Main.java"); } } + + @TestMetadata("idea/testData/quickfix/changeSignature/kj") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Kj extends AbstractQuickFixMultiFileTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTestWithExtraFile, TargetBackend.ANY, testDataFilePath); + } + + @TestMetadata("addConstructorParameter.before.Main.kt") + public void testAddConstructorParameter() throws Exception { + runTest("idea/testData/quickfix/changeSignature/kj/addConstructorParameter.before.Main.kt"); + } + + @TestMetadata("addMethodParameter.before.Main.kt") + public void testAddMethodParameter() throws Exception { + runTest("idea/testData/quickfix/changeSignature/kj/addMethodParameter.before.Main.kt"); + } + + public void testAllFilesPresentInKj() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/changeSignature/kj"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), TargetBackend.ANY, true); + } + } } @TestMetadata("idea/testData/quickfix/changeToLabeledReturn") diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 5e1561b60ed..b3a444a5b4a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -1695,6 +1695,19 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/changeSignature/jk"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); } } + + @TestMetadata("idea/testData/quickfix/changeSignature/kj") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Kj extends AbstractQuickFixTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInKj() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/changeSignature/kj"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); + } + } } @TestMetadata("idea/testData/quickfix/changeToLabeledReturn")