diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 1bffd9697fb..6208aee958f 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -75,7 +75,7 @@ class LazyJavaClassMemberScope( override fun computeMemberIndex() = ClassDeclaredMemberIndex(jClass) { !it.isStatic } override fun computeFunctionNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?) = - ownerDescriptor.typeConstructor.supertypes.flatMapTo(hashSetOf()) { + ownerDescriptor.typeConstructor.supertypes.flatMapTo(linkedSetOf()) { it.memberScope.getFunctionNames() }.apply { addAll(declaredMemberIndex().getMethodNames()) diff --git a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt new file mode 100644 index 00000000000..b567dd67924 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt @@ -0,0 +1,4 @@ +package foo + +class Impl : TestJavaInterface { +} diff --git a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt.after new file mode 100644 index 00000000000..aa8c44c5a82 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt.after @@ -0,0 +1,27 @@ +package foo + +class Impl : TestJavaInterface { + override fun onTextEvent() { + TODO("Not yet implemented") + } + + override fun onAttachmentEvent() { + TODO("Not yet implemented") + } + + override fun onEventDeleted() { + TODO("Not yet implemented") + } + + override fun onSeenReceipt() { + TODO("Not yet implemented") + } + + override fun onDeliveredReceipt() { + TODO("Not yet implemented") + } + + override fun onTypingEvent() { + TODO("Not yet implemented") + } +} diff --git a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/TestJavaInterface.java b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/TestJavaInterface.java new file mode 100644 index 00000000000..08d952f0122 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/TestJavaInterface.java @@ -0,0 +1,15 @@ +package foo; + +public interface TestJavaInterface { + void onTextEvent(); + + void onAttachmentEvent(); + + void onEventDeleted(); + + void onSeenReceipt(); + + void onDeliveredReceipt(); + + void onTypingEvent(); +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt index 319035bfa89..b12842733a4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt @@ -63,6 +63,10 @@ abstract class AbstractOverrideImplementTest : KotlinLightCodeInsightFixtureTest doDirectoryTest(OverrideMembersHandler(), memberToImplement) } + protected fun doMultiImplementDirectoryTest() { + doMultiDirectoryTest(ImplementMembersHandler()) + } + protected fun doMultiOverrideDirectoryTest() { doMultiDirectoryTest(OverrideMembersHandler()) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt index a5d510f8871..72719da9af6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt @@ -45,6 +45,10 @@ class OverrideImplementTest : AbstractOverrideImplementTest() { doImplementDirectoryTest() } + fun testJavaInterfaceMethodInCorrectOrder() { + doMultiImplementDirectoryTest() + } + fun testJavaParameters() { doImplementDirectoryTest() }