read kotlin class objects from binary classes
This commit is contained in:
@@ -135,9 +135,15 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
v.visitInnerClass(innerClassInternalName, outerClassInernalName, innerClass.getName(), innerClassAccess);
|
||||
}
|
||||
|
||||
if (descriptor.getClassObjectDescriptor() != null) {
|
||||
int innerClassAccess = ACC_PUBLIC | ACC_FINAL | ACC_STATIC;
|
||||
String outerClassInernalName = typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
||||
v.visitInnerClass(outerClassInernalName + JvmAbi.CLASS_OBJECT_SUFFIX, outerClassInernalName, JvmAbi.CLASS_OBJECT_CLASS_NAME, innerClassAccess);
|
||||
}
|
||||
|
||||
AnnotationCodegen.forClass(v.getVisitor()).genAnnotations(descriptor, typeMapper);
|
||||
|
||||
if(myClass instanceof JetClass && signature.getKotlinGenericSignature() != null) {
|
||||
if (signature.getKotlinGenericSignature() != null) {
|
||||
AnnotationVisitor annotationVisitor = v.newAnnotation(myClass, JvmStdlibNames.JET_CLASS.getDescriptor(), true);
|
||||
annotationVisitor.visit(JvmStdlibNames.JET_CLASS_SIGNATURE, signature.getKotlinGenericSignature());
|
||||
annotationVisitor.visitEnd();
|
||||
|
||||
@@ -170,7 +170,7 @@ public class JetTypeMapper {
|
||||
public static String getLocalNameForObject(JetObjectDeclaration object) {
|
||||
PsiElement parent = object.getParent();
|
||||
if (parent instanceof JetClassObject) {
|
||||
return "ClassObject$";
|
||||
return JvmAbi.CLASS_OBJECT_CLASS_NAME;
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -755,7 +755,7 @@ public class JetTypeMapper {
|
||||
|
||||
ClassDescriptor myClass = bindingContext.get(BindingContext.CLASS, expression);
|
||||
if(CodegenUtil.isClassObject(myClass)) {
|
||||
return mapType(aClass.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName() + "$ClassObject$";
|
||||
return mapType(aClass.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName() + JvmAbi.CLASS_OBJECT_SUFFIX;
|
||||
}
|
||||
else
|
||||
baseName = classNameForAnonymousClass((JetElement) container);
|
||||
|
||||
Reference in New Issue
Block a user