Ability to get correct fqName for JvmClassName with names for class objects and traits

This commit is contained in:
Nikolay Krasko
2012-09-11 20:27:14 +04:00
parent 603d85f29d
commit 9a645dca3e
2 changed files with 23 additions and 7 deletions
@@ -20,13 +20,16 @@ package org.jetbrains.jet.lang.resolve.java;
* @author Stepan Koltsov
*/
public class JvmAbi {
public static final String TRAIT_IMPL_SUFFIX = "$$TImpl";
public static final String TRAIT_IMPL_CLASS_NAME = "$TImpl";
public static final String TRAIT_IMPL_SUFFIX = "$" + TRAIT_IMPL_CLASS_NAME;
public static final String DEFAULT_PARAMS_IMPL_SUFFIX = "$default";
public static final String GETTER_PREFIX = "get";
public static final String SETTER_PREFIX = "set";
public static final String PACKAGE_CLASS = "namespace";
public static final String CLASS_OBJECT_SUFFIX = "$ClassObject$";
public static final String CLASS_OBJECT_CLASS_NAME = "ClassObject$";
public static final String CLASS_OBJECT_SUFFIX = "$" + CLASS_OBJECT_CLASS_NAME;
public static final JvmClassName JETBRAINS_NOT_NULL_ANNOTATION =
JvmClassName.byFqNameWithoutInnerClasses("org.jetbrains.annotations.NotNull");
@@ -16,9 +16,10 @@
package org.jetbrains.jet.lang.resolve.java;
import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.asm4.Type;
import org.jetbrains.jet.lang.resolve.name.FqName;
/**
* @author Stepan Koltsov
@@ -54,12 +55,24 @@ public class JvmClassName {
return byFqNameWithoutInnerClasses(new FqName(fqName));
}
private static String encodeSpecialNames(String str) {
String encodedObjectNames = StringUtil.replace(str, JvmAbi.CLASS_OBJECT_CLASS_NAME, CLASS_OBJECT_REPLACE_GUARD);
return StringUtil.replace(encodedObjectNames, JvmAbi.TRAIT_IMPL_CLASS_NAME, TRAIT_IMPL_REPLACE_GUARD);
}
private static String decodeSpecialNames(String str) {
String decodedObjectNames = StringUtil.replace(str, CLASS_OBJECT_REPLACE_GUARD, JvmAbi.CLASS_OBJECT_CLASS_NAME);
return StringUtil.replace(decodedObjectNames, TRAIT_IMPL_REPLACE_GUARD, JvmAbi.TRAIT_IMPL_CLASS_NAME);
}
private final static String CLASS_OBJECT_REPLACE_GUARD = "<class_object>";
private final static String TRAIT_IMPL_REPLACE_GUARD = "<trait_impl>";
@NotNull
private final String internalName;
private FqName fqName;
private String descriptor;
private Type asmType;
private JvmClassName(@NotNull String internalName) {
@@ -69,7 +82,7 @@ public class JvmClassName {
@NotNull
public FqName getFqName() {
if (fqName == null) {
this.fqName = new FqName(internalName.replace('$', '.').replace('/', '.'));
this.fqName = new FqName(decodeSpecialNames(encodeSpecialNames(internalName).replace('$', '.').replace('/', '.')));
}
return fqName;
}
@@ -78,7 +91,7 @@ public class JvmClassName {
public String getInternalName() {
return internalName;
}
@NotNull
public String getDescriptor() {
if (descriptor == null) {
@@ -90,7 +103,7 @@ public class JvmClassName {
}
return descriptor;
}
@NotNull
public Type getAsmType() {
if (asmType == null) {