converters.KotlinCompanion.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kotlin-as-java-plugin Show documentation
Show all versions of kotlin-as-java-plugin Show documentation
Dokka is an API documentation engine for Kotlin
/*
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package org.jetbrains.dokka.kotlinAsJava.converters
import org.jetbrains.dokka.links.Callable
import org.jetbrains.dokka.model.*
import org.jetbrains.dokka.model.properties.PropertyContainer
private const val DEFAULT_COMPANION_NAME = "Companion"
internal fun DObject?.staticFunctionsForJava(): List {
if (this == null) return emptyList()
return functions.filter { it.isJvmStatic }
}
/**
* @return properties that will be visible as static for java.
* See [Static fields](https://kotlinlang.org/docs/java-to-kotlin-interop.html#static-fields)
*/
internal fun DObject?.staticPropertiesForJava(): List {
if (this == null) return emptyList()
return properties.filter { it.isJvmField || it.isConst || it.isLateInit }
}
internal fun DObject.companionInstancePropertyForJava(): DProperty? {
if (hasNothingToRender()) return null // do not show if companion not rendered
return DProperty(
name = name ?: DEFAULT_COMPANION_NAME,
modifier = sourceSets.associateWith { JavaModifier.Final },
dri = dri.copy(callable = Callable(name ?: DEFAULT_COMPANION_NAME, null, emptyList())),
documentation = emptyMap(),
sources = emptyMap(),
visibility = sourceSets.associateWith {
JavaVisibility.Public
},
type = GenericTypeConstructor(dri, emptyList()),
setter = null,
getter = null,
sourceSets = sourceSets,
receiver = null,
generics = emptyList(),
expectPresentInSet = expectPresentInSet,
isExpectActual = false,
extra = PropertyContainer.withAll(sourceSets.map {
mapOf(it to setOf(ExtraModifiers.JavaOnlyModifiers.Static)).toAdditionalModifiers()
})
)
}
/**
* Hide companion object if there isn't members of parents.
* Properties and functions that are moved to outer class are not counted as members.
*/
internal fun DObject.hasNothingToRender(): Boolean {
val nonStaticPropsCount = properties.size - staticPropertiesForJava().size
val nonStaticFunctionsCount = functions.size - staticFunctionsForJava().size
val classLikesCount = classlikes.size
val superTypesCount = supertypes.values.firstOrNull()?.size ?: 0
return nonStaticFunctionsCount + nonStaticPropsCount +
classLikesCount + superTypesCount == 0
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy