read kotlin class objects from binary classes

This commit is contained in:
Stepan Koltsov
2012-02-22 22:11:08 +04:00
parent b9ba7c6b9a
commit e0fae55ee4
15 changed files with 140 additions and 14 deletions
@@ -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);