diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/kdoc/findKDoc.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/kdoc/findKDoc.kt index 791f523dea2..06271f3e31e 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/kdoc/findKDoc.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/kdoc/findKDoc.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.kdoc +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag import org.jetbrains.kotlin.kdoc.psi.api.KDoc @@ -23,11 +24,13 @@ import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -import org.jetbrains.kotlin.resolve.source.PsiSourceElement +import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils -fun DeclarationDescriptor.findKDoc(): KDocTag? { +fun DeclarationDescriptor.findKDoc( + descriptorToPsi: (DeclarationDescriptorWithSource) -> PsiElement? = { DescriptorToSourceUtils.descriptorToDeclaration(it) } +): KDocTag? { if (this is DeclarationDescriptorWithSource) { - var psiDeclaration = (this.source as? PsiSourceElement)?.psi?.navigationElement + var psiDeclaration = descriptorToPsi(this)?.navigationElement // KDoc for primary constructor is located inside of its class KDoc if (psiDeclaration is KtPrimaryConstructor) { psiDeclaration = psiDeclaration.getContainingClassOrObject() @@ -51,7 +54,7 @@ fun DeclarationDescriptor.findKDoc(): KDocTag? { if (this is PropertyDescriptor) { val containingClassDescriptor = this.containingDeclaration as? ClassDescriptor if (containingClassDescriptor != null) { - val classKDoc = containingClassDescriptor.findKDoc()?.getParentOfType(false) + val classKDoc = containingClassDescriptor.findKDoc(descriptorToPsi)?.getParentOfType(false) if (classKDoc != null) { val propertySection = classKDoc.findSectionByTag(KDocKnownTag.PROPERTY, getName().asString()) @@ -64,7 +67,7 @@ fun DeclarationDescriptor.findKDoc(): KDocTag? { if (this is CallableDescriptor) { for (baseDescriptor in this.overriddenDescriptors) { - val baseKDoc = baseDescriptor.original.findKDoc() + val baseKDoc = baseDescriptor.original.findKDoc(descriptorToPsi) if (baseKDoc != null) { return baseKDoc } diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt index bf07b3f2904..2b9ee306831 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt @@ -281,7 +281,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { renderedDecl += renderDeprecationInfo(declarationDescriptor, deprecationProvider) if (!quickNavigation) { - val comment = declarationDescriptor.findKDoc() + val comment = declarationDescriptor.findKDoc { DescriptorToSourceUtilsIde.getAnyDeclaration(ktElement.project, it) } if (comment != null) { val renderedComment = KDocRenderer.renderKDoc(comment) if (renderedComment.startsWith("

")) { diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/kdoc/KDocMissingDocumentationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/kdoc/KDocMissingDocumentationInspection.kt index 394698d4db7..39fbd1817b2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/kdoc/KDocMissingDocumentationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/kdoc/KDocMissingDocumentationInspection.kt @@ -27,6 +27,7 @@ import com.intellij.psi.impl.source.PostprocessReformattingAspect import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny +import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.unblockDocument import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection import org.jetbrains.kotlin.idea.inspections.describe @@ -55,7 +56,7 @@ class KDocMissingDocumentationInspection() : AbstractKotlinInspection() { as? DeclarationDescriptorWithVisibility as? MemberDescriptor ?: return if (nameIdentifier != null && descriptor.isEffectivelyPublicApi) { - if (descriptor.findKDoc() == null) { + if (descriptor.findKDoc { DescriptorToSourceUtilsIde.getAnyDeclaration(element.project, it) } == null) { val message = element.describe()?.let { "$it is missing documentation" } ?: "Missing documentation" holder.registerProblem(nameIdentifier, message, AddDocumentationFix()) }