extract code for generating multifile namespace class names
This commit is contained in:
@@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.resolve.name.FqName;
|
|||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.utils.Progress;
|
import org.jetbrains.jet.utils.Progress;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import static org.jetbrains.asm4.Opcodes.*;
|
import static org.jetbrains.asm4.Opcodes.*;
|
||||||
@@ -151,9 +152,8 @@ public class NamespaceCodegen {
|
|||||||
|
|
||||||
if (k > 0) {
|
if (k > 0) {
|
||||||
PsiFile containingFile = file.getContainingFile();
|
PsiFile containingFile = file.getContainingFile();
|
||||||
String fname = containingFile.getName();
|
String namespaceInternalName = name.child(Name.identifier(JvmAbi.PACKAGE_CLASS)).getFqName().replace('.', '/');
|
||||||
fname = fname.substring(0, fname.lastIndexOf('.'));
|
String className = getMultiFileNamespaceInternalName(namespaceInternalName, containingFile);
|
||||||
String className = name.child(Name.identifier("namespace$src$" + fname)).getFqName().replace('.', '/');
|
|
||||||
ClassBuilder builder = state.forNamespacepart(className);
|
ClassBuilder builder = state.forNamespacepart(className);
|
||||||
|
|
||||||
builder.defineClass(containingFile, V1_6,
|
builder.defineClass(containingFile, V1_6,
|
||||||
@@ -282,4 +282,18 @@ public class NamespaceCodegen {
|
|||||||
|
|
||||||
return JvmClassName.byInternalName(fqName.getFqName().replace('.', '/') + "/" + JvmAbi.PACKAGE_CLASS);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -159,8 +159,7 @@ public class JetPositionManager implements PositionManager {
|
|||||||
boolean multiFileNamespace = typeMapper.getClosureAnnotator().isMultiFileNamespace(fqName);
|
boolean multiFileNamespace = typeMapper.getClosureAnnotator().isMultiFileNamespace(fqName);
|
||||||
String namespaceInternalName = NamespaceCodegen.getJVMClassNameForKotlinNs(fqName).getInternalName();
|
String namespaceInternalName = NamespaceCodegen.getJVMClassNameForKotlinNs(fqName).getInternalName();
|
||||||
if (multiFileNamespace) {
|
if (multiFileNamespace) {
|
||||||
String name = namespace.getName();
|
result.set(NamespaceCodegen.getMultiFileNamespaceInternalName(namespaceInternalName, namespace));
|
||||||
result.set(namespaceInternalName + "$src$" + name.substring(0, name.lastIndexOf('.')));
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result.set(namespaceInternalName);
|
result.set(namespaceInternalName);
|
||||||
|
|||||||
Reference in New Issue
Block a user