diff --git a/ChangeLog.md b/ChangeLog.md index cf718dd4ed4..e0b4e991b26 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -113,6 +113,12 @@ These artifacts include extensions for the types available in the latter JDKs, s - [`KT-13037`](https://youtrack.jetbrains.com/issue/KT-13037) Fix possible deadlock in debugger in 2016.1 and exception in 2016.2 - [`KT-12651`](https://youtrack.jetbrains.com/issue/KT-12651) Fix exception in evaluate expression when bad identifier is used for marking object +#### Intention actions, inspections and quickfixes + +###### Issues fixed + +- [`KT-11115`](https://youtrack.jetbrains.com/issue/KT-11115) Implement Members: Fix base member detection when abstract and non-abstract members with matching signatures are inherited from an interface + #### Refactorings ###### Issues fixed diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java index 4686e7f9037..140373afde3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java @@ -334,7 +334,9 @@ public class OverrideResolver { @Override public void conflictingInterfaceMemberNotImplemented(CallableMemberDescriptor descriptor) { - // don't care + if (descriptor.getModality() == Modality.ABSTRACT) { + shouldImplement.add(descriptor); + } } @Override diff --git a/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt b/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt new file mode 100644 index 00000000000..084a486e855 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt @@ -0,0 +1,11 @@ +interface T { + fun getFoo(): String = "" +} + +interface U { + fun getFoo(): String +} + +class C1 : T, U { + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt.after b/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt.after new file mode 100644 index 00000000000..8296de3a875 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt.after @@ -0,0 +1,13 @@ +interface T { + fun getFoo(): String = "" +} + +interface U { + fun getFoo(): String +} + +class C1 : T, U { + override fun getFoo(): String { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} \ 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 4556ebac337..4178cd2ee58 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt @@ -247,4 +247,8 @@ class OverrideImplementTest : AbstractOverrideImplementTest() { fun testPlatformTypes() { doOverrideDirectoryTest("foo") } + + fun testAbstractAndNonAbstractInheritedFromInterface() { + doImplementFileTest("getFoo") + } }