diff --git a/dokka-subprojects/plugin-kotlin-as-java/src/main/kotlin/org/jetbrains/dokka/kotlinAsJava/converters/KotlinToJavaConverter.kt b/dokka-subprojects/plugin-kotlin-as-java/src/main/kotlin/org/jetbrains/dokka/kotlinAsJava/converters/KotlinToJavaConverter.kt index b565164511..d698b0b18e 100644 --- a/dokka-subprojects/plugin-kotlin-as-java/src/main/kotlin/org/jetbrains/dokka/kotlinAsJava/converters/KotlinToJavaConverter.kt +++ b/dokka-subprojects/plugin-kotlin-as-java/src/main/kotlin/org/jetbrains/dokka/kotlinAsJava/converters/KotlinToJavaConverter.kt @@ -293,7 +293,7 @@ public class KotlinToJavaConverter( * Companion objects requires some custom logic for rendering as Java. * They are excluded from usual classlikes rendering and added after. */ - internal fun DClass.classlikesInJava(): List { + internal fun T.classlikesInJava(): List where T : DClasslike, T : WithCompanion { val classlikes = classlikes .filter { it.name != companion?.name } .map { it.asJava() } @@ -442,9 +442,10 @@ public class KotlinToJavaConverter( .filterNot { it.hasJvmSynthetic() } .flatMap { it.asJava(dri.classNames ?: name) }, properties = emptyList(), - classlikes = classlikes.map { it.asJava() }, // TODO: public static final class DefaultImpls with impls for methods + classlikes = classlikesInJava(), // TODO: public static final class DefaultImpls with impls for methods generics = generics.map { it.asJava() }, - supertypes = supertypes.mapValues { it.value.map { it.asJava() } } + supertypes = supertypes.mapValues { it.value.map { it.asJava() } }, + companion = companion?.companionAsJava() ) internal fun DAnnotation.asJava(): DAnnotation = copy( diff --git a/dokka-subprojects/plugin-kotlin-as-java/src/test/kotlin/kotlinAsJavaPlugin/CompanionAsJavaTest.kt b/dokka-subprojects/plugin-kotlin-as-java/src/test/kotlin/kotlinAsJavaPlugin/CompanionAsJavaTest.kt index 667e9ffc32..5332ef6316 100644 --- a/dokka-subprojects/plugin-kotlin-as-java/src/test/kotlin/kotlinAsJavaPlugin/CompanionAsJavaTest.kt +++ b/dokka-subprojects/plugin-kotlin-as-java/src/test/kotlin/kotlinAsJavaPlugin/CompanionAsJavaTest.kt @@ -224,6 +224,29 @@ class CompanionAsJavaTest : BaseAbstractTest() { } } + @Test + fun `interface companion should not be rendered when companion is not rendered`() { + testInline( + """ + |/src/main/kotlin/kotlinAsJavaPlugin/sample.kt + |package kotlinAsJavaPlugin + |interface MyInterface { + | companion object $COMPANION_NAME { + | @JvmStatic fun staticFun(): String = "" + | } + |} + """.trimMargin(), + configuration, + ) { + documentablesTransformationStage = { module -> + val parentInterface = module.packages.flatMap { it.classlikes } + .firstOrNull { it.name == "MyInterface" } as DInterface + + assertCompanionNotRendered(parentInterface) + } + } + } + @Test fun `companion object with nested classes is rendered`() { testInline( @@ -521,7 +544,7 @@ private fun assertCompanionRendered(parentClass: DClass) { ) } -private fun assertCompanionNotRendered(parentClass: DClass) { +private fun assertCompanionNotRendered(parentClass: T) where T : DClasslike, T : WithCompanion { assertNull(parentClass.companion, "Companion should be null") assertTrue( parentClass.classlikes.none { it.name == COMPANION_NAME },