diff options
-rw-r--r-- | plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt | 28 | ||||
-rw-r--r-- | plugins/base/src/test/kotlin/translators/Bug1341.kt | 62 |
2 files changed, 82 insertions, 8 deletions
diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt index 791627cc..27a487b8 100644 --- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt @@ -173,13 +173,19 @@ class DefaultPsiToDocumentableTranslator( val ancestors = ancestryTree.filter { it.level == 0 }.flatMap { listOfNotNull(it.superclass?.let { TypeConstructorWithKind( - typeConstructor = it , + typeConstructor = it, kind = JavaClassKindTypes.CLASS ) - }) + it.interfaces.map { TypeConstructorWithKind(typeConstructor = it, kind = JavaClassKindTypes.INTERFACE) } + }) + it.interfaces.map { + TypeConstructorWithKind( + typeConstructor = it, + kind = JavaClassKindTypes.INTERFACE + ) + } }.toSourceSetDependent() val modifiers = getModifier().toSourceSetDependent() - val implementedInterfacesExtra = ImplementedInterfaces(ancestryTree.flatMap { it.interfaces }.distinct().toSourceSetDependent()) + val implementedInterfacesExtra = + ImplementedInterfaces(ancestryTree.flatMap { it.interfaces }.distinct().toSourceSetDependent()) return when { isAnnotationType -> DAnnotation( @@ -476,12 +482,14 @@ class DefaultPsiToDocumentableTranslator( else -> StringValue(text ?: "") } - private fun PsiAnnotation.toAnnotation() = psiReference?.let { psiElement -> + private fun PsiAnnotation.toAnnotation(): Annotations.Annotation? = psiReference?.let { psiElement -> Annotations.Annotation( - DRI.from(psiElement), - attributes.filter { it !is KtLightAbstractAnnotation }.mapNotNull { it.attributeName to it.toValue() } + dri = DRI.from(psiElement), + params = attributes + .filter { it !is KtLightAbstractAnnotation } + .mapNotNull { it.attributeName to it.toValue() } .toMap(), - (psiElement as PsiClass).annotations.any { + mustBeDocumented = (psiElement as PsiClass).annotations.any { it.hasQualifiedName("java.lang.annotation.Documented") } ) @@ -491,5 +499,9 @@ class DefaultPsiToDocumentableTranslator( get() = getChildOfType<PsiJavaCodeReferenceElement>()?.resolve() } - private data class AncestryLevel(val level: Int, val superclass: TypeConstructor?, val interfaces: List<TypeConstructor>) + private data class AncestryLevel( + val level: Int, + val superclass: TypeConstructor?, + val interfaces: List<TypeConstructor> + ) } diff --git a/plugins/base/src/test/kotlin/translators/Bug1341.kt b/plugins/base/src/test/kotlin/translators/Bug1341.kt new file mode 100644 index 00000000..5305e6b0 --- /dev/null +++ b/plugins/base/src/test/kotlin/translators/Bug1341.kt @@ -0,0 +1,62 @@ +package translators + +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class Bug1341 : AbstractCoreTest() { + @Test + fun `reproduce bug #1341`() { + val configuration = dokkaConfiguration { + sourceSets { + sourceSet { + sourceRoots = listOf("src") + analysisPlatform = "jvm" + } + } + } + + testInline( + """ + /src/com/sample/OtherClass.kt + package com.sample + /** + * @suppress + */ + class OtherClass internal constructor() { + @kotlin.annotation.Retention(AnnotationRetention.SOURCE) + @IntDef(ELEM_1, ELEM_2, ELEM_3) + internal annotation class CustomAnnotation + + companion object { + const val ELEM_1 = 1 + const val ELEM_2 = -1 + const val ELEM_3 = 0 + } + } + + /src/com/sample/ClassUsingAnnotation.java + package com.sample + import static sample.OtherClass.ELEM_1; + + /** + * @suppress + */ + public class ClassUsingAnnotation { + + @OtherClass.CustomAnnotation + public int doSomething() { + return ELEM_1; + } + } + """.trimIndent(), + configuration + ) { + this.documentablesMergingStage = { module -> + assertEquals(DRI("com.sample"), module.packages.single().dri) + } + } + } +} |