From b0db9c5b03239178a9bc5c9e267e7ccaaef694d0 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 14 Jul 2015 13:54:45 +0300 Subject: [PATCH] Fix reflection on enhanced Java methods, call getOriginal() Also use the provided mechanism for binding overrides instead of a custom for loop, because it also binds corresponding value parameters --- .../load/java/descriptors/JavaMethodDescriptor.java | 9 +-------- .../src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt | 4 +++- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java index e9f9b2aa4b8..4ef5f52f642 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java @@ -92,8 +92,6 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement return result; } - - @Override @NotNull public JavaMethodDescriptor enhance( @@ -109,16 +107,11 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement // 2. copies method's type parameters (with new containing declaration) and properly substitute to them in value parameters, return type and etc. JavaMethodDescriptor enhancedMethod = (JavaMethodDescriptor) doSubstitute( TypeSubstitutor.EMPTY, getContainingDeclaration(), getModality(), getVisibility(), getOriginal(), - /* copyOverrides = */ false, getKind(), + /* copyOverrides = */ true, getKind(), enhancedValueParameters, enhancedReceiverType, enhancedReturnType ); assert enhancedMethod != null : "null after substitution while enhancing " + toString(); - - for (FunctionDescriptor overridden : getOverriddenDescriptors()) { - enhancedMethod.addOverriddenDescriptor(overridden); - } - return enhancedMethod; } } diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt index 61dcb7d472b..1bb2c0e760e 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt @@ -37,7 +37,9 @@ import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf import kotlin.reflect.KotlinReflectionInternalError object RuntimeTypeMapper { - fun mapSignature(function: FunctionDescriptor): String { + fun mapSignature(possiblySubstitutedFunction: FunctionDescriptor): String { + val function = possiblySubstitutedFunction.getOriginal() + if (function is DeserializedCallableMemberDescriptor) { val proto = function.proto if (!proto.hasExtension(JvmProtoBuf.methodSignature)) {