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 * @author Stepan Koltsov
*/ */
public class JvmAbi { 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 DEFAULT_PARAMS_IMPL_SUFFIX = "$default";
public static final String GETTER_PREFIX = "get"; public static final String GETTER_PREFIX = "get";
public static final String SETTER_PREFIX = "set"; public static final String SETTER_PREFIX = "set";
public static final String PACKAGE_CLASS = "namespace"; 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_CLASS_NAME = "ClassObject$";
public static final String CLASS_OBJECT_SUFFIX = "$" + CLASS_OBJECT_CLASS_NAME;
public static final JvmClassName JETBRAINS_NOT_NULL_ANNOTATION = public static final JvmClassName JETBRAINS_NOT_NULL_ANNOTATION =
JvmClassName.byFqNameWithoutInnerClasses("org.jetbrains.annotations.NotNull"); JvmClassName.byFqNameWithoutInnerClasses("org.jetbrains.annotations.NotNull");
@@ -16,9 +16,10 @@
package org.jetbrains.jet.lang.resolve.java; package org.jetbrains.jet.lang.resolve.java;
import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.asm4.Type; import org.jetbrains.asm4.Type;
import org.jetbrains.jet.lang.resolve.name.FqName;
/** /**
* @author Stepan Koltsov * @author Stepan Koltsov
@@ -54,12 +55,24 @@ public class JvmClassName {
return byFqNameWithoutInnerClasses(new FqName(fqName)); 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 @NotNull
private final String internalName; private final String internalName;
private FqName fqName; private FqName fqName;
private String descriptor; private String descriptor;
private Type asmType; private Type asmType;
private JvmClassName(@NotNull String internalName) { private JvmClassName(@NotNull String internalName) {
@@ -69,7 +82,7 @@ public class JvmClassName {
@NotNull @NotNull
public FqName getFqName() { public FqName getFqName() {
if (fqName == null) { if (fqName == null) {
this.fqName = new FqName(internalName.replace('$', '.').replace('/', '.')); this.fqName = new FqName(decodeSpecialNames(encodeSpecialNames(internalName).replace('$', '.').replace('/', '.')));
} }
return fqName; return fqName;
} }