From 3752341cd09a7cbf3b3a43a9db9a906c6d7a7f25 Mon Sep 17 00:00:00 2001 From: Andrzej Ratajczak Date: Tue, 8 Feb 2022 12:52:17 +0100 Subject: [PATCH] Expose Kotlin-as-Java methods that could be used not only as part of transformers --- plugins/kotlin-as-java/api/kotlin-as-java.api | 9 ++++ .../src/main/kotlin/transformToJava.kt | 26 +++++++++ .../JvmNameDocumentableTransformer.kt | 54 +++++++++---------- 3 files changed, 61 insertions(+), 28 deletions(-) create mode 100644 plugins/kotlin-as-java/src/main/kotlin/transformToJava.kt diff --git a/plugins/kotlin-as-java/api/kotlin-as-java.api b/plugins/kotlin-as-java/api/kotlin-as-java.api index f941582ecd..159243ed39 100644 --- a/plugins/kotlin-as-java/api/kotlin-as-java.api +++ b/plugins/kotlin-as-java/api/kotlin-as-java.api @@ -6,6 +6,15 @@ public final class org/jetbrains/dokka/kotlinAsJava/KotlinAsJavaPlugin : org/jet public final fun getKotlinAsJavaDocumentableTransformer ()Lorg/jetbrains/dokka/plugability/Extension; } +public final class org/jetbrains/dokka/kotlinAsJava/TransformToJavaKt { + public static final fun transformToJava (Lorg/jetbrains/dokka/model/DClasslike;Lorg/jetbrains/dokka/plugability/DokkaContext;)Lorg/jetbrains/dokka/model/DClasslike; + public static final fun transformToJava (Lorg/jetbrains/dokka/model/DFunction;Lorg/jetbrains/dokka/plugability/DokkaContext;Ljava/lang/String;Z)Ljava/util/List; + public static final fun transformToJava (Lorg/jetbrains/dokka/model/DPackage;Lorg/jetbrains/dokka/plugability/DokkaContext;)Lorg/jetbrains/dokka/model/DPackage; + public static final fun transformToJava (Lorg/jetbrains/dokka/model/DProperty;Lorg/jetbrains/dokka/plugability/DokkaContext;ZLjava/lang/String;)Lorg/jetbrains/dokka/model/DProperty; + public static synthetic fun transformToJava$default (Lorg/jetbrains/dokka/model/DFunction;Lorg/jetbrains/dokka/plugability/DokkaContext;Ljava/lang/String;ZILjava/lang/Object;)Ljava/util/List; + public static synthetic fun transformToJava$default (Lorg/jetbrains/dokka/model/DProperty;Lorg/jetbrains/dokka/plugability/DokkaContext;ZLjava/lang/String;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/DProperty; +} + public final class org/jetbrains/dokka/kotlinAsJava/converters/KotlinToJavaConverterKt { public static final fun getJvmNameProvider ()Lorg/jetbrains/dokka/kotlinAsJava/transformers/JvmNameProvider; } diff --git a/plugins/kotlin-as-java/src/main/kotlin/transformToJava.kt b/plugins/kotlin-as-java/src/main/kotlin/transformToJava.kt new file mode 100644 index 0000000000..52d8790143 --- /dev/null +++ b/plugins/kotlin-as-java/src/main/kotlin/transformToJava.kt @@ -0,0 +1,26 @@ +package org.jetbrains.dokka.kotlinAsJava + +import org.jetbrains.dokka.kotlinAsJava.converters.asJava +import org.jetbrains.dokka.kotlinAsJava.transformers.JvmNameDocumentableTransformer +import org.jetbrains.dokka.model.DClasslike +import org.jetbrains.dokka.model.DFunction +import org.jetbrains.dokka.model.DPackage +import org.jetbrains.dokka.model.DProperty +import org.jetbrains.dokka.plugability.DokkaContext + + +fun DPackage.transformToJava(context: DokkaContext): DPackage { + return JvmNameDocumentableTransformer().transform(this.asJava(), context) +} + +fun DClasslike.transformToJava(context: DokkaContext): DClasslike { + return JvmNameDocumentableTransformer().transform(this.asJava(), context) +} + +fun DFunction.transformToJava(context: DokkaContext, containingClassName: String, isTopLevel: Boolean = false): List { + return this.asJava(containingClassName, isTopLevel).map { JvmNameDocumentableTransformer().transform(it, context) } +} + +fun DProperty.transformToJava(context: DokkaContext, isTopLevel: Boolean = false, relocateToClass: String? = null): DProperty { + return JvmNameDocumentableTransformer().transform(this.asJava(isTopLevel, relocateToClass), context) +} diff --git a/plugins/kotlin-as-java/src/main/kotlin/transformers/JvmNameDocumentableTransformer.kt b/plugins/kotlin-as-java/src/main/kotlin/transformers/JvmNameDocumentableTransformer.kt index c49e08f0ad..28cb345388 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/transformers/JvmNameDocumentableTransformer.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/transformers/JvmNameDocumentableTransformer.kt @@ -7,20 +7,18 @@ import org.jetbrains.dokka.transformers.documentation.DocumentableTransformer class JvmNameDocumentableTransformer : DocumentableTransformer { private val jvmNameProvider = JvmNameProvider() - private lateinit var context: DokkaContext override fun invoke(original: DModule, context: DokkaContext): DModule { - this.context = context - return original.copy(packages = original.packages.map { transform(it) }) + return original.copy(packages = original.packages.map { transform(it, context) }) } - private fun transform(documentable: T): T = + internal fun transform(documentable: T, context: DokkaContext): T = with(documentable) { when (this) { is DPackage -> copy( - functions = functions.map { transform(it) }, - properties = properties.map { transform(it) }, - classlikes = classlikes.map { transform(it) }, + functions = functions.map { transform(it, context) }, + properties = properties.map { transform(it, context) }, + classlikes = classlikes.map { transform(it, context) }, ) is DFunction -> { val name = jvmNameProvider.nameFor(this) @@ -31,11 +29,11 @@ class JvmNameDocumentableTransformer : DocumentableTransformer { ) } is DProperty -> transformGetterAndSetter(this) - is DClasslike -> transformClassLike(this) + is DClasslike -> transformClassLike(this, context) is DEnumEntry -> copy( - functions = functions.map { transform(it) }, - properties = properties.map { transform(it) }, - classlikes = classlikes.map { transform(it) }, + functions = functions.map { transform(it, context) }, + properties = properties.map { transform(it, context) }, + classlikes = classlikes.map { transform(it, context) }, ) else -> { context.logger.warn("Failed to translate a JvmName for ${this.javaClass.canonicalName}") @@ -55,33 +53,33 @@ class JvmNameDocumentableTransformer : DocumentableTransformer { return extraWithoutAnnotations.addAll(listOfNotNull(annotationsWithoutJvmName)) } - private fun transformClassLike(documentable: DClasslike): DClasslike = + private fun transformClassLike(documentable: DClasslike, context: DokkaContext): DClasslike = with(documentable) { when (this) { is DClass -> copy( - functions = functions.map { transform(it) }, - properties = properties.map { transform(it) }, - classlikes = classlikes.map { transform(it) }, + functions = functions.map { transform(it, context) }, + properties = properties.map { transform(it, context) }, + classlikes = classlikes.map { transform(it, context) }, ) is DAnnotation -> copy( - functions = functions.map { transform(it) }, - properties = properties.map { transform(it) }, - classlikes = classlikes.map { transform(it) }, + functions = functions.map { transform(it, context) }, + properties = properties.map { transform(it, context) }, + classlikes = classlikes.map { transform(it, context) }, ) is DObject -> copy( - functions = functions.map { transform(it) }, - properties = properties.map { transform(it) }, - classlikes = classlikes.map { transform(it) }, + functions = functions.map { transform(it, context) }, + properties = properties.map { transform(it, context) }, + classlikes = classlikes.map { transform(it, context) }, ) is DEnum -> copy( - functions = functions.map { transform(it) }, - properties = properties.map { transform(it) }, - classlikes = classlikes.map { transform(it) }, + functions = functions.map { transform(it, context) }, + properties = properties.map { transform(it, context) }, + classlikes = classlikes.map { transform(it, context) }, ) is DInterface -> copy( - functions = functions.map { transform(it) }, - properties = properties.map { transform(it) }, - classlikes = classlikes.map { transform(it) }, + functions = functions.map { transform(it, context) }, + properties = properties.map { transform(it, context) }, + classlikes = classlikes.map { transform(it, context) }, ) } } @@ -108,4 +106,4 @@ class JvmNameDocumentableTransformer : DocumentableTransformer { } }) } -} \ No newline at end of file +}