aboutsummaryrefslogtreecommitdiff
path: root/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt')
-rw-r--r--plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt227
1 files changed, 0 insertions, 227 deletions
diff --git a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt b/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt
deleted file mode 100644
index e4c9d5dd..00000000
--- a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * 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.signatures
-
-import org.jetbrains.dokka.base.DokkaBase
-import org.jetbrains.dokka.base.signatures.JvmSignatureUtils
-import org.jetbrains.dokka.base.signatures.SignatureProvider
-import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentConverter
-import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder
-import org.jetbrains.dokka.links.DRI
-import org.jetbrains.dokka.model.*
-import org.jetbrains.dokka.model.properties.WithExtraProperties
-import org.jetbrains.dokka.pages.ContentKind
-import org.jetbrains.dokka.pages.ContentNode
-import org.jetbrains.dokka.pages.TextStyle
-import org.jetbrains.dokka.pages.TokenStyle
-import org.jetbrains.dokka.plugability.DokkaContext
-import org.jetbrains.dokka.plugability.plugin
-import org.jetbrains.dokka.plugability.querySingle
-import org.jetbrains.dokka.utilities.DokkaLogger
-import kotlin.text.Typography.nbsp
-
-public class JavaSignatureProvider internal constructor(
- ctcc: CommentsToContentConverter,
- logger: DokkaLogger
-) : SignatureProvider, JvmSignatureUtils by JavaSignatureUtils {
-
- public constructor(context: DokkaContext) : this(
- context.plugin<DokkaBase>().querySingle { commentsToContentConverter },
- context.logger
- )
-
- private val contentBuilder = PageContentBuilder(ctcc, this, logger)
-
- private val ignoredVisibilities = setOf(JavaVisibility.Default)
-
- private val ignoredModifiers =
- setOf(KotlinModifier.Open, JavaModifier.Empty, KotlinModifier.Empty, KotlinModifier.Sealed)
-
- override fun signature(documentable: Documentable): List<ContentNode> = when (documentable) {
- is DFunction -> signature(documentable)
- is DProperty -> signature(documentable)
- is DClasslike -> signature(documentable)
- is DEnumEntry -> signature(documentable)
- is DTypeParameter -> signature(documentable)
- else -> throw NotImplementedError(
- "Cannot generate signature for ${documentable::class.qualifiedName} ${documentable.name}"
- )
- }
-
- private fun signature(e: DEnumEntry) =
- e.sourceSets.map {
- contentBuilder.contentFor(
- e,
- ContentKind.Symbol,
- setOf(TextStyle.Monospace),
- sourceSets = setOf(it)
- ) {
- link(e.name, e.dri, styles = mainStyles + e.stylesIfDeprecated(it))
- }
- }
-
- private fun signature(c: DClasslike) =
- c.sourceSets.map { sourceSet ->
- @Suppress("UNCHECKED_CAST")
- val deprecationStyles = (c as? WithExtraProperties<out Documentable>)
- ?.stylesIfDeprecated(sourceSet)
- ?: emptySet()
-
- contentBuilder.contentFor(
- c,
- ContentKind.Symbol,
- setOf(TextStyle.Monospace),
- sourceSets = setOf(sourceSet)
- ) {
- annotationsBlock(c)
- c.visibility[sourceSet]?.takeIf { it !in ignoredVisibilities }?.name?.plus(" ")?.let { keyword(it) }
-
- if (c is DClass) {
- c.modifier[sourceSet]?.takeIf { it !in ignoredModifiers }?.name?.plus(" ")?.let { keyword(it) }
- c.modifiers()[sourceSet]?.toSignatureString()?.let { keyword(it) }
- }
-
- when (c) {
- is DClass -> keyword("class ")
- is DInterface -> keyword("interface ")
- is DEnum -> keyword("enum ")
- is DObject -> keyword("class ")
- is DAnnotation -> keyword("@interface ")
- }
- link(c.name!!, c.dri, styles = mainStyles + deprecationStyles)
- if (c is WithGenerics) {
- list(c.generics, prefix = "<", suffix = ">",
- separatorStyles = mainStyles + TokenStyle.Punctuation,
- surroundingCharactersStyle = mainStyles + TokenStyle.Operator) {
- +buildSignature(it)
- }
- }
- if (c is WithSupertypes) {
- c.supertypes.map { (p, dris) ->
- val (classes, interfaces) = dris.partition { it.kind == JavaClassKindTypes.CLASS }
- list(classes, prefix = " extends ", sourceSets = setOf(p),
- separatorStyles = mainStyles + TokenStyle.Punctuation,
- surroundingCharactersStyle = mainStyles + TokenStyle.Keyword) {
- signatureForProjection(it.typeConstructor)
- }
- list(interfaces, prefix = " implements ", sourceSets = setOf(p),
- separatorStyles = mainStyles + TokenStyle.Punctuation,
- surroundingCharactersStyle = mainStyles + TokenStyle.Keyword) {
- signatureForProjection(it.typeConstructor)
- }
- }
- }
- }
- }
-
- private fun signature(p: DProperty) =
- p.sourceSets.map {
- contentBuilder.contentFor(
- p,
- ContentKind.Symbol,
- setOf(TextStyle.Monospace, TextStyle.Block),
- sourceSets = setOf(it)
- ) {
- annotationsBlock(p)
- p.visibility[it]?.takeIf { it !in ignoredVisibilities }?.name?.let { keyword("$it ") }
- p.modifier[it]?.takeIf { it !in ignoredModifiers }?.name?.let { keyword("$it ") }
- p.modifiers()[it]?.toSignatureString()?.let { keyword(it) }
- signatureForProjection(p.type)
- text(nbsp.toString())
- link(p.name, p.dri, styles = mainStyles + p.stylesIfDeprecated(it))
- }
- }
-
- private fun signature(f: DFunction) =
- f.sourceSets.map { sourceSet ->
- contentBuilder.contentFor(
- f,
- ContentKind.Symbol,
- setOf(TextStyle.Monospace, TextStyle.Block),
- sourceSets = setOf(sourceSet)
- ) {
- annotationsBlock(f)
- f.visibility[sourceSet]?.takeIf { it !in ignoredVisibilities }?.name?.let { keyword("$it ") }
- f.modifier[sourceSet]?.takeIf { it !in ignoredModifiers }?.name?.plus(" ")?.let { keyword(it) }
- f.modifiers()[sourceSet]?.toSignatureString()?.let { keyword(it) }
- val returnType = f.type
- signatureForProjection(returnType)
- text(nbsp.toString())
- link(f.name, f.dri, styles = mainStyles + TokenStyle.Function + f.stylesIfDeprecated(sourceSet))
- val usedGenerics = if (f.isConstructor) f.generics.filter { f uses it } else f.generics
- list(usedGenerics, prefix = "<", suffix = ">",
- separatorStyles = mainStyles + TokenStyle.Punctuation,
- surroundingCharactersStyle = mainStyles + TokenStyle.Operator) {
- +buildSignature(it)
- }
- punctuation("(")
- if (f.parameters.isNotEmpty()) {
- parametersBlock(f) {
- annotationsInline(it)
- text(it.modifiers()[sourceSet]?.toSignatureString() ?: "", styles = mainStyles + TokenStyle.Keyword)
- signatureForProjection(it.type)
- text(nbsp.toString())
- text(it.name!!)
- }
- }
- punctuation(")")
- }
- }
-
- private fun signature(t: DTypeParameter) =
- t.sourceSets.map {
- contentBuilder.contentFor(t, sourceSets = setOf(it)) {
- annotationsInline(t)
- text(t.name.substringAfterLast("."), styles = mainStyles + t.stylesIfDeprecated(it))
- list(
- elements = t.bounds,
- prefix = " extends ",
- separatorStyles = mainStyles + TokenStyle.Punctuation,
- surroundingCharactersStyle = mainStyles + TokenStyle.Keyword
- ) {
- signatureForProjection(it)
- }
- }
-
- }
-
- private fun PageContentBuilder.DocumentableContentBuilder.signatureForProjection(p: Projection): Unit = when (p) {
- is TypeParameter -> {
- annotationsInline(p)
- link(p.name, p.dri)
- }
-
- is TypeConstructor -> group(styles = emptySet()) {
- annotationsInline(p)
- link(p.dri.classNames.orEmpty(), p.dri)
- list(p.projections, prefix = "<", suffix = ">",
- separatorStyles = mainStyles + TokenStyle.Punctuation,
- surroundingCharactersStyle = mainStyles + TokenStyle.Operator) {
- signatureForProjection(it)
- }
- }
-
- is Variance<*> -> group(styles = emptySet()) {
- val variance = when(p) {
- is Covariance<*> -> "? extends "
- is Contravariance<*> -> "? super "
- is Invariance<*> -> ""
- }
- keyword(variance)
- signatureForProjection(p.inner)
- }
-
- is Star -> operator("?")
-
- is Nullable -> signatureForProjection(p.inner)
- is DefinitelyNonNullable -> signatureForProjection(p.inner)
-
- is JavaObject, is Dynamic -> link("Object", DRI("java.lang", "Object"))
- is Void -> text("void")
- is PrimitiveJavaType -> text(p.name)
- is UnresolvedBound -> text(p.name)
- is TypeAliased -> signatureForProjection(p.inner)
- }
-}