Fix: bridges are now generated for non-final functions of Kotlin built-in classes

This commit is contained in:
Mikhail Glukhikh
2015-10-13 18:43:29 +03:00
parent d4a1a469b7
commit 37ecf5def5
2 changed files with 10 additions and 7 deletions
@@ -17,13 +17,11 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.backend.common.bridges.*
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.load.java.getBuiltinSpecialOverridden
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
import org.jetbrains.kotlin.utils.singletonOrEmptyList
import java.util.*
@@ -102,8 +100,13 @@ private fun needGenerateSpecialBridge(
if (superClassDescriptor !is JavaClassDescriptor) {
// Kotlin class
// ?
if (implementsBuiltinDeclaration) return false
if (implementsBuiltinDeclaration) {
if (!functionDescriptor.modality.isOverridable) return false
// Generate bridges if it's built-in
val containingPackageFragment = DescriptorUtils.getParentOfType(superClassDescriptor, PackageFragmentDescriptor::class.java)
if (containingPackageFragment === superClassDescriptor.builtIns.builtInsPackageFragment) return true
return false
}
}
else {
// java super class inherits builtin class and it's declaration is final
+1 -1
View File
@@ -1,6 +1,6 @@
>>> Integer.valueOf(42)
42
>>> Integer(239).intValue()
>>> Integer(239).toInt()
239
>>> java.lang.Long.MIN_VALUE as Any
-9223372036854775808