Support arrays of class literals in AnnotationDeserializer
#KT-28927 Fixed
This commit is contained in:
+4
-3
@@ -30,7 +30,7 @@ annotation class Anno(
|
|||||||
val e: AnnotationTarget,
|
val e: AnnotationTarget,
|
||||||
val a: Nested,
|
val a: Nested,
|
||||||
val stra: Array<String>,
|
val stra: Array<String>,
|
||||||
// val ka: Array<KClass<*>>, // Arrays of class literals are not supported yet in AnnotationDeserializer
|
val ka: Array<KClass<*>>,
|
||||||
val ea: Array<AnnotationTarget>,
|
val ea: Array<AnnotationTarget>,
|
||||||
val aa: Array<Nested>
|
val aa: Array<Nested>
|
||||||
)
|
)
|
||||||
@@ -58,7 +58,7 @@ fun f(): @Anno(
|
|||||||
AnnotationTarget.EXPRESSION,
|
AnnotationTarget.EXPRESSION,
|
||||||
Nested("1"),
|
Nested("1"),
|
||||||
["lmao"],
|
["lmao"],
|
||||||
// [Double::class, Unit::class, LongArray::class],
|
[Double::class, Unit::class, LongArray::class],
|
||||||
[AnnotationTarget.TYPEALIAS, AnnotationTarget.FIELD],
|
[AnnotationTarget.TYPEALIAS, AnnotationTarget.FIELD],
|
||||||
[Nested("2"), Nested("3")]
|
[Nested("2"), Nested("3")]
|
||||||
) Unit {}
|
) Unit {}
|
||||||
@@ -68,7 +68,8 @@ fun box(): String {
|
|||||||
"[@Anno(b=1, c=x, d=3.14, f=-2.72, i=42424242, j=239239239239239, s=42, z=true, " +
|
"[@Anno(b=1, c=x, d=3.14, f=-2.72, i=42424242, j=239239239239239, s=42, z=true, " +
|
||||||
"ba=[-1], ca=[y], da=[-3.14159], fa=[2.7218], ia=[424242], ja=[239239239239], sa=[-43], za=[false, true], " +
|
"ba=[-1], ca=[y], da=[-3.14159], fa=[2.7218], ia=[424242], ja=[239239239239], sa=[-43], za=[false, true], " +
|
||||||
"str=lol, k=class java.lang.Number, k2=class [I, e=EXPRESSION, a=@Nested(value=1), " +
|
"str=lol, k=class java.lang.Number, k2=class [I, e=EXPRESSION, a=@Nested(value=1), " +
|
||||||
"stra=[lmao], ea=[TYPEALIAS, FIELD], aa=[@Nested(value=2), @Nested(value=3)])]",
|
"stra=[lmao], ka=[class java.lang.Double, class kotlin.Unit, class [J], ea=[TYPEALIAS, FIELD], " +
|
||||||
|
"aa=[@Nested(value=2), @Nested(value=3)])]",
|
||||||
::f.returnType.annotations.toString()
|
::f.returnType.annotations.toString()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation
|
import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation.Argument
|
import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation.Argument
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation.Argument.Value
|
import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation.Argument.Value
|
||||||
@@ -30,10 +31,7 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.constants.*
|
import org.jetbrains.kotlin.resolve.constants.*
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
import org.jetbrains.kotlin.types.SimpleType
|
|
||||||
import org.jetbrains.kotlin.types.Variance
|
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
||||||
|
|
||||||
class AnnotationDeserializer(private val module: ModuleDescriptor, private val notFoundClasses: NotFoundClasses) {
|
class AnnotationDeserializer(private val module: ModuleDescriptor, private val notFoundClasses: NotFoundClasses) {
|
||||||
@@ -141,7 +139,9 @@ class AnnotationDeserializer(private val module: ModuleDescriptor, private val n
|
|||||||
Type.DOUBLE -> doubleType
|
Type.DOUBLE -> doubleType
|
||||||
Type.BOOLEAN -> booleanType
|
Type.BOOLEAN -> booleanType
|
||||||
Type.STRING -> stringType
|
Type.STRING -> stringType
|
||||||
Type.CLASS -> error("Arrays of class literals are not supported yet") // TODO: support arrays of class literals
|
Type.CLASS -> KotlinTypeFactory.simpleNotNullType(
|
||||||
|
Annotations.EMPTY, kClass, listOf(StarProjectionImpl(kClass.declaredTypeParameters.single()))
|
||||||
|
)
|
||||||
Type.ENUM -> resolveClass(nameResolver.getClassId(value.classId)).defaultType
|
Type.ENUM -> resolveClass(nameResolver.getClassId(value.classId)).defaultType
|
||||||
Type.ANNOTATION -> resolveClass(nameResolver.getClassId(value.annotation.id)).defaultType
|
Type.ANNOTATION -> resolveClass(nameResolver.getClassId(value.annotation.id)).defaultType
|
||||||
Type.ARRAY -> error("Array of arrays is impossible")
|
Type.ARRAY -> error("Array of arrays is impossible")
|
||||||
|
|||||||
Reference in New Issue
Block a user