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_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 {
|
||||
|
||||
@NotNull
|
||||
private final FqName fqName;
|
||||
private final String internalName;
|
||||
|
||||
public JvmClassName(@NotNull String fqName) {
|
||||
this(new FqName(fqName));
|
||||
}
|
||||
|
||||
public JvmClassName(@NotNull FqName fqName) {
|
||||
this.fqName = fqName;
|
||||
private JvmClassName(@NotNull String internalName) {
|
||||
this.internalName = internalName;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JvmClassName byInternalName(@NotNull String internalName) {
|
||||
JvmClassName r = new JvmClassName(internalName.replace('/', '.'));
|
||||
r.internalName = internalName;
|
||||
return r;
|
||||
return new JvmClassName(internalName);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JvmClassName byType(@NotNull Type type) {
|
||||
if (type.getSort() != Type.OBJECT) {
|
||||
throw new IllegalArgumentException(
|
||||
@@ -50,20 +46,37 @@ public class JvmClassName {
|
||||
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
|
||||
public FqName getFqName() {
|
||||
if (fqName == null) {
|
||||
this.fqName = new FqName(internalName.replace('$', '.').replace('/', '.'));
|
||||
}
|
||||
return fqName;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private String internalName;
|
||||
|
||||
@NotNull
|
||||
public String getInternalName() {
|
||||
if (internalName == null) {
|
||||
String descriptor = getDescriptor();
|
||||
internalName = descriptor.substring(1, descriptor.length() - 1);
|
||||
}
|
||||
return internalName;
|
||||
}
|
||||
|
||||
@@ -71,9 +84,9 @@ public class JvmClassName {
|
||||
|
||||
public String getDescriptor() {
|
||||
if (descriptor == null) {
|
||||
StringBuilder sb = new StringBuilder(fqName.getFqName().length() + 2);
|
||||
StringBuilder sb = new StringBuilder(internalName.length() + 2);
|
||||
sb.append('L');
|
||||
sb.append(fqName.getFqName().replace('.', '/'));
|
||||
sb.append(internalName);
|
||||
sb.append(';');
|
||||
descriptor = sb.toString();
|
||||
}
|
||||
|
||||
+2
-2
@@ -48,11 +48,11 @@ public enum JvmPrimitiveType {
|
||||
private JvmPrimitiveType(PrimitiveType primitiveType, String name, String wrapperClassName, Type asmType) {
|
||||
this.primitiveType = primitiveType;
|
||||
this.name = name;
|
||||
this.wrapper = new JvmClassName(wrapperClassName);
|
||||
this.wrapper = JvmClassName.byFqNameWithoutInnerClasses(wrapperClassName);
|
||||
this.asmType = asmType;
|
||||
this.jvmLetter = asmType.getDescriptor().charAt(0);
|
||||
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) {
|
||||
|
||||
@@ -24,7 +24,7 @@ import jet.runtime.typeinfo.KotlinSignature;
|
||||
*/
|
||||
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_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 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 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_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_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
|
||||
@@ -59,17 +59,17 @@ public class JvmStdlibNames {
|
||||
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 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";
|
||||
|
||||
private JvmStdlibNames() {
|
||||
|
||||
Reference in New Issue
Block a user