From 8bef335b71ee09b5ea7072286a9064b94f463860 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 28 Oct 2015 15:32:26 +0300 Subject: [PATCH] Don't propose to generate Any methods in interface to avoid METHOD_OF_ANY_IMPLEMENTED_IN_INTERFACE error (KT-9796) #KT-9796 Fixed --- .../idea/core/overrideImplement/OverrideMembersHandler.kt | 4 ++++ .../codeInsight/overrideImplement/noAnyMembersInInterface.kt | 3 +++ .../overrideImplement/noAnyMembersInInterface.kt.after | 3 +++ .../kotlin/idea/codeInsight/OverrideImplementTest.kt | 4 ++++ 4 files changed, 14 insertions(+) create mode 100644 idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt create mode 100644 idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt.after diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMembersHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMembersHandler.kt index a0c46a6081e..79b849a6355 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMembersHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMembersHandler.kt @@ -19,6 +19,8 @@ package org.jetbrains.kotlin.idea.core.overrideImplement import com.intellij.openapi.project.Project import com.intellij.util.SmartList import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import java.util.* public class OverrideMembersHandler : OverrideImplementMembersHandler() { @@ -30,6 +32,8 @@ public class OverrideMembersHandler : OverrideImplementMembersHandler() { val overridden = member.overriddenDescriptors if (overridden.any { it.modality == Modality.FINAL || Visibilities.isPrivate(it.visibility.normalize()) }) continue + if (DescriptorUtils.isInterface(descriptor) && overridden.any { descriptor.builtIns.isMemberOfAny(it) }) continue + class Data( val realSuper: CallableMemberDescriptor, val immediateSupers: MutableList = SmartList() diff --git a/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt b/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt new file mode 100644 index 00000000000..dc00de97d40 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt @@ -0,0 +1,3 @@ +interface I { + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt.after b/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt.after new file mode 100644 index 00000000000..dc00de97d40 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt.after @@ -0,0 +1,3 @@ +interface I { + +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt index 21e510be184..b58d5c52cf2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt @@ -184,6 +184,10 @@ public class OverrideImplementTest : AbstractOverrideImplementTest() { doMultiOverrideFileTest() } + public fun testNoAnyMembersInInterface() { + doMultiOverrideFileTest() + } + public fun testLocalClass() { doImplementFileTest() }