Skip to content

Commit

Permalink
Expose Kotlin-as-Java methods (#2351)
Browse files Browse the repository at this point in the history
Allow using these methods not only as part of transformers
  • Loading branch information
BarkingBad committed Feb 14, 2022
1 parent 8ed821a commit 558c58b
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 28 deletions.
9 changes: 9 additions & 0 deletions plugins/kotlin-as-java/api/kotlin-as-java.api
Expand Up @@ -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;
}
Expand Down
29 changes: 29 additions & 0 deletions plugins/kotlin-as-java/src/main/kotlin/transformToJava.kt
@@ -0,0 +1,29 @@
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

private val JVM_NAME_DOCUMENTABLE_TRANSFORMER by lazy {
JvmNameDocumentableTransformer()
}

fun DPackage.transformToJava(context: DokkaContext): DPackage {
return JVM_NAME_DOCUMENTABLE_TRANSFORMER.transform(this.asJava(), context)
}

fun DClasslike.transformToJava(context: DokkaContext): DClasslike {
return JVM_NAME_DOCUMENTABLE_TRANSFORMER.transform(this.asJava(), context)
}

fun DFunction.transformToJava(context: DokkaContext, containingClassName: String, isTopLevel: Boolean = false): List<DFunction> {
return this.asJava(containingClassName, isTopLevel).map { JVM_NAME_DOCUMENTABLE_TRANSFORMER.transform(it, context) }
}

fun DProperty.transformToJava(context: DokkaContext, isTopLevel: Boolean = false, relocateToClass: String? = null): DProperty {
return JVM_NAME_DOCUMENTABLE_TRANSFORMER.transform(this.asJava(isTopLevel, relocateToClass), context)
}
Expand Up @@ -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 <T : Documentable> transform(documentable: T): T =
internal fun <T : Documentable> 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)
Expand All @@ -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}")
Expand All @@ -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) },
)
}
}
Expand All @@ -108,4 +106,4 @@ class JvmNameDocumentableTransformer : DocumentableTransformer {
}
})
}
}
}

0 comments on commit 558c58b

Please sign in to comment.