diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt index 674c7410050..1df706cc558 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt @@ -146,9 +146,9 @@ abstract class OverrideImplementMembersHandler : LanguageCodeInsightActionHandle fun ClassDescriptor.findElement(memberDescriptor: CallableMemberDescriptor): KtDeclaration? { return implementedElements[memberDescriptor] - ?: (findCallableMemberBySignature(memberDescriptor)?.source?.getPsi() as? KtDeclaration)?.also { - implementedElements[memberDescriptor] = it - } + ?: (findCallableMemberBySignature(memberDescriptor)?.source?.getPsi() as? KtDeclaration) + ?.takeIf { it != classOrObject } + ?.also { implementedElements[memberDescriptor] = it } } fun getAnchor(selectedElement: KtDeclaration): PsiElement? { diff --git a/idea/testData/quickfix/implement/dataClass.kt b/idea/testData/quickfix/implement/dataClass.kt new file mode 100644 index 00000000000..e8810ca3079 --- /dev/null +++ b/idea/testData/quickfix/implement/dataClass.kt @@ -0,0 +1,7 @@ +// "Implement members" "true" +// WITH_RUNTIME +interface I { + fun foo() +} + +data class C(val i: Int) : I \ No newline at end of file diff --git a/idea/testData/quickfix/implement/dataClass.kt.after b/idea/testData/quickfix/implement/dataClass.kt.after new file mode 100644 index 00000000000..6193e50d51f --- /dev/null +++ b/idea/testData/quickfix/implement/dataClass.kt.after @@ -0,0 +1,11 @@ +// "Implement members" "true" +// WITH_RUNTIME +interface I { + fun foo() +} + +data class C(val i: Int) : I { + override fun foo() { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/implement/dataClass2.kt b/idea/testData/quickfix/implement/dataClass2.kt new file mode 100644 index 00000000000..74a7ddc47e6 --- /dev/null +++ b/idea/testData/quickfix/implement/dataClass2.kt @@ -0,0 +1,7 @@ +// "Implement members" "true" +// WITH_RUNTIME +interface I { + fun foo() +} + +data class C(val i: Int) : I {} \ No newline at end of file diff --git a/idea/testData/quickfix/implement/dataClass2.kt.after b/idea/testData/quickfix/implement/dataClass2.kt.after new file mode 100644 index 00000000000..6193e50d51f --- /dev/null +++ b/idea/testData/quickfix/implement/dataClass2.kt.after @@ -0,0 +1,11 @@ +// "Implement members" "true" +// WITH_RUNTIME +interface I { + fun foo() +} + +data class C(val i: Int) : I { + override fun foo() { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/implement/dataClass3.kt b/idea/testData/quickfix/implement/dataClass3.kt new file mode 100644 index 00000000000..958da0a5bb0 --- /dev/null +++ b/idea/testData/quickfix/implement/dataClass3.kt @@ -0,0 +1,9 @@ +// "Implement members" "true" +// WITH_RUNTIME +interface I { + fun foo() +} + +data class C(val i: Int) : I { + fun bar() {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/implement/dataClass3.kt.after b/idea/testData/quickfix/implement/dataClass3.kt.after new file mode 100644 index 00000000000..e4b67fef99b --- /dev/null +++ b/idea/testData/quickfix/implement/dataClass3.kt.after @@ -0,0 +1,12 @@ +// "Implement members" "true" +// WITH_RUNTIME +interface I { + fun foo() +} + +data class C(val i: Int) : I { + fun bar() {} + override fun foo() { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index be62564f1fc..de1b9979b3e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -7669,6 +7669,21 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/implement/annotation.kt"); } + @TestMetadata("dataClass.kt") + public void testDataClass() throws Exception { + runTest("idea/testData/quickfix/implement/dataClass.kt"); + } + + @TestMetadata("dataClass2.kt") + public void testDataClass2() throws Exception { + runTest("idea/testData/quickfix/implement/dataClass2.kt"); + } + + @TestMetadata("dataClass3.kt") + public void testDataClass3() throws Exception { + runTest("idea/testData/quickfix/implement/dataClass3.kt"); + } + @TestMetadata("doNotAddExpectForVal.kt") public void testDoNotAddExpectForVal() throws Exception { runTest("idea/testData/quickfix/implement/doNotAddExpectForVal.kt");