From 1684248e97e35e8fbfbd36c1c25bc677db3ae6e2 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 27 Feb 2015 20:10:37 +0100 Subject: [PATCH] Fix retrieving documentation for overridden methods. (The test doesn't actually reproduce the problem because it can't be done in a single-file setup, but it verifies that the basic functionality continues to work.) --- .../jetbrains/kotlin/idea/kdoc/KDocFinder.kt | 2 +- idea/testData/kdoc/finder/Overridden.kt | 10 ++++++++++ .../kotlin/idea/kdoc/KDocFinderTest.kt | 18 ++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 idea/testData/kdoc/finder/Overridden.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/kdoc/KDocFinder.kt b/idea/src/org/jetbrains/kotlin/idea/kdoc/KDocFinder.kt index e3315c83578..539ccfd0959 100644 --- a/idea/src/org/jetbrains/kotlin/idea/kdoc/KDocFinder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/kdoc/KDocFinder.kt @@ -46,7 +46,7 @@ object KDocFinder { if (declaration is CallableDescriptor) { for (baseDescriptor in declaration.getOverriddenDescriptors()) { - val baseKDoc = findKDoc(baseDescriptor) + val baseKDoc = findKDoc(baseDescriptor.getOriginal()) if (baseKDoc != null) { return baseKDoc } diff --git a/idea/testData/kdoc/finder/Overridden.kt b/idea/testData/kdoc/finder/Overridden.kt new file mode 100644 index 00000000000..9d936f1c305 --- /dev/null +++ b/idea/testData/kdoc/finder/Overridden.kt @@ -0,0 +1,10 @@ +open class Foo() { + /** + * Doc for method xyzzy + */ + open fun xyzzy(): Int = 0 +} + +open class Bar(): Foo() { + override fun xyzzy(): Int = 1 +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/kdoc/KDocFinderTest.kt b/idea/tests/org/jetbrains/kotlin/idea/kdoc/KDocFinderTest.kt index fdb6313fbd1..41348211262 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/kdoc/KDocFinderTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/kdoc/KDocFinderTest.kt @@ -16,12 +16,13 @@ package org.jetbrains.kotlin.idea.kdoc -import org.jetbrains.kotlin.idea.PluginTestCaseBase import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase -import org.jetbrains.kotlin.psi.JetFile -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor -import org.junit.Assert import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.idea.PluginTestCaseBase +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.JetFile +import org.junit.Assert public class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() { override fun getTestDataPath(): String { @@ -36,4 +37,13 @@ public class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() { val doc = KDocFinder.findKDoc(constructorDescriptor) Assert.assertEquals("Doc for constructor of class C.", doc!!.getContent()) } + + public fun testOverridden() { + myFixture.configureByFile(getTestName(false) + ".kt") + val declaration = (myFixture.getFile() as JetFile).getDeclarations().single { it.getName() == "Bar" } + val descriptor = declaration.resolveToDescriptor() as ClassDescriptor + val overriddenFunctionDescriptor = descriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier("xyzzy")).single() + val doc = KDocFinder.findKDoc(overriddenFunctionDescriptor) + Assert.assertEquals("Doc for method xyzzy", doc!!.getContent()) + } }