primary field of JvmClassName must be internal name
because fq name can be mapped to different internal names
This commit is contained in:
@@ -28,5 +28,6 @@ public class JvmAbi {
|
|||||||
public static final String CLASS_OBJECT_SUFFIX = "$ClassObject$";
|
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 JvmClassName JETBRAINS_NOT_NULL_ANNOTATION = new JvmClassName("org.jetbrains.annotations.NotNull");
|
public static final JvmClassName JETBRAINS_NOT_NULL_ANNOTATION =
|
||||||
|
JvmClassName.byFqNameWithoutInnerClasses("org.jetbrains.annotations.NotNull");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,22 +26,18 @@ import org.objectweb.asm.Type;
|
|||||||
public class JvmClassName {
|
public class JvmClassName {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final FqName fqName;
|
private final String internalName;
|
||||||
|
|
||||||
public JvmClassName(@NotNull String fqName) {
|
private JvmClassName(@NotNull String internalName) {
|
||||||
this(new FqName(fqName));
|
this.internalName = internalName;
|
||||||
}
|
|
||||||
|
|
||||||
public JvmClassName(@NotNull FqName fqName) {
|
|
||||||
this.fqName = fqName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public static JvmClassName byInternalName(@NotNull String internalName) {
|
public static JvmClassName byInternalName(@NotNull String internalName) {
|
||||||
JvmClassName r = new JvmClassName(internalName.replace('/', '.'));
|
return new JvmClassName(internalName);
|
||||||
r.internalName = internalName;
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public static JvmClassName byType(@NotNull Type type) {
|
public static JvmClassName byType(@NotNull Type type) {
|
||||||
if (type.getSort() != Type.OBJECT) {
|
if (type.getSort() != Type.OBJECT) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
@@ -50,20 +46,37 @@ public class JvmClassName {
|
|||||||
return byInternalName(type.getInternalName());
|
return byInternalName(type.getInternalName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WARNING: fq name is cannot be uniquely mapped to JVM class name.
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
public static JvmClassName byFqNameWithoutInnerClasses(@NotNull FqName fqName) {
|
||||||
|
JvmClassName r = new JvmClassName(fqName.getFqName().replace('.', '/'));
|
||||||
|
r.fqName = fqName;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static JvmClassName byFqNameWithoutInnerClasses(@NotNull String fqName) {
|
||||||
|
return byFqNameWithoutInnerClasses(new FqName(fqName));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private transient FqName fqName;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public FqName getFqName() {
|
public FqName getFqName() {
|
||||||
|
if (fqName == null) {
|
||||||
|
this.fqName = new FqName(internalName.replace('$', '.').replace('/', '.'));
|
||||||
|
}
|
||||||
return fqName;
|
return fqName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private String internalName;
|
@NotNull
|
||||||
|
|
||||||
public String getInternalName() {
|
public String getInternalName() {
|
||||||
if (internalName == null) {
|
|
||||||
String descriptor = getDescriptor();
|
|
||||||
internalName = descriptor.substring(1, descriptor.length() - 1);
|
|
||||||
}
|
|
||||||
return internalName;
|
return internalName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,9 +84,9 @@ public class JvmClassName {
|
|||||||
|
|
||||||
public String getDescriptor() {
|
public String getDescriptor() {
|
||||||
if (descriptor == null) {
|
if (descriptor == null) {
|
||||||
StringBuilder sb = new StringBuilder(fqName.getFqName().length() + 2);
|
StringBuilder sb = new StringBuilder(internalName.length() + 2);
|
||||||
sb.append('L');
|
sb.append('L');
|
||||||
sb.append(fqName.getFqName().replace('.', '/'));
|
sb.append(internalName);
|
||||||
sb.append(';');
|
sb.append(';');
|
||||||
descriptor = sb.toString();
|
descriptor = sb.toString();
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -48,11 +48,11 @@ public enum JvmPrimitiveType {
|
|||||||
private JvmPrimitiveType(PrimitiveType primitiveType, String name, String wrapperClassName, Type asmType) {
|
private JvmPrimitiveType(PrimitiveType primitiveType, String name, String wrapperClassName, Type asmType) {
|
||||||
this.primitiveType = primitiveType;
|
this.primitiveType = primitiveType;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.wrapper = new JvmClassName(wrapperClassName);
|
this.wrapper = JvmClassName.byFqNameWithoutInnerClasses(wrapperClassName);
|
||||||
this.asmType = asmType;
|
this.asmType = asmType;
|
||||||
this.jvmLetter = asmType.getDescriptor().charAt(0);
|
this.jvmLetter = asmType.getDescriptor().charAt(0);
|
||||||
this.asmArrayType = makeArrayType(asmType);
|
this.asmArrayType = makeArrayType(asmType);
|
||||||
this.iterator = new JvmClassName("jet." + primitiveType.getTypeName() + "Iterator");
|
this.iterator = JvmClassName.byFqNameWithoutInnerClasses("jet." + primitiveType.getTypeName() + "Iterator");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Type makeArrayType(Type type) {
|
private static Type makeArrayType(Type type) {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import jet.runtime.typeinfo.KotlinSignature;
|
|||||||
*/
|
*/
|
||||||
public class JvmStdlibNames {
|
public class JvmStdlibNames {
|
||||||
|
|
||||||
public static final JvmClassName JET_VALUE_PARAMETER = new JvmClassName("jet.runtime.typeinfo.JetValueParameter");
|
public static final JvmClassName JET_VALUE_PARAMETER = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetValueParameter");
|
||||||
|
|
||||||
public static final String JET_VALUE_PARAMETER_NAME_FIELD = "name";
|
public static final String JET_VALUE_PARAMETER_NAME_FIELD = "name";
|
||||||
public static final String JET_VALUE_PARAMETER_HAS_DEFAULT_VALUE_FIELD = "hasDefaultValue";
|
public static final String JET_VALUE_PARAMETER_HAS_DEFAULT_VALUE_FIELD = "hasDefaultValue";
|
||||||
@@ -33,12 +33,12 @@ public class JvmStdlibNames {
|
|||||||
public static final String JET_VALUE_PARAMETER_RECEIVER_FIELD = "receiver";
|
public static final String JET_VALUE_PARAMETER_RECEIVER_FIELD = "receiver";
|
||||||
|
|
||||||
|
|
||||||
public static final JvmClassName JET_TYPE_PARAMETER = new JvmClassName("jet.runtime.typeinfo.JetTypeParameter");
|
public static final JvmClassName JET_TYPE_PARAMETER = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetTypeParameter");
|
||||||
|
|
||||||
public static final String JET_TYPE_PARAMETER_NAME_FIELD = "name";
|
public static final String JET_TYPE_PARAMETER_NAME_FIELD = "name";
|
||||||
|
|
||||||
|
|
||||||
public static final JvmClassName JET_METHOD = new JvmClassName("jet.runtime.typeinfo.JetMethod");
|
public static final JvmClassName JET_METHOD = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetMethod");
|
||||||
|
|
||||||
public static final String JET_METHOD_KIND_FIELD = "kind";
|
public static final String JET_METHOD_KIND_FIELD = "kind";
|
||||||
public static final String JET_METHOD_NULLABLE_RETURN_TYPE_FIELD = "nullableReturnType";
|
public static final String JET_METHOD_NULLABLE_RETURN_TYPE_FIELD = "nullableReturnType";
|
||||||
@@ -50,7 +50,7 @@ public class JvmStdlibNames {
|
|||||||
public static final int JET_METHOD_KIND_PROPERTY = 1;
|
public static final int JET_METHOD_KIND_PROPERTY = 1;
|
||||||
public static final int JET_METHOD_KIND_DEFAULT = JET_METHOD_KIND_REGULAR;
|
public static final int JET_METHOD_KIND_DEFAULT = JET_METHOD_KIND_REGULAR;
|
||||||
|
|
||||||
public static final JvmClassName JET_CONSTRUCTOR = new JvmClassName("jet.runtime.typeinfo.JetConstructor");
|
public static final JvmClassName JET_CONSTRUCTOR = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetConstructor");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated
|
* @deprecated
|
||||||
@@ -59,17 +59,17 @@ public class JvmStdlibNames {
|
|||||||
public static final String JET_CONSTRUCTOR_HIDDEN_FIELD = "hidden";
|
public static final String JET_CONSTRUCTOR_HIDDEN_FIELD = "hidden";
|
||||||
|
|
||||||
|
|
||||||
public static final JvmClassName JET_CLASS = new JvmClassName("jet.runtime.typeinfo.JetClass");
|
public static final JvmClassName JET_CLASS = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetClass");
|
||||||
|
|
||||||
public static final String JET_CLASS_SIGNATURE = "signature";
|
public static final String JET_CLASS_SIGNATURE = "signature";
|
||||||
|
|
||||||
|
|
||||||
public static final JvmClassName JET_OBJECT = new JvmClassName("jet.JetObject");
|
public static final JvmClassName JET_OBJECT = JvmClassName.byFqNameWithoutInnerClasses("jet.JetObject");
|
||||||
|
|
||||||
|
|
||||||
public static final JvmClassName ASSERT_INVISIBLE_IN_RESOLVER = new JvmClassName("org.jetbrains.jet.rt.annotation.AssertInvisibleInResolver");
|
public static final JvmClassName ASSERT_INVISIBLE_IN_RESOLVER = JvmClassName.byFqNameWithoutInnerClasses("org.jetbrains.jet.rt.annotation.AssertInvisibleInResolver");
|
||||||
|
|
||||||
public static final JvmClassName KOTLIN_SIGNATURE = new JvmClassName("jet.runtime.typeinfo.KotlinSignature");
|
public static final JvmClassName KOTLIN_SIGNATURE = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.KotlinSignature");
|
||||||
public static final String KOTLIN_SIGNATURE_VALUE_METHOD = "value";
|
public static final String KOTLIN_SIGNATURE_VALUE_METHOD = "value";
|
||||||
|
|
||||||
private JvmStdlibNames() {
|
private JvmStdlibNames() {
|
||||||
|
|||||||
Reference in New Issue
Block a user