Fix loading class literal value void.class in reflection
#KT-27878 Fixed
This commit is contained in:
+7
@@ -16,11 +16,13 @@
|
||||
|
||||
package kotlin.reflect.jvm.internal.components
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
|
||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||
import org.jetbrains.kotlin.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.constants.ClassLiteralValue
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||
@@ -195,6 +197,11 @@ private object ReflectClassStructure {
|
||||
currentClass = currentClass.componentType
|
||||
}
|
||||
if (currentClass.isPrimitive) {
|
||||
if (currentClass == Void.TYPE) {
|
||||
// void.class is not representable in Kotlin, we approximate it by Unit::class
|
||||
return ClassLiteralValue(ClassId.topLevel(KotlinBuiltIns.FQ_NAMES.unit.toSafe()), dimensions)
|
||||
}
|
||||
|
||||
val primitiveType = JvmPrimitiveType.get(currentClass.name).primitiveType
|
||||
if (dimensions > 0) {
|
||||
return ClassLiteralValue(ClassId.topLevel(primitiveType.arrayTypeFqName), dimensions - 1)
|
||||
|
||||
Reference in New Issue
Block a user