From 89132b3f66a2e3c580b481af3f8ae8ba18c26acf Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 23 Oct 2015 14:28:16 +0300 Subject: [PATCH] Generate Secondary Constructor: Forbid inside of class with explicit primary constructor --- ...KotlinGenerateSecondaryConstructorAction.kt | 6 +++++- ...supersPrimaryExists.kt => primaryExists.kt} | 9 +++------ .../supersPrimaryExists.kt.after | 18 ------------------ .../CodeInsightActionTestGenerated.java | 12 ++++++------ 4 files changed, 14 insertions(+), 31 deletions(-) rename idea/testData/codeInsight/generate/secondaryConstructors/{supersPrimaryExists.kt => primaryExists.kt} (54%) delete mode 100644 idea/testData/codeInsight/generate/secondaryConstructors/supersPrimaryExists.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateSecondaryConstructorAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateSecondaryConstructorAction.kt index 705265b186a..094b366ef23 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateSecondaryConstructorAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateSecondaryConstructorAction.kt @@ -60,7 +60,11 @@ class KotlinGenerateSecondaryConstructorAction : KotlinGenerateMemberActionBase< ) override fun isValidForClass(targetClass: KtClassOrObject): Boolean { - return targetClass is KtClass && targetClass !is KtEnumEntry && !targetClass.isInterface() && !targetClass.isAnnotation() + return targetClass is KtClass + && targetClass !is KtEnumEntry + && !targetClass.isInterface() + && !targetClass.isAnnotation() + && !targetClass.hasExplicitPrimaryConstructor() } private fun shouldPreselect(element: PsiElement) = element is KtProperty && !element.isVar diff --git a/idea/testData/codeInsight/generate/secondaryConstructors/supersPrimaryExists.kt b/idea/testData/codeInsight/generate/secondaryConstructors/primaryExists.kt similarity index 54% rename from idea/testData/codeInsight/generate/secondaryConstructors/supersPrimaryExists.kt rename to idea/testData/codeInsight/generate/secondaryConstructors/primaryExists.kt index 6921e0e9a2a..fdc19869519 100644 --- a/idea/testData/codeInsight/generate/secondaryConstructors/supersPrimaryExists.kt +++ b/idea/testData/codeInsight/generate/secondaryConstructors/primaryExists.kt @@ -1,10 +1,7 @@ // ACTION_CLASS: org.jetbrains.kotlin.idea.actions.generate.KotlinGenerateSecondaryConstructorAction -open class Base(n: Int) { - constructor(a: Int, b: Int): this(a + b) -} - -class Foo(x: Int) : Base(x) { - val x = 1 +// NOT_APPLICABLE +class Foo(x: Int) { + val x: Int fun foo() { diff --git a/idea/testData/codeInsight/generate/secondaryConstructors/supersPrimaryExists.kt.after b/idea/testData/codeInsight/generate/secondaryConstructors/supersPrimaryExists.kt.after deleted file mode 100644 index b2cfb6d5b4e..00000000000 --- a/idea/testData/codeInsight/generate/secondaryConstructors/supersPrimaryExists.kt.after +++ /dev/null @@ -1,18 +0,0 @@ -// ACTION_CLASS: org.jetbrains.kotlin.idea.actions.generate.KotlinGenerateSecondaryConstructorAction -open class Base(n: Int) { - constructor(a: Int, b: Int): this(a + b) -} - -class Foo(x: Int) : Base(x) { - val x = 1 - - constructor(a: Int, b: Int) : super(a, b) - - fun foo() { - - } - - fun bar() { - - } -} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/CodeInsightActionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/CodeInsightActionTestGenerated.java index cf3e711578d..4f76f3ce68e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/CodeInsightActionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/CodeInsightActionTestGenerated.java @@ -59,6 +59,12 @@ public class CodeInsightActionTestGenerated extends AbstractCodeInsightActionTes doTest(fileName); } + @TestMetadata("primaryExists.kt") + public void testPrimaryExists() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/codeInsight/generate/secondaryConstructors/primaryExists.kt"); + doTest(fileName); + } + @TestMetadata("properties.kt") public void testProperties() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/codeInsight/generate/secondaryConstructors/properties.kt"); @@ -83,12 +89,6 @@ public class CodeInsightActionTestGenerated extends AbstractCodeInsightActionTes doTest(fileName); } - @TestMetadata("supersPrimaryExists.kt") - public void testSupersPrimaryExists() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/codeInsight/generate/secondaryConstructors/supersPrimaryExists.kt"); - doTest(fileName); - } - @TestMetadata("supersSomeExist.kt") public void testSupersSomeExist() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/codeInsight/generate/secondaryConstructors/supersSomeExist.kt");