diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index e24bcd8c512..ed5f6904ca5 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -28515,6 +28515,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index b1b34a68acd..48fbb3e5997 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -28515,6 +28515,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt index 01007f5cbff..5437f0c25b6 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt @@ -20,8 +20,6 @@ import java.lang.invoke.MethodHandle import java.lang.invoke.MethodHandles import java.lang.invoke.MethodType import java.util.* -import kotlin.collections.HashMap -import kotlin.collections.LinkedHashMap internal class Wrapper(val value: Any, override val irClass: IrClass, environment: IrInterpreterEnvironment) : Complex { override val fields: Fields = mutableMapOf() @@ -100,6 +98,13 @@ internal class Wrapper(val value: Any, override val irClass: IrClass, environmen "kotlin.text.RegexOption", "kotlin.text.Regex", "kotlin.text.Regex.Companion", "kotlin.text.MatchGroup", ) + private val intrinsicJavaClasses = setOf( + "java.lang.StringBuilder", "java.util.ArrayList", + "java.util.LinkedHashMap", "java.util.LinkedHashSet", + "java.lang.Exception", "java.util.NoSuchElementException", "java.lang.NullPointerException", + "java.lang.IllegalArgumentException", "java.lang.ArithmeticException", "java.lang.UnsupportedOperationException", + ) + private val intrinsicFunctionToHandler = mapOf( "Array.kotlin.collections.asList()" to "kotlin.collections.ArraysKt", "kotlin.collections.mutableListOf(Array)" to "kotlin.collections.CollectionsKt", @@ -111,8 +116,7 @@ internal class Wrapper(val value: Any, override val irClass: IrClass, environmen private val ranges = setOf("kotlin.ranges.CharRange", "kotlin.ranges.IntRange", "kotlin.ranges.LongRange") - private fun IrFunction.getSignature(): String { - val fqName = this.fqName + private fun IrFunction.getSignature(fqName: String = this.fqName): String { val receiver = (dispatchReceiverParameter ?: extensionReceiverParameter)?.type?.getOnlyName()?.let { "$it." } ?: "" return this.valueParameters.joinToString(prefix = "$receiver$fqName(", postfix = ")") { it.type.getOnlyName() } } @@ -122,11 +126,11 @@ internal class Wrapper(val value: Any, override val irClass: IrClass, environmen } fun mustBeHandledWithWrapper(declaration: IrDeclarationWithName): Boolean { - if (declaration is IrFunction) return declaration.getSignature() in intrinsicFunctionToHandler val fqName = declaration.fqName return when { - fqName in ranges && (declaration as IrClass).primaryConstructor!!.body == null -> true - else -> fqName in intrinsicClasses || fqName.startsWith("java") + declaration is IrFunction -> declaration.getSignature(fqName) in intrinsicFunctionToHandler + fqName in ranges && (declaration as IrClass).primaryConstructor?.body == null -> true + else -> fqName in intrinsicClasses || fqName in intrinsicJavaClasses } } diff --git a/compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt b/compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt new file mode 100644 index 00000000000..b406ad0d6bc --- /dev/null +++ b/compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt @@ -0,0 +1,19 @@ +// Can't be tested in JVM because frontend doesn't allow such code +// TARGET_BACKEND: JS_IR +// TARGET_BACKEND: NATIVE +// WITH_STDLIB + +package java.lang + +object Math { + const val E: Double = kotlin.math.E + const val PI: Double = kotlin.math.PI + const val OK: String = "OK" +} + +const val usageE = Math.E +const val usagePI = Math.PI + +fun box(): String { + return Math.OK +} diff --git a/compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt b/compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt new file mode 100644 index 00000000000..8fabb3327d2 --- /dev/null +++ b/compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt @@ -0,0 +1,17 @@ +// TARGET_BACKEND: JVM_IR +// TARGET_BACKEND: JS_IR +// TARGET_BACKEND: NATIVE + +package java2d + +class A { + fun getConst() = OK + + companion object { + const val OK = "OK" + } +} + +fun box(): String { + return A().getConst() +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index ef55b607dcf..c47f47165ab 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -28515,6 +28515,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index acb05213f0d..008f69a6ee9 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -28515,6 +28515,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 5eefa2213a7..b9a44c8035f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -24054,6 +24054,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { runTest("compiler/testData/codegen/box/involvesIrInterpreter/intOperations.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index 8061f91cd0c..7f6e9c9a705 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -21093,6 +21093,18 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaLangPackage.kt") + public void testInJavaLangPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt"); + } + + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index cafa32e03c9..e49f7eb1ea1 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -21093,6 +21093,18 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaLangPackage.kt") + public void testInJavaLangPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt"); + } + + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java index 8a5348850cf..5f88d21efcf 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java @@ -21093,6 +21093,18 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaLangPackage.kt") + public void testInJavaLangPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt"); + } + + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java index e087ceba3e7..c1b226c119f 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java @@ -23900,6 +23900,18 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaLangPackage.kt") + public void testInJavaLangPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt"); + } + + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java index 77371eca0f6..f04b093767a 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java @@ -24364,6 +24364,18 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaLangPackage.kt") + public void testInJavaLangPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt"); + } + + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index 442aef508ca..81d581bbf57 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -23669,6 +23669,18 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaLangPackage.kt") + public void testInJavaLangPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt"); + } + + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java index 0d4c85e9034..fd600f2ff19 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java @@ -23901,6 +23901,18 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/involvesIrInterpreter/floatOperations.kt"); } + @Test + @TestMetadata("inJavaLangPackage.kt") + public void testInJavaLangPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaLangPackage.kt"); + } + + @Test + @TestMetadata("inJavaPackage.kt") + public void testInJavaPackage() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/inJavaPackage.kt"); + } + @Test @TestMetadata("intOperations.kt") public void testIntOperations() throws Exception {