Fix NPE on .companionObjectInstance for built-in classes
#KT-13370 Fixed
This commit is contained in:
@@ -25,5 +25,24 @@ fun box(): String {
|
||||
|
||||
assertEquals(E.Companion, E::class.companionObjectInstance)
|
||||
|
||||
assertEquals(String, String::class.companionObjectInstance)
|
||||
assertEquals(String, String.Companion::class.objectInstance)
|
||||
assertEquals(Enum, Enum::class.companionObjectInstance)
|
||||
assertEquals(Enum, Enum.Companion::class.objectInstance)
|
||||
assertEquals(Double, Double::class.companionObjectInstance)
|
||||
assertEquals(Double, Double.Companion::class.objectInstance)
|
||||
assertEquals(Float, Float::class.companionObjectInstance)
|
||||
assertEquals(Float, Float.Companion::class.objectInstance)
|
||||
assertEquals(Int, Int::class.companionObjectInstance)
|
||||
assertEquals(Int, Int.Companion::class.objectInstance)
|
||||
assertEquals(Long, Long::class.companionObjectInstance)
|
||||
assertEquals(Long, Long.Companion::class.objectInstance)
|
||||
assertEquals(Short, Short::class.companionObjectInstance)
|
||||
assertEquals(Short, Short.Companion::class.objectInstance)
|
||||
assertEquals(Byte, Byte::class.companionObjectInstance)
|
||||
assertEquals(Byte, Byte.Companion::class.objectInstance)
|
||||
assertEquals(Char, Char::class.companionObjectInstance)
|
||||
assertEquals(Char, Char.Companion::class.objectInstance)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ fun box(): String {
|
||||
assertEquals(3, B.Factory::class.objectInstance!!.foo())
|
||||
|
||||
assertEquals(null, C::class.objectInstance)
|
||||
assertEquals(null, String::class.objectInstance)
|
||||
assertEquals(Unit, Unit::class.objectInstance)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package kotlin.reflect.jvm.internal
|
||||
|
||||
import org.jetbrains.kotlin.builtins.CompanionObjectMapping
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
@@ -127,7 +128,7 @@ internal class KClassImpl<T : Any>(override val jClass: Class<T>) :
|
||||
val descriptor = descriptor
|
||||
if (descriptor.kind != ClassKind.OBJECT) return@lazy null
|
||||
|
||||
val field = if (descriptor.isCompanionObject) {
|
||||
val field = if (descriptor.isCompanionObject && !CompanionObjectMapping.hasMappingToObject(descriptor)) {
|
||||
jClass.enclosingClass.getDeclaredField(descriptor.name.asString())
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user