From 13746f4afacd72576515dd94ba1167546418421f Mon Sep 17 00:00:00 2001 From: owengray-google Date: Fri, 8 Apr 2022 11:53:52 -0400 Subject: Rework AnnotationTarget to be stricter (#2414) --- core/src/main/kotlin/model/Documentable.kt | 52 +++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'core/src/main/kotlin') 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 = PropertyContainer.empty() -) : Bound(), WithExtraProperties { +) : Bound(), AnnotationTarget, WithExtraProperties { override fun withNewExtras(newExtras: PropertyContainer): TypeParameter = copy(extra = extra) } -object Star : Projection() - -sealed class TypeConstructor : Bound() { +sealed class TypeConstructor : Bound(), AnnotationTarget { abstract val dri: DRI abstract val projections: List 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 = PropertyContainer.empty() +) : Bound(), AnnotationTarget, WithExtraProperties { + override fun withNewExtras(newExtras: PropertyContainer): TypeAliased = + copy(extra = newExtras) +} + +data class PrimitiveJavaType( + val name: String, + override val extra: PropertyContainer = PropertyContainer.empty() +) : Bound(), AnnotationTarget, WithExtraProperties { + override fun withNewExtras(newExtras: PropertyContainer): PrimitiveJavaType = + copy(extra = newExtras) +} + +data class JavaObject(override val extra: PropertyContainer = PropertyContainer.empty()) : + Bound(), AnnotationTarget, WithExtraProperties { + override fun withNewExtras(newExtras: PropertyContainer): JavaObject = + copy(extra = newExtras) +} + +data class UnresolvedBound( + val name: String, + override val extra: PropertyContainer = PropertyContainer.empty() +) : Bound(), AnnotationTarget, WithExtraProperties { + override fun withNewExtras(newExtras: PropertyContainer): UnresolvedBound = + copy(extra = newExtras) +} + +// The following Projections are not AnnotationTargets; they cannot be annotated. data class Nullable(val inner: Bound) : Bound() sealed class Variance : Projection() { @@ -444,19 +475,10 @@ data class Invariance(override val inner: T) : Variance() { 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 = PropertyContainer.empty()) : Bound(), - WithExtraProperties { - override fun withNewExtras(newExtras: PropertyContainer): JavaObject = - copy(extra = newExtras) -} - object Dynamic : Bound() -data class UnresolvedBound(val name: String) : Bound() fun Variance.withDri(dri: DRI) = when (this) { is Contravariance -> Contravariance(TypeParameter(dri, inner.name, inner.presentableName)) -- cgit