From 3ca0f8a56985571b1d3ad29d5f2e8b128e68a51e Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 20 Jan 2020 15:48:05 +0100 Subject: [PATCH] Fix incorrect message for new nullability assertion exception in 1.4 #KT-36026 Fixed --- .../paramAssertionMessage.kt | 2 -- .../inheritance/neg/12.exceptions.runtime.txt | 2 +- .../kotlin/jvm/internal/Intrinsics.java | 29 +++++++++++-------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/compiler/testData/codegen/box/javaInterop/notNullAssertions/paramAssertionMessage.kt b/compiler/testData/codegen/box/javaInterop/notNullAssertions/paramAssertionMessage.kt index 5bc65a34de0..8dfe3d599cf 100644 --- a/compiler/testData/codegen/box/javaInterop/notNullAssertions/paramAssertionMessage.kt +++ b/compiler/testData/codegen/box/javaInterop/notNullAssertions/paramAssertionMessage.kt @@ -1,6 +1,4 @@ // TARGET_BACKEND: JVM -// IGNORE_BACKEND: JVM, JVM_IR -// IGNORE_BACKEND_FIR: JVM_IR // FILE: Test.java public class Test { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/12.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/12.exceptions.runtime.txt index b2e1ecc2b21..dfb618e4e6c 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/12.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/12.exceptions.runtime.txt @@ -1,2 +1,2 @@ -java.lang.IllegalArgumentException: Parameter specified as non-null is null: method Foo., parameter x +java.lang.NullPointerException: Parameter specified as non-null is null: method Foo., parameter x Foo.(12.kt) \ No newline at end of file diff --git a/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/Intrinsics.java b/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/Intrinsics.java index 5c57c274350..10e03019324 100644 --- a/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/Intrinsics.java +++ b/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/Intrinsics.java @@ -122,32 +122,37 @@ public class Intrinsics { public static void checkParameterIsNotNull(Object value, String paramName) { if (value == null) { - throwParameterIsNullException(paramName); + throwParameterIsNullIAE(paramName); } } public static void checkNotNullParameter(Object value, String paramName) { if (value == null) { - throw sanitizeStackTrace(new NullPointerException(paramName)); + throwParameterIsNullNPE(paramName); } } - private static void throwParameterIsNullException(String paramName) { + private static void throwParameterIsNullIAE(String paramName) { + throw sanitizeStackTrace(new IllegalArgumentException(createParameterIsNullExceptionMessage(paramName))); + } + + private static void throwParameterIsNullNPE(String paramName) { + throw sanitizeStackTrace(new NullPointerException(createParameterIsNullExceptionMessage(paramName))); + } + + private static String createParameterIsNullExceptionMessage(String paramName) { StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); // #0 Thread.getStackTrace() - // #1 Intrinsics.throwParameterIsNullException - // #2 Intrinsics.checkParameterIsNotNull - // #3 our caller - StackTraceElement caller = stackTraceElements[3]; + // #1 Intrinsics.createParameterIsNullExceptionMessage + // #2 Intrinsics.throwParameterIsNullIAE/throwParameterIsNullNPE + // #3 Intrinsics.checkParameterIsNotNull/checkNotNullParameter + // #4 our caller + StackTraceElement caller = stackTraceElements[4]; String className = caller.getClassName(); String methodName = caller.getMethodName(); - IllegalArgumentException exception = - new IllegalArgumentException("Parameter specified as non-null is null: " + - "method " + className + "." + methodName + - ", parameter " + paramName); - throw sanitizeStackTrace(exception); + return "Parameter specified as non-null is null: method " + className + "." + methodName + ", parameter " + paramName; } public static int compare(long thisVal, long anotherVal) {