diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt index e7028ef028..1b25a8a809 100644 --- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt @@ -150,9 +150,11 @@ class DefaultPsiToDocumentableTranslator( suspend fun parsePackage(packageName: String, psiFiles: List): DPackage = coroutineScope { val dri = DRI(packageName = packageName) - val documentation = psiFiles.firstOrNull { it.name == "package-info.java" }?.let { + val packageInfo = psiFiles.singleOrNull { it.name == "package-info.java" } + val documentation = packageInfo?.let { javadocParser.parseDocumentation(it).toSourceSetDependent() - } ?: emptyMap() + }.orEmpty() + val annotations = packageInfo?.packageStatement?.annotationList?.annotations DPackage( dri, @@ -166,7 +168,10 @@ class DefaultPsiToDocumentableTranslator( emptyList(), documentation, null, - setOf(sourceSetData) + setOf(sourceSetData), + PropertyContainer.withAll( + annotations?.toList().orEmpty().toListOfAnnotations().toSourceSetDependent().toAnnotations() + ) ) } diff --git a/plugins/base/src/test/kotlin/translators/DefaultPsiToDocumentableTranslatorTest.kt b/plugins/base/src/test/kotlin/translators/DefaultPsiToDocumentableTranslatorTest.kt index 5cbd4416ca..27a06b7746 100644 --- a/plugins/base/src/test/kotlin/translators/DefaultPsiToDocumentableTranslatorTest.kt +++ b/plugins/base/src/test/kotlin/translators/DefaultPsiToDocumentableTranslatorTest.kt @@ -3,6 +3,8 @@ package translators import org.jetbrains.dokka.model.doc.Text import org.jetbrains.dokka.model.firstMemberOfType import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.model.Annotations import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test @@ -166,4 +168,29 @@ class DefaultPsiToDocumentableTranslatorTest : BaseAbstractTest() { } } } + + @Test + fun `java package-info package annotations`() { + testInline( + """ + |/src/main/java/sample/PackageAnnotation.java + |package sample; + |@java.lang.annotation.Target(java.lang.annotation.ElementType.PACKAGE) + |public @interface PackageAnnotation { + |} + | + |/src/main/java/sample/package-info.java + |@PackageAnnotation + |package sample; + """.trimMargin(), + configuration + ) { + documentablesMergingStage = { module -> + assertEquals( + Annotations.Annotation(DRI("sample", "PackageAnnotation"), emptyMap()), + module.packages.single().extra[Annotations]?.directAnnotations?.values?.single()?.single() + ) + } + } + } }