diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index 6349b106159..9063e470cba 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.utils.Progress; +import java.io.File; import java.util.Collection; import static org.jetbrains.asm4.Opcodes.*; @@ -151,9 +152,8 @@ public class NamespaceCodegen { if (k > 0) { PsiFile containingFile = file.getContainingFile(); - String fname = containingFile.getName(); - fname = fname.substring(0, fname.lastIndexOf('.')); - String className = name.child(Name.identifier("namespace$src$" + fname)).getFqName().replace('.', '/'); + String namespaceInternalName = name.child(Name.identifier(JvmAbi.PACKAGE_CLASS)).getFqName().replace('.', '/'); + String className = getMultiFileNamespaceInternalName(namespaceInternalName, containingFile); ClassBuilder builder = state.forNamespacepart(className); builder.defineClass(containingFile, V1_6, @@ -282,4 +282,18 @@ public class NamespaceCodegen { return JvmClassName.byInternalName(fqName.getFqName().replace('.', '/') + "/" + JvmAbi.PACKAGE_CLASS); } + + @NotNull + public static String getMultiFileNamespaceInternalName(String namespaceInternalName, PsiFile file) { + String name = file.getName(); + + int substringFrom = name.lastIndexOf(File.separator) + 1; + + int substringTo = name.lastIndexOf('.'); + if (substringTo == -1) { + substringTo = name.length(); + } + + return namespaceInternalName + "$src$" + name.substring(substringFrom, substringTo); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java b/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java index f949a84c18a..565c78aeaf8 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java +++ b/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java @@ -159,8 +159,7 @@ public class JetPositionManager implements PositionManager { boolean multiFileNamespace = typeMapper.getClosureAnnotator().isMultiFileNamespace(fqName); String namespaceInternalName = NamespaceCodegen.getJVMClassNameForKotlinNs(fqName).getInternalName(); if (multiFileNamespace) { - String name = namespace.getName(); - result.set(namespaceInternalName + "$src$" + name.substring(0, name.lastIndexOf('.'))); + result.set(NamespaceCodegen.getMultiFileNamespaceInternalName(namespaceInternalName, namespace)); } else { result.set(namespaceInternalName);