From 6b6ba778697a8469bd665f6acd707be808886d8e Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Fri, 11 Jun 2021 14:54:20 +0200 Subject: [PATCH] [JVM_IR] Trim the expression test string for null assertions. ^KT-47166 Fixed. --- .../FirBlackBoxCodegenTestGenerated.java | 6 ++++ .../backend/jvm/lower/TypeOperatorLowering.kt | 5 ++- .../box/notNullAssertions/messageLength.kt | 31 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++++ .../LightAnalysisModeTestGenerated.java | 5 +++ 6 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/notNullAssertions/messageLength.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index d7da89e1b75..26c4db8cc15 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -26408,6 +26408,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/notNullAssertions/doGenerateParamAssertions.kt"); } + @Test + @TestMetadata("messageLength.kt") + public void testMessageLength() throws Exception { + runTest("compiler/testData/codegen/box/notNullAssertions/messageLength.kt"); + } + @Test @TestMetadata("noCallAssertions.kt") public void testNoCallAssertions() throws Exception { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt index 4127f2caea1..3f1a2ea2327 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.backend.jvm.lower +import com.intellij.openapi.util.text.StringUtil import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.lower.IrBuildingTransformer import org.jetbrains.kotlin.backend.common.lower.at @@ -422,7 +423,7 @@ private class TypeOperatorLowering(private val context: JvmBackendContext) : Fil irComposite(resultType = expression.type) { +irCall(checkExpressionValueIsNotNull).apply { putValueArgument(0, irGet(valueSymbol.owner)) - putValueArgument(1, irString(source)) + putValueArgument(1, irString(source.trimForRuntimeAssertion())) } +irGet(valueSymbol.owner) } @@ -436,6 +437,8 @@ private class TypeOperatorLowering(private val context: JvmBackendContext) : Fil } } + private fun String.trimForRuntimeAssertion() = StringUtil.trimMiddle(this, 50) + private fun IrFunction.isDelegated() = origin == IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR || origin == IrDeclarationOrigin.DELEGATED_MEMBER diff --git a/compiler/testData/codegen/box/notNullAssertions/messageLength.kt b/compiler/testData/codegen/box/notNullAssertions/messageLength.kt new file mode 100644 index 00000000000..361ac3a36fa --- /dev/null +++ b/compiler/testData/codegen/box/notNullAssertions/messageLength.kt @@ -0,0 +1,31 @@ +// TARGET_BACKEND: JVM +// FILE: test.kt + +fun test(): String { + return A() + // Large comment that would cause the message for + // the non-null assertion to be very large if + // it is included verbatim in the message. + .foo() +} + +fun box(): String { + try { + test() + } catch(e: Throwable) { + return if (e.message!!.length <= " must not be null".length + 50) { + "OK" + } else { + "FAIL1" + } + } + return "FAIL2" +} + +// FILE: A.java + +public class A { + public String foo() { + return null; + } +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 003743f77c5..4b1a6944c36 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -26372,6 +26372,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/notNullAssertions/doGenerateParamAssertions.kt"); } + @Test + @TestMetadata("messageLength.kt") + public void testMessageLength() throws Exception { + runTest("compiler/testData/codegen/box/notNullAssertions/messageLength.kt"); + } + @Test @TestMetadata("noCallAssertions.kt") public void testNoCallAssertions() throws Exception { 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 f33219c3921..40a2d568938 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 @@ -26408,6 +26408,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/notNullAssertions/doGenerateParamAssertions.kt"); } + @Test + @TestMetadata("messageLength.kt") + public void testMessageLength() throws Exception { + runTest("compiler/testData/codegen/box/notNullAssertions/messageLength.kt"); + } + @Test @TestMetadata("noCallAssertions.kt") public void testNoCallAssertions() 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 5e3bcfef4ea..c53e2f3dbd4 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -22344,6 +22344,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/notNullAssertions/doGenerateParamAssertions.kt"); } + @TestMetadata("messageLength.kt") + public void testMessageLength() throws Exception { + runTest("compiler/testData/codegen/box/notNullAssertions/messageLength.kt"); + } + @TestMetadata("noCallAssertions.kt") public void testNoCallAssertions() throws Exception { runTest("compiler/testData/codegen/box/notNullAssertions/noCallAssertions.kt");