diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt index 2d0f22d544c..2a8863a0e68 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt @@ -20,6 +20,7 @@ import com.google.common.html.HtmlEscapers import com.intellij.codeInsight.documentation.DocumentationManagerUtil import com.intellij.codeInsight.javadoc.JavaDocInfoGeneratorFactory import com.intellij.lang.documentation.AbstractDocumentationProvider +import com.intellij.lang.documentation.DocumentationMarkup import com.intellij.lang.java.JavaDocumentationProvider import com.intellij.openapi.diagnostic.Logger import com.intellij.psi.PsiElement @@ -88,6 +89,42 @@ class HtmlClassifierNamePolicy(val base: ClassifierNamePolicy) : ClassifierNameP } } +class WrapValueParameterHandler(val base: DescriptorRenderer.ValueParametersHandler) : DescriptorRenderer.ValueParametersHandler { + + + override fun appendBeforeValueParameters(parameterCount: Int, builder: StringBuilder) { + base.appendBeforeValueParameters(parameterCount, builder) + } + + override fun appendBeforeValueParameter( + parameter: ValueParameterDescriptor, + parameterIndex: Int, + parameterCount: Int, + builder: StringBuilder + ) { + builder.append("\n ") + base.appendBeforeValueParameter(parameter, parameterIndex, parameterCount, builder) + } + + override fun appendAfterValueParameter( + parameter: ValueParameterDescriptor, + parameterIndex: Int, + parameterCount: Int, + builder: StringBuilder + ) { + base.appendAfterValueParameter(parameter, parameterIndex, parameterCount, builder) + } + + override fun appendAfterValueParameters(parameterCount: Int, builder: StringBuilder) { + if (parameterCount > 0) { + builder.appendln() + } + base.appendAfterValueParameters(parameterCount, builder) + } + +} + + class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { override fun getQuickNavigateInfo(element: PsiElement?, originalElement: PsiElement?): String? { @@ -123,6 +160,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { private val DESCRIPTOR_RENDERER = DescriptorRenderer.HTML.withOptions { classifierNamePolicy = HtmlClassifierNamePolicy(ClassifierNamePolicy.SHORT) + valueParametersHandler = WrapValueParameterHandler(valueParametersHandler) renderCompanionObjectName = true } @@ -269,27 +307,32 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { } } - var renderedDecl = DESCRIPTOR_RENDERER.withOptions { + var declaration = DESCRIPTOR_RENDERER.withOptions { withDefinedIn = !DescriptorUtils.isLocal(declarationDescriptor) }.render(declarationDescriptor) - if (!quickNavigation) { - renderedDecl = "
$renderedDecl" - } + + var renderedHtml: String + + + //if (!quickNavigation) { + renderedHtml = "${DocumentationMarkup.DEFINITION_START}$declaration${DocumentationMarkup.DEFINITION_END}" + //} val deprecationProvider = ktElement.getResolutionFacade().frontendService
")) {
- renderedDecl += renderedComment
- }
- else {
- renderedDecl = "$renderedDecl
$renderedComment"
- }
+ renderedHtml += "${DocumentationMarkup.CONTENT_START}$renderedComment${DocumentationMarkup.CONTENT_END}"
+// if (renderedComment.startsWith("
")) {
+// renderedHtml += renderedComment
+// }
+// else {
+// renderedHtml = "$renderedHtml
$renderedComment"
+// }
}
else {
if (declarationDescriptor is CallableDescriptor) { // If we couldn't find KDoc, try to find javadoc in one of super's
@@ -299,13 +342,13 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
val javaDocInfoGenerator = JavaDocInfoGeneratorFactory.create(psi.project, lightElement)
val builder = StringBuilder()
if (javaDocInfoGenerator.generateDocInfoCore(builder, false))
- renderedDecl += builder.toString().substringAfter("") // Cut off light method signature
+ renderedHtml += builder.toString().substringAfter("") // Cut off light method signature
}
}
}
}
- return renderedDecl
+ return renderedHtml
}
private fun renderDeprecationInfo(