diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java
index 9015bcde149..65ad1e2251a 100644
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java
@@ -959,7 +959,7 @@ public class KotlinTypeMapper {
if (!(descriptor instanceof ConstructorDescriptor) &&
descriptor.getVisibility() == Visibilities.INTERNAL &&
!DescriptorUtilsKt.isPublishedApi(descriptor)) {
- return name + "$" + NameUtils.sanitizeAsJavaIdentifier(moduleName);
+ return InternalNameMapper.mangleInternalName(name, moduleName);
}
return name;
@@ -1510,4 +1510,24 @@ public class KotlinTypeMapper {
}
return TypeSignatureMappingKt.computeInternalName(classDescriptor, typeMappingConfiguration);
}
+
+ public static class InternalNameMapper {
+ public static String mangleInternalName(@NotNull String name, @NotNull String moduleName) {
+ return name + "$" + NameUtils.sanitizeAsJavaIdentifier(moduleName);
+ }
+
+ public static boolean canBeMangledInternalName(@NotNull String name) {
+ return name.indexOf('$') != -1;
+ }
+
+ @Nullable
+ public static String internalNameWithoutModuleSuffix(@NotNull String name) {
+ int indexOfDollar = name.indexOf('$');
+ if (indexOfDollar == -1) {
+ return null;
+ }
+
+ return name.substring(0, indexOfDollar) + '$';
+ }
+ }
}
diff --git a/eval4j/eval4j.iml b/eval4j/eval4j.iml
index d01b023235c..8b0c78cb882 100644
--- a/eval4j/eval4j.iml
+++ b/eval4j/eval4j.iml
@@ -12,5 +12,6 @@
+
\ No newline at end of file
diff --git a/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt b/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt
index 141122343e5..cfa5febed4c 100644
--- a/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt
+++ b/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt
@@ -19,6 +19,8 @@ package org.jetbrains.eval4j.jdi
import com.sun.jdi.*
import org.jetbrains.eval4j.*
import org.jetbrains.eval4j.Value
+import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.InternalNameMapper.canBeMangledInternalName
+import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.InternalNameMapper.internalNameWithoutModuleSuffix
import org.jetbrains.org.objectweb.asm.Type
import java.lang.reflect.AccessibleObject
import com.sun.jdi.Type as jdi_Type
@@ -216,11 +218,12 @@ class JDIEval(
return method
}
- if (methodName.contains('$')) {
- // Module name can be different for internal functions during evaluation and compilation
- val internalNamePrefix = methodName.substringBefore('$') + '$'
+ // Module name can be different for internal functions during evaluation and compilation
+ val internalNameWithoutSuffix = internalNameWithoutModuleSuffix(methodName)
+ if (internalNameWithoutSuffix != null) {
val internalMethods = _class.visibleMethods().filter {
- it.name().startsWith(internalNamePrefix) && it.signature() == methodDesc.desc
+ val name = it.name()
+ name.startsWith(internalNameWithoutSuffix) && canBeMangledInternalName(name) && it.signature() == methodDesc.desc
}
if (!internalMethods.isEmpty()) {