aboutsummaryrefslogtreecommitdiff
path: root/src/Kotlin/KotlinAsJavaDocumentationBuilder.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/Kotlin/KotlinAsJavaDocumentationBuilder.kt')
-rw-r--r--src/Kotlin/KotlinAsJavaDocumentationBuilder.kt37
1 files changed, 29 insertions, 8 deletions
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)
+ }
+}