Fix: bridges are now generated for non-final functions of Kotlin built-in classes
This commit is contained in:
@@ -17,13 +17,11 @@
|
|||||||
package org.jetbrains.kotlin.codegen
|
package org.jetbrains.kotlin.codegen
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.bridges.*
|
import org.jetbrains.kotlin.backend.common.bridges.*
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
|
||||||
import org.jetbrains.kotlin.load.java.getBuiltinSpecialOverridden
|
import org.jetbrains.kotlin.load.java.getBuiltinSpecialOverridden
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||||
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
|
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
|
||||||
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -102,8 +100,13 @@ private fun needGenerateSpecialBridge(
|
|||||||
|
|
||||||
if (superClassDescriptor !is JavaClassDescriptor) {
|
if (superClassDescriptor !is JavaClassDescriptor) {
|
||||||
// Kotlin class
|
// Kotlin class
|
||||||
// ?
|
if (implementsBuiltinDeclaration) {
|
||||||
if (implementsBuiltinDeclaration) return false
|
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 {
|
else {
|
||||||
// java super class inherits builtin class and it's declaration is final
|
// java super class inherits builtin class and it's declaration is final
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
>>> Integer.valueOf(42)
|
>>> Integer.valueOf(42)
|
||||||
42
|
42
|
||||||
>>> Integer(239).intValue()
|
>>> Integer(239).toInt()
|
||||||
239
|
239
|
||||||
>>> java.lang.Long.MIN_VALUE as Any
|
>>> java.lang.Long.MIN_VALUE as Any
|
||||||
-9223372036854775808
|
-9223372036854775808
|
||||||
|
|||||||
Reference in New Issue
Block a user