Ability to get correct fqName for JvmClassName with names for class objects and traits
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user