Fix for KT-13699 Quick documentation doesn't show supertype docs for overridden Java
This commit is contained in:
@@ -18,12 +18,18 @@ package org.jetbrains.kotlin.idea
|
||||
|
||||
import com.google.common.html.HtmlEscapers
|
||||
import com.intellij.codeInsight.documentation.DocumentationManagerUtil
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGenerator
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGeneratorFactory
|
||||
import com.intellij.lang.documentation.AbstractDocumentationProvider
|
||||
import com.intellij.lang.java.JavaDocumentationProvider
|
||||
import com.intellij.lang.java.JavaLanguage
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.PsiMethod
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
@@ -36,6 +42,7 @@ import org.jetbrains.kotlin.idea.kdoc.findKDoc
|
||||
import org.jetbrains.kotlin.idea.kdoc.isBoringBuiltinClass
|
||||
import org.jetbrains.kotlin.idea.kdoc.resolveKDocLink
|
||||
import org.jetbrains.kotlin.idea.references.mainReference
|
||||
import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||
@@ -169,6 +176,18 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
|
||||
renderedDecl = "$renderedDecl<br/>$renderedComment"
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (declarationDescriptor is CallableDescriptor) { // If we couldn't find KDoc, try to find javadoc in one of super's
|
||||
val psi = declarationDescriptor.findPsi() as? KtFunction
|
||||
if (psi != null) {
|
||||
val lightElement = LightClassUtil.getLightClassMethod(psi) // Light method for super's scan in javadoc info gen
|
||||
val javaDocInfoGenerator = JavaDocInfoGeneratorFactory.create(psi.project, lightElement)
|
||||
val builder = StringBuilder()
|
||||
if (javaDocInfoGenerator.generateDocInfoCore(builder, false))
|
||||
renderedDecl += builder.toString().substringAfter("</PRE>") // Cut off light method signature
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return renderedDecl
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class A : OverrideMe() {
|
||||
override fun <caret>overrideMe() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//INFO: <b>protected</b> <b>open</b> <b>fun</b> overrideMe(): Unit <i>defined in</i> A<DD><DL><DT><b>Description copied from class:</b> <a href="psi_element://OverrideMe"><code>OverrideMe</code></a><br>
|
||||
//INFO: Some comment
|
||||
//INFO: </DD></DL></DD><DD><DL><DT><b>Overrides:</b><DD><a href="psi_element://OverrideMe#overrideMe()"><code>overrideMe</code></a> in class <a href="psi_element://OverrideMe"><code>OverrideMe</code></a></DD></DL></DD>
|
||||
@@ -0,0 +1,6 @@
|
||||
public class OverrideMe {
|
||||
/**
|
||||
* Some comment
|
||||
*/
|
||||
void overrideMe();
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
class A : OverrideMe {
|
||||
override fun <caret>overrideMe() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//INFO: <b>public</b> <b>open</b> <b>fun</b> overrideMe(): Unit <i>defined in</i> A<DD><DL><DT><b>Description copied from interface:</b> <a href="psi_element://OverrideMe"><code>OverrideMe</code></a><br>
|
||||
//INFO: Some comment
|
||||
//INFO: </DD></DL></DD><DD><DL><DT><b>Specified by:</b><DD><a href="psi_element://OverrideMe#overrideMe()"><code>overrideMe</code></a> in interface <a href="psi_element://OverrideMe"><code>OverrideMe</code></a></DD></DL></DD>
|
||||
@@ -0,0 +1,6 @@
|
||||
interface OverrideMe {
|
||||
/**
|
||||
* Some comment
|
||||
*/
|
||||
void overrideMe();
|
||||
}
|
||||
+12
@@ -96,6 +96,18 @@ public class QuickDocProviderTestGenerated extends AbstractQuickDocProviderTest
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("JavaDocFromOverridenClass.kt")
|
||||
public void testJavaDocFromOverridenClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/quickDoc/JavaDocFromOverridenClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("JavaDocFromOverridenInterface.kt")
|
||||
public void testJavaDocFromOverridenInterface() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/quickDoc/JavaDocFromOverridenInterface.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("JavaMethodUsedInKotlin.kt")
|
||||
public void testJavaMethodUsedInKotlin() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/quickDoc/JavaMethodUsedInKotlin.kt");
|
||||
|
||||
Reference in New Issue
Block a user