From a24ac86e1c6ec1f1d1e21d5358a34f9d8cd3e902 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 19 Oct 2015 15:36:19 +0300 Subject: [PATCH] Support exception messages for reified inline markers --- .../src/kotlin/jvm/internal/Intrinsics.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/core/runtime.jvm/src/kotlin/jvm/internal/Intrinsics.java b/core/runtime.jvm/src/kotlin/jvm/internal/Intrinsics.java index bdadf8a2530..045bc1e5252 100644 --- a/core/runtime.jvm/src/kotlin/jvm/internal/Intrinsics.java +++ b/core/runtime.jvm/src/kotlin/jvm/internal/Intrinsics.java @@ -106,30 +106,56 @@ public class Intrinsics { return first == null ? second == null : first.equals(second); } - private static void throwUndefinedForReified() { - throw new UnsupportedOperationException("You should not use functions with reified parameter without inline"); + public static void throwUndefinedForReified() { + throwUndefinedForReified( + "This function has a reified type parameter and thus can only be inlined at compilation time, not called directly." + ); + } + + public static void throwUndefinedForReified(String message) { + throw new UnsupportedOperationException(message); } public static void reifyNewArray(String typeParameterIdentifier) { throwUndefinedForReified(); } + public static void reifyNewArray(String typeParameterIdentifier, String message) { + throwUndefinedForReified(message); + } + public static void reifyCheckcast(String typeParameterIdentifier) { throwUndefinedForReified(); } + public static void reifyCheckcast(String typeParameterIdentifier, String message) { + throwUndefinedForReified(message); + } + public static void reifyInstanceof(String typeParameterIdentifier) { throwUndefinedForReified(); } + public static void reifyInstanceof(String typeParameterIdentifier, String message) { + throwUndefinedForReified(message); + } + public static void reifyJavaClass(String typeParameterIdentifier) { throwUndefinedForReified(); } + public static void reifyJavaClass(String typeParameterIdentifier, String message) { + throwUndefinedForReified(message); + } + public static void needClassReification() { throwUndefinedForReified(); } + public static void needClassReification(String message) { + throwUndefinedForReified(message); + } + private static T sanitizeStackTrace(T throwable) { return sanitizeStackTrace(throwable, Intrinsics.class.getName()); }