Fix NPE on .companionObjectInstance for built-in classes

#KT-13370 Fixed
This commit is contained in:
Alexander Udalov
2016-08-08 18:29:03 +03:00
parent 611899e9d3
commit 3efa738bc0
3 changed files with 23 additions and 1 deletions
@@ -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 {