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..7cbcfa7871 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 @@ -55,7 +55,7 @@ public class KotlinToJavaConverter( name = syntheticClassName.name, properties = nodes .filterIsInstance() - .filterNot { it.hasJvmSynthetic() } + .filterNot { it.hasJvmSynthetic() || it.isExtension() } .map { it.asJava(true) }, constructors = emptyList(), functions = ( @@ -315,11 +315,11 @@ public class KotlinToJavaConverter( internal fun DClass.propertiesInJava(): List { val propertiesFromCompanion = companion .staticPropertiesForJava() - .filterNot { it.hasJvmSynthetic() } + .filterNot { it.hasJvmSynthetic() || it.isExtension() } .map { it.asJava(isFromObjectOrCompanion = true) } val companionInstanceProperty = companion?.companionInstancePropertyForJava() val ownProperties = properties - .filterNot { it.hasJvmSynthetic() } + .filterNot { it.hasJvmSynthetic() || it.isExtension() } .map { it.asJava() } return propertiesFromCompanion + ownProperties + listOfNotNull(companionInstanceProperty) @@ -376,7 +376,7 @@ public class KotlinToJavaConverter( .filterNot { it.hasJvmSynthetic() } .flatMap { it.asJava(dri.classNames ?: name) }, properties = properties - .filterNot { it.hasJvmSynthetic() } + .filterNot { it.hasJvmSynthetic() || it.isExtension() } .map { it.asJava() }, classlikes = classlikes.map { it.asJava() }, supertypes = supertypes.mapValues { it.value.map { it.asJava() } } @@ -403,7 +403,7 @@ public class KotlinToJavaConverter( .filterNot { it.hasJvmSynthetic() } .flatMap { it.asJava(dri.classNames ?: name.orEmpty()) }, properties = properties - .filterNot { it.hasJvmSynthetic() } + .filterNot { it.hasJvmSynthetic() || it.isExtension() } .filterNot { it in excludedProps } .map { it.asJava(isFromObjectOrCompanion = true) } + DProperty( diff --git a/dokka-subprojects/plugin-kotlin-as-java/src/test/kotlin/kotlinAsJavaPlugin/JvmFieldTest.kt b/dokka-subprojects/plugin-kotlin-as-java/src/test/kotlin/kotlinAsJavaPlugin/JvmFieldTest.kt index a22d8c49ad..a1b32d8d95 100644 --- a/dokka-subprojects/plugin-kotlin-as-java/src/test/kotlin/kotlinAsJavaPlugin/JvmFieldTest.kt +++ b/dokka-subprojects/plugin-kotlin-as-java/src/test/kotlin/kotlinAsJavaPlugin/JvmFieldTest.kt @@ -167,4 +167,48 @@ class JvmFieldTest : BaseAbstractTest() { } } } + + @Test + fun `top level extension property should be a function`() { + testInline( + """ + |/src/main/kotlin/kotlinAsJavaPlugin/sample.kt + |package kotlinAsJavaPlugin + |val String.extProperty: String + | get() = this + """.trimMargin(), + configuration, + ) { + documentablesTransformationStage = { module -> + val classLike = module.packages.flatMap { it.classlikes }.first() + assertNull(classLike.properties.firstOrNull { it.name == "extProperty" }) + assertEquals( + listOf("getExtProperty"), + classLike.functions.map { it.name }) + } + } + } + + @Test + fun `in-class extension property should be a function`() { + testInline( + """ + |/src/main/kotlin/kotlinAsJavaPlugin/sample.kt + |package kotlinAsJavaPlugin + |class MyClass { + | val String.extProperty: String + | get() = this + |} + """.trimMargin(), + configuration, + ) { + documentablesTransformationStage = { module -> + val classLike = module.packages.flatMap { it.classlikes }.first() + assertNull(classLike.properties.firstOrNull { it.name == "extProperty" }) + assertEquals( + listOf("getExtProperty"), + classLike.functions.map { it.name }) + } + } + } }