diff --git a/core/builtins/src/kotlin/reflect/KCallable.kt b/core/builtins/src/kotlin/reflect/KCallable.kt index 61652623d2e..232ace3cab5 100644 --- a/core/builtins/src/kotlin/reflect/KCallable.kt +++ b/core/builtins/src/kotlin/reflect/KCallable.kt @@ -39,6 +39,11 @@ public interface KCallable { */ public val parameters: List + /** + * The type of values returned by this callable. + */ + public val returnType: KType + /** * Calls this callable with the specified arguments and returns the result. * Throws an exception if the number of specified arguments is not equal to the size of [parameters], diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KCallableImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KCallableImpl.kt index e312e76a79d..26cf3d0ddca 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KCallableImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KCallableImpl.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import java.util.ArrayList import kotlin.reflect.KCallable import kotlin.reflect.KParameter +import kotlin.reflect.KType interface KCallableImpl : KCallable { val descriptor: CallableMemberDescriptor @@ -44,4 +45,7 @@ interface KCallableImpl : KCallable { result.trimToSize() return result } + + override val returnType: KType + get() = KTypeImpl(descriptor.returnType!!) } diff --git a/core/runtime.jvm/src/kotlin/jvm/internal/CallableReference.java b/core/runtime.jvm/src/kotlin/jvm/internal/CallableReference.java index 3e51a3b8609..a24cf0ad853 100644 --- a/core/runtime.jvm/src/kotlin/jvm/internal/CallableReference.java +++ b/core/runtime.jvm/src/kotlin/jvm/internal/CallableReference.java @@ -20,6 +20,7 @@ import kotlin.jvm.KotlinReflectionNotSupportedError; import kotlin.reflect.KCallable; import kotlin.reflect.KDeclarationContainer; import kotlin.reflect.KParameter; +import kotlin.reflect.KType; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -69,6 +70,11 @@ public abstract class CallableReference implements KCallable { throw error(); } + @Override + public KType getReturnType() { + throw error(); + } + @Override public Object call(@NotNull Object... args) { throw error(); diff --git a/core/runtime.jvm/src/kotlin/jvm/internal/FunctionReference.java b/core/runtime.jvm/src/kotlin/jvm/internal/FunctionReference.java index eb7f2cd0f5e..c868feee1ca 100644 --- a/core/runtime.jvm/src/kotlin/jvm/internal/FunctionReference.java +++ b/core/runtime.jvm/src/kotlin/jvm/internal/FunctionReference.java @@ -66,6 +66,11 @@ public class FunctionReference throw error(); } + @Override + public KType getReturnType() { + throw error(); + } + @Override public Object call(@NotNull Object... args) { throw error();