diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt index 7ecadebd2e5..7ea36dfc84f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt @@ -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 diff --git a/compiler/testData/repl/primitiveTypes/boxingOnPurpose.repl b/compiler/testData/repl/primitiveTypes/boxingOnPurpose.repl index 63035485204..df5b2e5cc15 100644 --- a/compiler/testData/repl/primitiveTypes/boxingOnPurpose.repl +++ b/compiler/testData/repl/primitiveTypes/boxingOnPurpose.repl @@ -1,6 +1,6 @@ >>> Integer.valueOf(42) 42 ->>> Integer(239).intValue() +>>> Integer(239).toInt() 239 >>> java.lang.Long.MIN_VALUE as Any -9223372036854775808