diff options
Diffstat (limited to 'src/Kotlin')
-rw-r--r-- | src/Kotlin/DocumentationBuilder.kt | 13 | ||||
-rw-r--r-- | src/Kotlin/KotlinAsJavaDocumentationBuilder.kt | 37 |
2 files changed, 34 insertions, 16 deletions
diff --git a/src/Kotlin/DocumentationBuilder.kt b/src/Kotlin/DocumentationBuilder.kt index 375ca4bd..b5b079de 100644 --- a/src/Kotlin/DocumentationBuilder.kt +++ b/src/Kotlin/DocumentationBuilder.kt @@ -45,11 +45,10 @@ private fun isSamePackage(descriptor1: DeclarationDescriptor, descriptor2: Decla } interface PackageDocumentationBuilder { - fun buildPackageDocumentation(project: Project, + fun buildPackageDocumentation(documentationBuilder: DocumentationBuilder, packageName: FqName, packageNode: DocumentationNode, - declarations: List<DeclarationDescriptor>, - options: DocumentationOptions, refGraph: NodeReferenceGraph, logger: DokkaLogger) + declarations: List<DeclarationDescriptor>) } class DocumentationBuilder(val resolutionFacade: ResolutionFacade, @@ -426,7 +425,7 @@ class DocumentationBuilder(val resolutionFacade: ResolutionFacade, if (options.skipEmptyPackages && declarations.none { it.isDocumented() }) continue logger.info(" package $packageName: ${declarations.count()} declarations") val packageNode = findOrCreatePackageNode(packageName.asString(), packageContent) - packageDocumentationBuilder.buildPackageDocumentation(resolutionFacade.project, packageName, packageNode, declarations, options, refGraph, logger) + packageDocumentationBuilder.buildPackageDocumentation(this@DocumentationBuilder, packageName, packageNode, declarations) } } @@ -666,12 +665,10 @@ class DocumentationBuilder(val resolutionFacade: ResolutionFacade, } inner class KotlinPackageDocumentationBuilder : PackageDocumentationBuilder { - override fun buildPackageDocumentation(project: Project, + override fun buildPackageDocumentation(documentationBuilder: DocumentationBuilder, packageName: FqName, packageNode: DocumentationNode, - declarations: List<DeclarationDescriptor>, - options: DocumentationOptions, - refGraph: NodeReferenceGraph, logger: DokkaLogger) { + declarations: List<DeclarationDescriptor>) { val externalClassNodes = hashMapOf<FqName, DocumentationNode>() declarations.forEach { descriptor -> if (descriptor.isDocumented()) { diff --git a/src/Kotlin/KotlinAsJavaDocumentationBuilder.kt b/src/Kotlin/KotlinAsJavaDocumentationBuilder.kt index ae295769..a32e9a1f 100644 --- a/src/Kotlin/KotlinAsJavaDocumentationBuilder.kt +++ b/src/Kotlin/KotlinAsJavaDocumentationBuilder.kt @@ -1,27 +1,48 @@ package org.jetbrains.dokka -import com.intellij.openapi.project.Project import com.intellij.psi.JavaPsiFacade +import com.intellij.psi.PsiNamedElement import org.jetbrains.kotlin.asJava.KotlinLightElement import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.psi.KtParameter +import org.jetbrains.kotlin.psi.KtPropertyAccessor class KotlinAsJavaDocumentationBuilder() : PackageDocumentationBuilder { - override fun buildPackageDocumentation(project: Project, + override fun buildPackageDocumentation(documentationBuilder: DocumentationBuilder, packageName: FqName, packageNode: DocumentationNode, - declarations: List<DeclarationDescriptor>, - options: DocumentationOptions, - refGraph: NodeReferenceGraph, - logger: DokkaLogger) { + declarations: List<DeclarationDescriptor>) { + val project = documentationBuilder.resolutionFacade.project val psiPackage = JavaPsiFacade.getInstance(project).findPackage(packageName.asString()) if (psiPackage == null) { - logger.error("Cannot find Java package by qualified name: ${packageName.asString()}") + documentationBuilder.logger.error("Cannot find Java package by qualified name: ${packageName.asString()}") return } - val javaDocumentationBuilder = JavaDocumentationBuilder(options, refGraph) + + val javaDocumentationBuilder = JavaDocumentationBuilder(documentationBuilder.options, + documentationBuilder.refGraph, + KotlinAsJavaDocumentationParser(documentationBuilder)) + psiPackage.classes.filter { it is KotlinLightElement<*, *> }.forEach { javaDocumentationBuilder.appendClasses(packageNode, arrayOf(it)) } } } + +class KotlinAsJavaDocumentationParser(val documentationBuilder: DocumentationBuilder) : JavaDocumentationParser { + override fun parseDocumentation(element: PsiNamedElement): JavadocParseResult { + val kotlinLightElement = element as? KotlinLightElement<*, *> ?: return JavadocParseResult.Empty + val origin = kotlinLightElement.getOrigin() ?: return JavadocParseResult.Empty + if (origin is KtParameter) { + // LazyDeclarationResolver does not support setter parameters + val grandFather = origin.parent?.parent + if (grandFather is KtPropertyAccessor) { + return JavadocParseResult.Empty + } + } + val descriptor = documentationBuilder.session.resolveToDescriptor(origin) + val content = documentationBuilder.parseDocumentation(descriptor) + return JavadocParseResult(content, null) + } +} |