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(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"
|
return "OK"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ fun box(): String {
|
|||||||
assertEquals(3, B.Factory::class.objectInstance!!.foo())
|
assertEquals(3, B.Factory::class.objectInstance!!.foo())
|
||||||
|
|
||||||
assertEquals(null, C::class.objectInstance)
|
assertEquals(null, C::class.objectInstance)
|
||||||
|
assertEquals(null, String::class.objectInstance)
|
||||||
|
assertEquals(Unit, Unit::class.objectInstance)
|
||||||
|
|
||||||
return "OK"
|
return "OK"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package kotlin.reflect.jvm.internal
|
package kotlin.reflect.jvm.internal
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.CompanionObjectMapping
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
@@ -127,7 +128,7 @@ internal class KClassImpl<T : Any>(override val jClass: Class<T>) :
|
|||||||
val descriptor = descriptor
|
val descriptor = descriptor
|
||||||
if (descriptor.kind != ClassKind.OBJECT) return@lazy null
|
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())
|
jClass.enclosingClass.getDeclaredField(descriptor.name.asString())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
Reference in New Issue
Block a user