From 38522b09ce4bfeeceafe7f836ef7ddba900774f3 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 14 Apr 2016 17:07:30 +0300 Subject: [PATCH] Code Insight: Allow properties with custom setters to be used in generated equals/hashCode/toString #KT-11908 Fixed --- ChangeLog.md | 1 + .../kotlin/idea/actions/generate/utils.kt | 2 +- .../equalsWithHashCode/customAccessors.kt | 8 ++++++ .../customAccessors.kt.after | 25 +++++++++++++++++++ .../multipeTemplates/customAccessors.kt | 9 +++++++ .../multipeTemplates/customAccessors.kt.after | 15 +++++++++++ .../singleTemplate/customAccessors.kt | 8 ++++++ .../singleTemplate/customAccessors.kt.after | 11 ++++++++ ...eHashCodeAndEqualsActionTestGenerated.java | 6 +++++ .../GenerateToStringActionTestGenerated.java | 12 +++++++++ 10 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt create mode 100644 idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt.after create mode 100644 idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt create mode 100644 idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt.after create mode 100644 idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt create mode 100644 idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt.after diff --git a/ChangeLog.md b/ChangeLog.md index 8cdda60f86a..ed80b8c9ca3 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -22,6 +22,7 @@ Issues fixed: - [KT-11495](https://youtrack.jetbrains.com/issue/KT-11495) Show recursion line markers for extension function calls with different receiver - [KT-11659](https://youtrack.jetbrains.com/issue/KT-11659) Generate abstract overrides for Any members inside of Kotlin interfaces - [KT-11866](https://youtrack.jetbrains.com/issue/KT-11866) Suggest "Create secondary constructor" when constructors exist but are not applicable +- [KT-11908](https://youtrack.jetbrains.com/issue/KT-11866) Allow properties with custom setters to be used in generated equals/hashCode/toString #### Debugger diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/generate/utils.kt b/idea/src/org/jetbrains/kotlin/idea/actions/generate/utils.kt index 48efd2af7bf..ddd788e7f81 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/generate/utils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/generate/utils.kt @@ -52,7 +52,7 @@ fun getPropertiesToUseInGeneratedMember(classOrObject: KtClassOrObject): List true - is PropertyDescriptor -> descriptor.accessors.all { it.isDefault } + is PropertyDescriptor -> descriptor.getter?.isDefault ?: true else -> false } } diff --git a/idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt b/idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt new file mode 100644 index 00000000000..298e17ea97c --- /dev/null +++ b/idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt @@ -0,0 +1,8 @@ +class Test { + var serial: String = "" + set(value) { + field = value.toUpperCase() + } + var name: String = "" + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt.after b/idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt.after new file mode 100644 index 00000000000..4c33ee5eb28 --- /dev/null +++ b/idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt.after @@ -0,0 +1,25 @@ +class Test { + var serial: String = "" + set(value) { + field = value.toUpperCase() + } + var name: String = "" + override fun equals(other: Any?): Boolean{ + if (this === other) return true + if (other?.javaClass != javaClass) return false + + other as Test + + if (serial != other.serial) return false + if (name != other.name) return false + + return true + } + + override fun hashCode(): Int{ + var result = serial.hashCode() + result = 31 * result + name.hashCode() + return result + } + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt b/idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt new file mode 100644 index 00000000000..883aba89717 --- /dev/null +++ b/idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt @@ -0,0 +1,9 @@ +// GENERATOR: MULTIPLE_TEMPLATES +class Test { + var serial: String = "" + set(value) { + field = value.toUpperCase() + } + var name: String = "" + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt.after b/idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt.after new file mode 100644 index 00000000000..6157c295300 --- /dev/null +++ b/idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt.after @@ -0,0 +1,15 @@ +// GENERATOR: MULTIPLE_TEMPLATES +class Test { + var serial: String = "" + set(value) { + field = value.toUpperCase() + } + var name: String = "" + override fun toString(): String{ + return "Test(" + + "serial='$serial'," + + "name='$name'" + + ")" + } + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt b/idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt new file mode 100644 index 00000000000..298e17ea97c --- /dev/null +++ b/idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt @@ -0,0 +1,8 @@ +class Test { + var serial: String = "" + set(value) { + field = value.toUpperCase() + } + var name: String = "" + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt.after b/idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt.after new file mode 100644 index 00000000000..209fbf33a02 --- /dev/null +++ b/idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt.after @@ -0,0 +1,11 @@ +class Test { + var serial: String = "" + set(value) { + field = value.toUpperCase() + } + var name: String = "" + override fun toString(): String{ + return "Test(serial='$serial', name='$name')" + } + +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateHashCodeAndEqualsActionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateHashCodeAndEqualsActionTestGenerated.java index 37c718c7c99..e9593d2ff18 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateHashCodeAndEqualsActionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateHashCodeAndEqualsActionTestGenerated.java @@ -47,6 +47,12 @@ public class GenerateHashCodeAndEqualsActionTestGenerated extends AbstractGenera doTest(fileName); } + @TestMetadata("customAccessors.kt") + public void testCustomAccessors() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/equalsWithHashCode/customAccessors.kt"); + doTest(fileName); + } + @TestMetadata("dataClass.kt") public void testDataClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/equalsWithHashCode/dataClass.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java index f464d2e2e7f..890e0641210 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java @@ -82,6 +82,12 @@ public class GenerateToStringActionTestGenerated extends AbstractGenerateToStrin doTest(fileName); } + @TestMetadata("customAccessors.kt") + public void testCustomAccessors() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/multipeTemplates/customAccessors.kt"); + doTest(fileName); + } + @TestMetadata("multipleVars.kt") public void testMultipleVars() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/multipeTemplates/multipleVars.kt"); @@ -127,6 +133,12 @@ public class GenerateToStringActionTestGenerated extends AbstractGenerateToStrin doTest(fileName); } + @TestMetadata("customAccessors.kt") + public void testCustomAccessors() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/singleTemplate/customAccessors.kt"); + doTest(fileName); + } + @TestMetadata("multipleVars.kt") public void testMultipleVars() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/singleTemplate/multipleVars.kt");