Fix enum special function quick navigation behaviour

This commit is contained in:
Simon Ogorodnik
2018-06-18 19:40:29 +03:00
parent 9a34e91dec
commit 48d0493edb
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper
import org.jetbrains.kotlin.idea.kdoc.* import org.jetbrains.kotlin.idea.kdoc.*
import org.jetbrains.kotlin.idea.kdoc.KDocRenderer.appendKDocContent import org.jetbrains.kotlin.idea.kdoc.KDocRenderer.appendKDocContent
import org.jetbrains.kotlin.idea.kdoc.KDocRenderer.appendKDocSection import org.jetbrains.kotlin.idea.kdoc.KDocRenderer.appendKDocSection
import org.jetbrains.kotlin.idea.kdoc.KDocRenderer.renderKDocContent
import org.jetbrains.kotlin.idea.kdoc.KDocTemplate.DescriptionBodyTemplate import org.jetbrains.kotlin.idea.kdoc.KDocTemplate.DescriptionBodyTemplate
import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.resolve.frontendService import org.jetbrains.kotlin.idea.resolve.frontendService
@@ -60,6 +59,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.utils.addToStdlib.constant import org.jetbrains.kotlin.utils.addToStdlib.constant
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class HtmlClassifierNamePolicy(val base: ClassifierNamePolicy) : ClassifierNamePolicy { class HtmlClassifierNamePolicy(val base: ClassifierNamePolicy) : ClassifierNamePolicy {
override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String {
@@ -173,10 +173,6 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
} }
private fun renderEnumSpecialFunction(element: KtClass, functionDescriptor: FunctionDescriptor, quickNavigation: Boolean): String { private fun renderEnumSpecialFunction(element: KtClass, functionDescriptor: FunctionDescriptor, quickNavigation: Boolean): String {
val renderedDeclaration = DESCRIPTOR_RENDERER.render(functionDescriptor)
if (quickNavigation) return renderedDeclaration
val kdoc = run { val kdoc = run {
val declarationDescriptor = element.resolveToDescriptorIfAny() val declarationDescriptor = element.resolveToDescriptorIfAny()
val enumDescriptor = declarationDescriptor?.getSuperClassNotAny() ?: return@run null val enumDescriptor = declarationDescriptor?.getSuperClassNotAny() ?: return@run null
@@ -198,7 +194,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
definition { definition {
renderDefinition(functionDescriptor, DESCRIPTOR_RENDERER) renderDefinition(functionDescriptor, DESCRIPTOR_RENDERER)
} }
if (section != null) { if (!quickNavigation && section != null) {
description { description {
insert(DescriptionBodyTemplate.Kotlin()) { insert(DescriptionBodyTemplate.Kotlin()) {
content { content {
@@ -380,16 +376,25 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
if (!fqName.isRoot) { if (!fqName.isRoot) {
DocumentationManagerUtil.createHyperlink(this, fqName.asString(), fqName.asString(), false) DocumentationManagerUtil.createHyperlink(this, fqName.asString(), fqName.asString(), false)
} }
if (containingDeclaration is PackageFragmentDescriptor && descriptor is DeclarationDescriptorWithSource) { val fileName =
descriptor
.safeAs<DeclarationDescriptorWithSource>()
?.source
?.containingFile
?.name
?.takeIf { containingDeclaration is PackageFragmentDescriptor }
if (fileName != null) {
if (!fqName.isRoot) { if (!fqName.isRoot) {
append(" ") append(" ")
} }
append("(") append("(")
append(descriptor.source.containingFile.name) append(fileName)
append(")") append(")")
} }
if (fileName != null || !fqName.isRoot) {
append("<br>") append("<br>")
}
} }
} }