Support annotations on class type parameters

#KT-43714
This commit is contained in:
Mikhael Bogdanov
2021-05-21 20:48:21 +02:00
parent 9091ca7b51
commit a8186d19d6
18 changed files with 222 additions and 57 deletions
@@ -36,13 +36,14 @@ class LazyJavaTypeParameterDescriptor(
) : AbstractLazyTypeParameterDescriptor(
c.storageManager,
containingDeclaration,
LazyJavaAnnotations(c, javaTypeParameter),
javaTypeParameter.name,
Variance.INVARIANT,
/* isReified = */ false,
/* isReified = */
false,
index,
SourceElement.NO_SOURCE, c.components.supertypeLoopChecker
SourceElement.NO_SOURCE, c.components.supertypeLoopChecker,
) {
override val annotations = LazyJavaAnnotations(c, javaTypeParameter)
override fun resolveUpperBounds(): List<KotlinType> {
return computeNotEnhancedBounds()
@@ -29,6 +29,7 @@ public abstract class AbstractLazyTypeParameterDescriptor extends AbstractTypePa
public AbstractLazyTypeParameterDescriptor(
@NotNull StorageManager storageManager,
@NotNull DeclarationDescriptor containingDeclaration,
@NotNull Annotations annotations,
@NotNull Name name,
@NotNull Variance variance,
boolean isReified,
@@ -36,7 +37,7 @@ public abstract class AbstractLazyTypeParameterDescriptor extends AbstractTypePa
@NotNull SourceElement source,
@NotNull SupertypeLoopChecker supertypeLoopChecker
) {
super(storageManager, containingDeclaration, Annotations.Companion.getEMPTY() /* TODO */, name, variance, isReified, index, source,
super(storageManager, containingDeclaration, annotations, name, variance, isReified, index, source,
supertypeLoopChecker);
}
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.serialization.deserialization.descriptors
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.SupertypeLoopChecker
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.AbstractLazyTypeParameterDescriptor
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.upperBounds
@@ -32,8 +33,11 @@ class DeserializedTypeParameterDescriptor(
val proto: ProtoBuf.TypeParameter,
index: Int
) : AbstractLazyTypeParameterDescriptor(
c.storageManager, c.containingDeclaration, c.nameResolver.getName(proto.name),
ProtoEnumFlags.variance(proto.variance), proto.reified, index, SourceElement.NO_SOURCE, SupertypeLoopChecker.EMPTY
c.storageManager, c.containingDeclaration,
/*TODO: support deserialized type annotations: now they are unused, even not accessible via reflection (KT-46932)*/
Annotations.EMPTY,
c.nameResolver.getName(proto.name),
ProtoEnumFlags.variance(proto.variance), proto.reified, index, SourceElement.NO_SOURCE, SupertypeLoopChecker.EMPTY,
) {
override val annotations = DeserializedAnnotations(c.storageManager) {
c.components.annotationAndConstantLoader.loadTypeParameterAnnotations(proto, c.nameResolver).toList()