Skip to content

Commit

Permalink
Apply requested changes
Browse files Browse the repository at this point in the history
  • Loading branch information
BarkingBad committed Jan 19, 2022
1 parent a3c9a6a commit 0b4adf7
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 5 deletions.
1 change: 1 addition & 0 deletions core/api/core.api
Expand Up @@ -503,6 +503,7 @@ public final class org/jetbrains/dokka/links/DRIKt {
public static final fun getSureClassNames (Lorg/jetbrains/dokka/links/DRI;)Ljava/lang/String;
public static final fun nextTarget (Lorg/jetbrains/dokka/links/DriTarget;)Lorg/jetbrains/dokka/links/DriTarget;
public static final fun withClass (Lorg/jetbrains/dokka/links/DRI;Ljava/lang/String;)Lorg/jetbrains/dokka/links/DRI;
public static final fun withEnumEntryExtra (Lorg/jetbrains/dokka/links/DRI;)Lorg/jetbrains/dokka/links/DRI;
public static final fun withTargetToDeclaration (Lorg/jetbrains/dokka/links/DRI;)Lorg/jetbrains/dokka/links/DRI;
}

Expand Down
4 changes: 4 additions & 0 deletions core/src/main/kotlin/links/DRI.kt
Expand Up @@ -51,6 +51,10 @@ fun DRI.withClass(name: String) = copy(classNames = if (classNames.isNullOrBlank

fun DRI.withTargetToDeclaration() = copy(target = PointingToDeclaration)

fun DRI.withEnumEntryExtra() = copy(
extra = DRIExtraContainer(this.extra).also { it[EnumEntryDRIExtra] = EnumEntryDRIExtra }.encode()
)

val DRI.parent: DRI
get() = when {
extra != null -> when {
Expand Down
Expand Up @@ -32,11 +32,15 @@ fun DRI.Companion.from(psi: PsiElement) = psi.parentsWithSelf.run {
val psiField = firstIsInstanceOrNull<PsiField>()
val classes = filterIsInstance<PsiClass>().filterNot { it is PsiTypeParameter }
.toList() // We only want exact PsiClass types, not PsiTypeParameter subtype
val additionalClasses = if (psi is PsiEnumConstant) listOfNotNull(psiField?.name) else emptyList()
DRI(
packageName = classes.lastOrNull()?.qualifiedName?.substringBeforeLast('.', "") ?: "",
classNames = (if (psi is PsiEnumConstant) listOfNotNull(psiField?.name) + classes.toList().mapNotNull { it.name } else classes.toList().mapNotNull { it.name })
.takeIf { it.isNotEmpty() }?.asReversed()
?.joinToString("."),
classNames = (additionalClasses + classes.mapNotNull { it.name }).takeIf { it.isNotEmpty() }
?.asReversed()?.joinToString("."),
// The fallback strategy test whether psi is not `PsiEnumConstant`. The reason behind this is that
// we need unified DRI for both Java and Kotlin enums, so we can link them properly and treat them alike.
// To achieve that, we append enum name to classNames list and leave the callable part set to null. For Kotlin enums
// it is by default, while for Java enums we have to explicitly test for that in this `takeUnless` condition.
callable = psiMethod?.let { Callable.from(it) } ?: psiField?.takeUnless { psi is PsiEnumConstant }?.let { Callable.from(it) },
target = DriTarget.from(psi),
extra = if (psi is PsiEnumConstant)
Expand Down
Expand Up @@ -306,7 +306,7 @@ private class DokkaDescriptorVisitor(
val classlikes = async { descriptorsWithKind.classlikes.visitClasslikes(driWithPlatform) }

DEnumEntry(
dri = driWithPlatform.dri.copy(extra = DRIExtraContainer(driWithPlatform.dri.extra).also { it[EnumEntryDRIExtra] = EnumEntryDRIExtra }.encode()),
dri = driWithPlatform.dri.withEnumEntryExtra(),
name = descriptor.name.asString(),
documentation = descriptor.resolveDescriptorData(),
functions = functions.await(),
Expand Down
Expand Up @@ -269,7 +269,7 @@ class DefaultPsiToDocumentableTranslator(
name.orEmpty(),
fields.filterIsInstance<PsiEnumConstant>().map { entry ->
DEnumEntry(
dri.withClass(entry.name).copy(extra = DRIExtraContainer(dri.extra).also { it[EnumEntryDRIExtra] = EnumEntryDRIExtra }.encode()),
dri.withClass(entry.name).withEnumEntryExtra(),
entry.name,
javadocParser.parseDocumentation(entry).toSourceSetDependent(),
null,
Expand Down

0 comments on commit 0b4adf7

Please sign in to comment.