Override Members: Allow overriding virtual synthetic members (e.g. equals(), hashCode(), toString(), etc.) in data classes
#KT-15563 Fixed
This commit is contained in:
@@ -474,6 +474,7 @@ These artifacts include extensions for the types available in the latter JDKs, s
|
|||||||
- [`KT-15602`](https://youtrack.jetbrains.com/issue/KT-15602) Extract Interface/Superclass: Disable "Make abstract" for inline/external/lateinit members
|
- [`KT-15602`](https://youtrack.jetbrains.com/issue/KT-15602) Extract Interface/Superclass: Disable "Make abstract" for inline/external/lateinit members
|
||||||
- Extract Interface: Disable inline/external/lateinit members
|
- Extract Interface: Disable inline/external/lateinit members
|
||||||
- [`KT-12704`](https://youtrack.jetbrains.com/issue/KT-12704), [`KT-15583`](https://youtrack.jetbrains.com/issue/KT-15583) Override/Implement Members: Support all nullability annotations respected by the Kotlin compiler
|
- [`KT-12704`](https://youtrack.jetbrains.com/issue/KT-12704), [`KT-15583`](https://youtrack.jetbrains.com/issue/KT-15583) Override/Implement Members: Support all nullability annotations respected by the Kotlin compiler
|
||||||
|
- [`KT-15563`](https://youtrack.jetbrains.com/issue/KT-15563) Override Members: Allow overriding virtual synthetic members (e.g. equals(), hashCode(), toString(), etc.) in data classes
|
||||||
|
|
||||||
#### Intention actions, inspections and quickfixes
|
#### Intention actions, inspections and quickfixes
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -27,8 +27,7 @@ class OverrideMembersHandler(private val preferConstructorParameters: Boolean =
|
|||||||
override fun collectMembersToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
|
override fun collectMembersToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
|
||||||
val result = ArrayList<OverrideMemberChooserObject>()
|
val result = ArrayList<OverrideMemberChooserObject>()
|
||||||
for (member in descriptor.unsubstitutedMemberScope.getContributedDescriptors()) {
|
for (member in descriptor.unsubstitutedMemberScope.getContributedDescriptors()) {
|
||||||
if (member is CallableMemberDescriptor
|
if (member is CallableMemberDescriptor && (member.kind != CallableMemberDescriptor.Kind.DECLARATION)) {
|
||||||
&& (member.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE || member.kind == CallableMemberDescriptor.Kind.DELEGATION)) {
|
|
||||||
val overridden = member.overriddenDescriptors
|
val overridden = member.overriddenDescriptors
|
||||||
if (overridden.any { it.modality == Modality.FINAL || Visibilities.isPrivate(it.visibility.normalize()) }) continue
|
if (overridden.any { it.modality == Modality.FINAL || Visibilities.isPrivate(it.visibility.normalize()) }) continue
|
||||||
|
|
||||||
@@ -52,7 +51,7 @@ class OverrideMembersHandler(private val preferConstructorParameters: Boolean =
|
|||||||
nonAbstractRealSupers
|
nonAbstractRealSupers
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
listOf(realSupers.first())
|
listOf(realSupers.firstOrNull() ?: continue)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (realSuper in realSupersToUse) {
|
for (realSuper in realSupersToUse) {
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
data class Foo(val name: String) {
|
||||||
|
<caret>
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
data class Foo(val name: String) {
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
<selection>return super.equals(other)</selection>
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -271,4 +271,8 @@ class OverrideImplementTest : AbstractOverrideImplementTest() {
|
|||||||
fun testTypeAliasNotExpanded() {
|
fun testTypeAliasNotExpanded() {
|
||||||
doOverrideFileTest("test")
|
doOverrideFileTest("test")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testDataClassEquals() {
|
||||||
|
doOverrideFileTest("equals")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user