Code Insight: Allow properties with custom setters to be used in generated equals/hashCode/toString
#KT-11908 Fixed
This commit is contained in:
@@ -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-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-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-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
|
#### Debugger
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ fun getPropertiesToUseInGeneratedMember(classOrObject: KtClassOrObject): List<Kt
|
|||||||
val descriptor = it.resolveToDescriptor()
|
val descriptor = it.resolveToDescriptor()
|
||||||
when (descriptor) {
|
when (descriptor) {
|
||||||
is ValueParameterDescriptor -> true
|
is ValueParameterDescriptor -> true
|
||||||
is PropertyDescriptor -> descriptor.accessors.all { it.isDefault }
|
is PropertyDescriptor -> descriptor.getter?.isDefault ?: true
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
class Test {
|
||||||
|
var serial: String = ""
|
||||||
|
set(value) {
|
||||||
|
field = value.toUpperCase()
|
||||||
|
}
|
||||||
|
var name: String = ""
|
||||||
|
<caret>
|
||||||
|
}
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
class Test {
|
||||||
|
var serial: String = ""
|
||||||
|
set(value) {
|
||||||
|
field = value.toUpperCase()
|
||||||
|
}
|
||||||
|
var name: String = ""
|
||||||
|
<caret>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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
// GENERATOR: MULTIPLE_TEMPLATES
|
||||||
|
class Test {
|
||||||
|
var serial: String = ""
|
||||||
|
set(value) {
|
||||||
|
field = value.toUpperCase()
|
||||||
|
}
|
||||||
|
var name: String = ""
|
||||||
|
<caret>
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// GENERATOR: MULTIPLE_TEMPLATES
|
||||||
|
class Test {
|
||||||
|
var serial: String = ""
|
||||||
|
set(value) {
|
||||||
|
field = value.toUpperCase()
|
||||||
|
}
|
||||||
|
var name: String = ""
|
||||||
|
<caret>override fun toString(): String{
|
||||||
|
return "Test(" +
|
||||||
|
"serial='$serial'," +
|
||||||
|
"name='$name'" +
|
||||||
|
")"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
class Test {
|
||||||
|
var serial: String = ""
|
||||||
|
set(value) {
|
||||||
|
field = value.toUpperCase()
|
||||||
|
}
|
||||||
|
var name: String = ""
|
||||||
|
<caret>
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
class Test {
|
||||||
|
var serial: String = ""
|
||||||
|
set(value) {
|
||||||
|
field = value.toUpperCase()
|
||||||
|
}
|
||||||
|
var name: String = ""
|
||||||
|
<caret>override fun toString(): String{
|
||||||
|
return "Test(serial='$serial', name='$name')"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+6
@@ -47,6 +47,12 @@ public class GenerateHashCodeAndEqualsActionTestGenerated extends AbstractGenera
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("dataClass.kt")
|
||||||
public void testDataClass() throws Exception {
|
public void testDataClass() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/equalsWithHashCode/dataClass.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/equalsWithHashCode/dataClass.kt");
|
||||||
|
|||||||
+12
@@ -82,6 +82,12 @@ public class GenerateToStringActionTestGenerated extends AbstractGenerateToStrin
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("multipleVars.kt")
|
||||||
public void testMultipleVars() throws Exception {
|
public void testMultipleVars() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/multipeTemplates/multipleVars.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/multipeTemplates/multipleVars.kt");
|
||||||
@@ -127,6 +133,12 @@ public class GenerateToStringActionTestGenerated extends AbstractGenerateToStrin
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("multipleVars.kt")
|
||||||
public void testMultipleVars() throws Exception {
|
public void testMultipleVars() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/singleTemplate/multipleVars.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/singleTemplate/multipleVars.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user