aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/core.api47
-rw-r--r--core/src/main/kotlin/model/Documentable.kt52
-rw-r--r--plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt19
-rw-r--r--plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt5
-rw-r--r--plugins/base/src/test/kotlin/translators/DefaultDescriptorToDocumentableTranslatorTest.kt67
-rw-r--r--plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt52
6 files changed, 199 insertions, 43 deletions
diff --git a/core/api/core.api b/core/api/core.api
index 063f56c5..74b4b422 100644
--- a/core/api/core.api
+++ b/core/api/core.api
@@ -784,7 +784,7 @@ public final class org/jetbrains/dokka/model/BooleanValue : org/jetbrains/dokka/
public fun toString ()Ljava/lang/String;
}
-public abstract class org/jetbrains/dokka/model/Bound : org/jetbrains/dokka/model/Projection, org/jetbrains/dokka/model/AnnotationTarget {
+public abstract class org/jetbrains/dokka/model/Bound : org/jetbrains/dokka/model/Projection {
}
public abstract interface class org/jetbrains/dokka/model/Callable : org/jetbrains/dokka/model/WithAbstraction, org/jetbrains/dokka/model/WithIsExpectActual, org/jetbrains/dokka/model/WithSources, org/jetbrains/dokka/model/WithType, org/jetbrains/dokka/model/WithVisibility {
@@ -1802,7 +1802,7 @@ public final class org/jetbrains/dokka/model/JavaModifier$Final : org/jetbrains/
public static final field INSTANCE Lorg/jetbrains/dokka/model/JavaModifier$Final;
}
-public final class org/jetbrains/dokka/model/JavaObject : org/jetbrains/dokka/model/Bound, org/jetbrains/dokka/model/properties/WithExtraProperties {
+public final class org/jetbrains/dokka/model/JavaObject : org/jetbrains/dokka/model/Bound, org/jetbrains/dokka/model/AnnotationTarget, org/jetbrains/dokka/model/properties/WithExtraProperties {
public fun <init> ()V
public fun <init> (Lorg/jetbrains/dokka/model/properties/PropertyContainer;)V
public synthetic fun <init> (Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -1949,15 +1949,20 @@ public final class org/jetbrains/dokka/model/PrimaryConstructorExtra : org/jetbr
public fun mergeStrategyFor (Lorg/jetbrains/dokka/model/PrimaryConstructorExtra;Lorg/jetbrains/dokka/model/PrimaryConstructorExtra;)Lorg/jetbrains/dokka/model/properties/MergeStrategy;
}
-public final class org/jetbrains/dokka/model/PrimitiveJavaType : org/jetbrains/dokka/model/Bound {
- public fun <init> (Ljava/lang/String;)V
+public final class org/jetbrains/dokka/model/PrimitiveJavaType : org/jetbrains/dokka/model/Bound, org/jetbrains/dokka/model/AnnotationTarget, org/jetbrains/dokka/model/properties/WithExtraProperties {
+ public fun <init> (Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)V
+ public synthetic fun <init> (Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
- public final fun copy (Ljava/lang/String;)Lorg/jetbrains/dokka/model/PrimitiveJavaType;
- public static synthetic fun copy$default (Lorg/jetbrains/dokka/model/PrimitiveJavaType;Ljava/lang/String;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/PrimitiveJavaType;
+ public final fun component2 ()Lorg/jetbrains/dokka/model/properties/PropertyContainer;
+ public final fun copy (Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/PrimitiveJavaType;
+ public static synthetic fun copy$default (Lorg/jetbrains/dokka/model/PrimitiveJavaType;Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/PrimitiveJavaType;
public fun equals (Ljava/lang/Object;)Z
+ public fun getExtra ()Lorg/jetbrains/dokka/model/properties/PropertyContainer;
public final fun getName ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
+ public synthetic fun withNewExtras (Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Ljava/lang/Object;
+ public fun withNewExtras (Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/PrimitiveJavaType;
}
public abstract class org/jetbrains/dokka/model/Projection {
@@ -1990,20 +1995,25 @@ public final class org/jetbrains/dokka/model/StringValue : org/jetbrains/dokka/m
public fun toString ()Ljava/lang/String;
}
-public final class org/jetbrains/dokka/model/TypeAliased : org/jetbrains/dokka/model/Bound {
- public fun <init> (Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/Bound;)V
+public final class org/jetbrains/dokka/model/TypeAliased : org/jetbrains/dokka/model/Bound, org/jetbrains/dokka/model/AnnotationTarget, org/jetbrains/dokka/model/properties/WithExtraProperties {
+ public fun <init> (Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)V
+ public synthetic fun <init> (Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lorg/jetbrains/dokka/model/Bound;
public final fun component2 ()Lorg/jetbrains/dokka/model/Bound;
- public final fun copy (Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/Bound;)Lorg/jetbrains/dokka/model/TypeAliased;
- public static synthetic fun copy$default (Lorg/jetbrains/dokka/model/TypeAliased;Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/Bound;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/TypeAliased;
+ public final fun component3 ()Lorg/jetbrains/dokka/model/properties/PropertyContainer;
+ public final fun copy (Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/TypeAliased;
+ public static synthetic fun copy$default (Lorg/jetbrains/dokka/model/TypeAliased;Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/Bound;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/TypeAliased;
public fun equals (Ljava/lang/Object;)Z
+ public fun getExtra ()Lorg/jetbrains/dokka/model/properties/PropertyContainer;
public final fun getInner ()Lorg/jetbrains/dokka/model/Bound;
public final fun getTypeAlias ()Lorg/jetbrains/dokka/model/Bound;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
+ public synthetic fun withNewExtras (Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Ljava/lang/Object;
+ public fun withNewExtras (Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/TypeAliased;
}
-public abstract class org/jetbrains/dokka/model/TypeConstructor : org/jetbrains/dokka/model/Bound {
+public abstract class org/jetbrains/dokka/model/TypeConstructor : org/jetbrains/dokka/model/Bound, org/jetbrains/dokka/model/AnnotationTarget {
public abstract fun getDri ()Lorg/jetbrains/dokka/links/DRI;
public abstract fun getPresentableName ()Ljava/lang/String;
public abstract fun getProjections ()Ljava/util/List;
@@ -2022,7 +2032,7 @@ public final class org/jetbrains/dokka/model/TypeConstructorWithKind {
public fun toString ()Ljava/lang/String;
}
-public final class org/jetbrains/dokka/model/TypeParameter : org/jetbrains/dokka/model/Bound, org/jetbrains/dokka/model/properties/WithExtraProperties {
+public final class org/jetbrains/dokka/model/TypeParameter : org/jetbrains/dokka/model/Bound, org/jetbrains/dokka/model/AnnotationTarget, org/jetbrains/dokka/model/properties/WithExtraProperties {
public fun <init> (Lorg/jetbrains/dokka/links/DRI;Ljava/lang/String;Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)V
public synthetic fun <init> (Lorg/jetbrains/dokka/links/DRI;Ljava/lang/String;Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lorg/jetbrains/dokka/links/DRI;
@@ -2042,15 +2052,20 @@ public final class org/jetbrains/dokka/model/TypeParameter : org/jetbrains/dokka
public fun withNewExtras (Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/TypeParameter;
}
-public final class org/jetbrains/dokka/model/UnresolvedBound : org/jetbrains/dokka/model/Bound {
- public fun <init> (Ljava/lang/String;)V
+public final class org/jetbrains/dokka/model/UnresolvedBound : org/jetbrains/dokka/model/Bound, org/jetbrains/dokka/model/AnnotationTarget, org/jetbrains/dokka/model/properties/WithExtraProperties {
+ public fun <init> (Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)V
+ public synthetic fun <init> (Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
- public final fun copy (Ljava/lang/String;)Lorg/jetbrains/dokka/model/UnresolvedBound;
- public static synthetic fun copy$default (Lorg/jetbrains/dokka/model/UnresolvedBound;Ljava/lang/String;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/UnresolvedBound;
+ public final fun component2 ()Lorg/jetbrains/dokka/model/properties/PropertyContainer;
+ public final fun copy (Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/UnresolvedBound;
+ public static synthetic fun copy$default (Lorg/jetbrains/dokka/model/UnresolvedBound;Ljava/lang/String;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/UnresolvedBound;
public fun equals (Ljava/lang/Object;)Z
+ public fun getExtra ()Lorg/jetbrains/dokka/model/properties/PropertyContainer;
public final fun getName ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
+ public synthetic fun withNewExtras (Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Ljava/lang/Object;
+ public fun withNewExtras (Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/UnresolvedBound;
}
public abstract class org/jetbrains/dokka/model/Variance : org/jetbrains/dokka/model/Projection {
diff --git a/core/src/main/kotlin/model/Documentable.kt b/core/src/main/kotlin/model/Documentable.kt
index 13d04555..0f73c8e1 100644
--- a/core/src/main/kotlin/model/Documentable.kt
+++ b/core/src/main/kotlin/model/Documentable.kt
@@ -385,20 +385,18 @@ data class DTypeAlias(
}
sealed class Projection
-sealed class Bound : Projection(), AnnotationTarget
+sealed class Bound : Projection()
data class TypeParameter(
val dri: DRI,
val name: String,
val presentableName: String? = null,
override val extra: PropertyContainer<TypeParameter> = PropertyContainer.empty()
-) : Bound(), WithExtraProperties<TypeParameter> {
+) : Bound(), AnnotationTarget, WithExtraProperties<TypeParameter> {
override fun withNewExtras(newExtras: PropertyContainer<TypeParameter>): TypeParameter =
copy(extra = extra)
}
-object Star : Projection()
-
-sealed class TypeConstructor : Bound() {
+sealed class TypeConstructor : Bound(), AnnotationTarget {
abstract val dri: DRI
abstract val projections: List<Projection>
abstract val presentableName: String?
@@ -426,6 +424,39 @@ data class FunctionalTypeConstructor(
copy(extra = newExtras)
}
+// kotlin.annotation.AnnotationTarget.TYPEALIAS
+data class TypeAliased(
+ val typeAlias: Bound,
+ val inner: Bound,
+ override val extra: PropertyContainer<TypeAliased> = PropertyContainer.empty()
+) : Bound(), AnnotationTarget, WithExtraProperties<TypeAliased> {
+ override fun withNewExtras(newExtras: PropertyContainer<TypeAliased>): TypeAliased =
+ copy(extra = newExtras)
+}
+
+data class PrimitiveJavaType(
+ val name: String,
+ override val extra: PropertyContainer<PrimitiveJavaType> = PropertyContainer.empty()
+) : Bound(), AnnotationTarget, WithExtraProperties<PrimitiveJavaType> {
+ override fun withNewExtras(newExtras: PropertyContainer<PrimitiveJavaType>): PrimitiveJavaType =
+ copy(extra = newExtras)
+}
+
+data class JavaObject(override val extra: PropertyContainer<JavaObject> = PropertyContainer.empty()) :
+ Bound(), AnnotationTarget, WithExtraProperties<JavaObject> {
+ override fun withNewExtras(newExtras: PropertyContainer<JavaObject>): JavaObject =
+ copy(extra = newExtras)
+}
+
+data class UnresolvedBound(
+ val name: String,
+ override val extra: PropertyContainer<UnresolvedBound> = PropertyContainer.empty()
+) : Bound(), AnnotationTarget, WithExtraProperties<UnresolvedBound> {
+ override fun withNewExtras(newExtras: PropertyContainer<UnresolvedBound>): UnresolvedBound =
+ copy(extra = newExtras)
+}
+
+// The following Projections are not AnnotationTargets; they cannot be annotated.
data class Nullable(val inner: Bound) : Bound()
sealed class Variance<out T : Bound> : Projection() {
@@ -444,19 +475,10 @@ data class Invariance<out T : Bound>(override val inner: T) : Variance<T>() {
override fun toString() = ""
}
-data class TypeAliased(val typeAlias: Bound, val inner: Bound) : Bound()
-data class PrimitiveJavaType(val name: String) : Bound()
+object Star : Projection()
object Void : Bound()
-
-data class JavaObject(override val extra: PropertyContainer<JavaObject> = PropertyContainer.empty()) : Bound(),
- WithExtraProperties<JavaObject> {
- override fun withNewExtras(newExtras: PropertyContainer<JavaObject>): JavaObject =
- copy(extra = newExtras)
-}
-
object Dynamic : Bound()
-data class UnresolvedBound(val name: String) : Bound()
fun Variance<TypeParameter>.withDri(dri: DRI) = when (this) {
is Contravariance -> Contravariance(TypeParameter(dri, inner.name, inner.presentableName))
diff --git a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt
index 259f374a..6bc8774d 100644
--- a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt
+++ b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt
@@ -13,8 +13,9 @@ import org.jetbrains.dokka.analysis.KotlinAnalysis
import org.jetbrains.dokka.analysis.from
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.parsers.MarkdownParser
-import org.jetbrains.dokka.base.translators.typeConstructorsBeingExceptions
import org.jetbrains.dokka.base.translators.psi.parsers.JavadocParser
+import org.jetbrains.dokka.base.translators.psi.DefaultPsiToDocumentableTranslator
+import org.jetbrains.dokka.base.translators.typeConstructorsBeingExceptions
import org.jetbrains.dokka.base.translators.unquotedValue
import org.jetbrains.dokka.links.*
import org.jetbrains.dokka.links.Callable
@@ -31,7 +32,6 @@ import org.jetbrains.dokka.utilities.DokkaLogger
import org.jetbrains.dokka.utilities.parallelMap
import org.jetbrains.dokka.utilities.parallelMapNotNull
import org.jetbrains.kotlin.KtNodeTypes
-import org.jetbrains.dokka.model.BooleanConstant
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
import org.jetbrains.kotlin.builtins.isBuiltinExtensionFunctionalType
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
@@ -68,16 +68,16 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import java.nio.file.Paths
import org.jetbrains.kotlin.resolve.constants.AnnotationValue as ConstantsAnnotationValue
import org.jetbrains.kotlin.resolve.constants.ArrayValue as ConstantsArrayValue
-import org.jetbrains.kotlin.resolve.constants.EnumValue as ConstantsEnumValue
-import org.jetbrains.kotlin.resolve.constants.KClassValue as ConstantsKtClassValue
+import org.jetbrains.kotlin.resolve.constants.BooleanValue as ConstantsBooleanValue
import org.jetbrains.kotlin.resolve.constants.DoubleValue as ConstantsDoubleValue
+import org.jetbrains.kotlin.resolve.constants.EnumValue as ConstantsEnumValue
import org.jetbrains.kotlin.resolve.constants.FloatValue as ConstantsFloatValue
import org.jetbrains.kotlin.resolve.constants.IntValue as ConstantsIntValue
+import org.jetbrains.kotlin.resolve.constants.KClassValue as ConstantsKtClassValue
import org.jetbrains.kotlin.resolve.constants.LongValue as ConstantsLongValue
+import org.jetbrains.kotlin.resolve.constants.NullValue as ConstantsNullValue
import org.jetbrains.kotlin.resolve.constants.UIntValue as ConstantsUIntValue
import org.jetbrains.kotlin.resolve.constants.ULongValue as ConstantsULongValue
-import org.jetbrains.kotlin.resolve.constants.BooleanValue as ConstantsBooleanValue
-import org.jetbrains.kotlin.resolve.constants.NullValue as ConstantsNullValue
class DefaultDescriptorToDocumentableTranslator(
private val context: DokkaContext
@@ -773,7 +773,9 @@ private class DokkaDescriptorVisitor(
private suspend fun toTypeConstructor(kt: KotlinType) =
GenericTypeConstructor(
DRI.from(kt.constructor.declarationDescriptor as DeclarationDescriptor),
- kt.arguments.map { it.toProjection() })
+ kt.arguments.map { it.toProjection() },
+ extra = PropertyContainer.withAll(kt.getAnnotations().toSourceSetDependent().toAnnotations())
+ )
private suspend fun buildAncestryInformation(
kotlinType: KotlinType
@@ -834,7 +836,8 @@ private class DokkaDescriptorVisitor(
is DynamicType -> Dynamic
is AbbreviatedType -> TypeAliased(
abbreviation.toBound(),
- expandedType.toBound()
+ expandedType.toBound(),
+ annotations()
)
else -> when (val ctor = constructor.declarationDescriptor) {
is TypeParameterDescriptor -> TypeParameter(
diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt
index 4b2d7720..f9199154 100644
--- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt
+++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt
@@ -472,13 +472,14 @@ class DefaultPsiToDocumentableTranslator(
extra = type.annotations()
)
}
- } ?: UnresolvedBound(type.presentableText)
+ } ?: UnresolvedBound(type.presentableText, type.annotations())
is PsiArrayType -> GenericTypeConstructor(
DRI("kotlin", "Array"),
listOf(getProjection(type.componentType)),
extra = type.annotations()
)
- is PsiPrimitiveType -> if (type.name == "void") Void else PrimitiveJavaType(type.name)
+ is PsiPrimitiveType -> if (type.name == "void") Void
+ else PrimitiveJavaType(type.name, type.annotations())
is PsiImmediateClassType -> JavaObject(type.annotations())
else -> throw IllegalStateException("${type.presentableText} is not supported by PSI parser")
}
diff --git a/plugins/base/src/test/kotlin/translators/DefaultDescriptorToDocumentableTranslatorTest.kt b/plugins/base/src/test/kotlin/translators/DefaultDescriptorToDocumentableTranslatorTest.kt
index 798a3f3b..fd9fcc5d 100644
--- a/plugins/base/src/test/kotlin/translators/DefaultDescriptorToDocumentableTranslatorTest.kt
+++ b/plugins/base/src/test/kotlin/translators/DefaultDescriptorToDocumentableTranslatorTest.kt
@@ -1,13 +1,15 @@
package translators
import org.jetbrains.dokka.DokkaConfiguration
+import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
+import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.model.*
-import org.junit.jupiter.api.Assertions.*
import org.jetbrains.dokka.model.doc.CodeBlock
import org.jetbrains.dokka.model.doc.P
import org.jetbrains.dokka.model.doc.Text
-import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.junit.Assert
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test
class DefaultDescriptorToDocumentableTranslatorTest : BaseAbstractTest() {
@@ -663,4 +665,65 @@ class DefaultDescriptorToDocumentableTranslatorTest : BaseAbstractTest() {
}
}
}
+
+ val javaConfiguration = dokkaConfiguration {
+ sourceSets {
+ sourceSet {
+ sourceRoots = listOf("src/main/java")
+ includeNonPublic = true
+ }
+ }
+ }
+
+ @Disabled // The compiler throws away annotations on unresolved types upstream
+ @Test
+ fun `Can annotate unresolved type`() {
+ testInline(
+ """
+ |/src/main/java/sample/FooLibrary.kt
+ |package sample;
+ |@MustBeDocumented
+ |@Target(AnnotationTarget.TYPE)
+ |annotation class Hello()
+ |fun bar(): @Hello() TypeThatDoesntResolve
+ """.trimMargin(),
+ javaConfiguration
+ ) {
+ documentablesMergingStage = { module ->
+ val type = module.packages.single().functions.single().type as GenericTypeConstructor
+ assertEquals(
+ Annotations.Annotation(DRI("sample", "Hello"), emptyMap()),
+ type.extra[Annotations]?.directAnnotations?.values?.single()?.single()
+ )
+ }
+ }
+ }
+
+ /**
+ * Kotlin Int becomes java int. Java int cannot be annotated in source, but Kotlin Int can be.
+ * This is paired with KotlinAsJavaPluginTest.`Java primitive annotations work`()
+ */
+ @Test
+ fun `Java primitive annotations work`() {
+ testInline(
+ """
+ |/src/main/java/sample/FooLibrary.kt
+ |package sample;
+ |@MustBeDocumented
+ |@Target(AnnotationTarget.TYPE)
+ |annotation class Hello()
+ |fun bar(): @Hello() Int
+ """.trimMargin(),
+ javaConfiguration
+ ) {
+ documentablesMergingStage = { module ->
+ val type = module.packages.single().functions.single().type as GenericTypeConstructor
+ assertEquals(
+ Annotations.Annotation(DRI("sample", "Hello"), emptyMap()),
+ type.extra[Annotations]?.directAnnotations?.values?.single()?.single()
+ )
+ assertEquals("kotlin/Int///PointingToDeclaration/", type.dri.toString())
+ }
+ }
+ }
}
diff --git a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt
index b9627f9b..0235b9d1 100644
--- a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt
+++ b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt
@@ -4,10 +4,14 @@ import matchers.content.*
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.jetbrains.dokka.jdk
+import org.jetbrains.dokka.links.DRI
+import org.jetbrains.dokka.model.Annotations
+import org.jetbrains.dokka.model.GenericTypeConstructor
import org.jetbrains.dokka.model.dfs
import org.jetbrains.dokka.pages.*
import org.jetbrains.kotlin.utils.addToStdlib.cast
import org.junit.Assert
+import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import signatures.Parameter
import signatures.Parameters
@@ -534,6 +538,54 @@ class KotlinAsJavaPluginTest : BaseAbstractTest() {
}
}
}
+
+ /**
+ * Kotlin Int becomes java int. Java int cannot be annotated in source, but Kotlin Int can be.
+ * This is paired with DefaultDescriptorToDocumentableTranslatorTest.`Java primitive annotations work`()
+ *
+ * This test currently does not do anything because Kotlin.Int currently becomes java.lang.Integer not primitive int
+ */
+ @Test
+ fun `Java primitive annotations work`() {
+ val writerPlugin = TestOutputWriterPlugin()
+ val configuration = dokkaConfiguration {
+ sourceSets {
+ sourceSet {
+ sourceRoots = listOf("src/")
+ externalDocumentationLinks = listOf(
+ DokkaConfiguration.ExternalDocumentationLink.jdk(8),
+ stdlibExternalDocumentationLink
+ )
+ }
+ }
+ }
+ testInline(
+ """
+ |/src/main/kotlin/kotlinAsJavaPlugin/Test.kt
+ |package kotlinAsJavaPlugin
+ |@MustBeDocumented
+ |@Target(AnnotationTarget.TYPE)
+ |annotation class Hello()
+ |fun bar(): @Hello() Int
+ """.trimMargin(),
+ configuration,
+ pluginOverrides = listOf(writerPlugin),
+ cleanupOutput = true
+ ) {
+ documentablesTransformationStage = { module ->
+ val type = module.packages.single()
+ .classlikes.first { it.name == "TestKt" }
+ .functions.single()
+ .type as GenericTypeConstructor
+ Assertions.assertEquals(
+ Annotations.Annotation(DRI("kotlinAsJavaPlugin", "Hello"), emptyMap()),
+ type.extra[Annotations]?.directAnnotations?.values?.single()?.single()
+ )
+ // A bug; the GenericTypeConstructor cast should fail and this should be a PrimitiveJavaType
+ Assertions.assertEquals("java.lang/Integer///PointingToDeclaration/", type.dri.toString())
+ }
+ }
+ }
}
private val ContentNode.mainContents: List<ContentNode>