write InnerClasses attribute
This commit is contained in:
@@ -65,6 +65,10 @@ public abstract class ClassBuilder {
|
|||||||
getVisitor().visitOuterClass(owner, name, desc);
|
getVisitor().visitOuterClass(owner, name, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void visitInnerClass(String name, String outerName, String innerName, int access) {
|
||||||
|
getVisitor().visitInnerClass(name, outerName, innerName, access);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean generateCode() {
|
public boolean generateCode() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,6 +95,20 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
v.visitOuterClass(typeMapper.mapType(container.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName(), null, null);
|
v.visitOuterClass(typeMapper.mapType(container.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName(), null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (ClassDescriptor innerClass : descriptor.getInnerClassesAndObjects()) {
|
||||||
|
// TODO: proper access
|
||||||
|
int innerClassAccess = Opcodes.ACC_PUBLIC;
|
||||||
|
if (innerClass.getModality() == Modality.FINAL) {
|
||||||
|
innerClassAccess |= Opcodes.ACC_FINAL;
|
||||||
|
} else if (innerClass.getModality() == Modality.ABSTRACT) {
|
||||||
|
innerClassAccess |= Opcodes.ACC_ABSTRACT;
|
||||||
|
}
|
||||||
|
// TODO: cache internal names
|
||||||
|
String outerClassInernalName = typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
||||||
|
String innerClassInternalName = typeMapper.mapType(innerClass.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
||||||
|
v.visitInnerClass(innerClassInternalName, outerClassInernalName, innerClass.getName(), innerClassAccess);
|
||||||
|
}
|
||||||
|
|
||||||
if(myClass instanceof JetClass && signature.getKotlinGenericSignature() != null) {
|
if(myClass instanceof JetClass && signature.getKotlinGenericSignature() != null) {
|
||||||
AnnotationVisitor annotationVisitor = v.newAnnotation(myClass, JvmStdlibNames.JET_CLASS.getDescriptor(), true);
|
AnnotationVisitor annotationVisitor = v.newAnnotation(myClass, JvmStdlibNames.JET_CLASS.getDescriptor(), true);
|
||||||
annotationVisitor.visit(JvmStdlibNames.JET_CLASS_SIGNATURE, signature.getKotlinGenericSignature());
|
annotationVisitor.visit(JvmStdlibNames.JET_CLASS_SIGNATURE, signature.getKotlinGenericSignature());
|
||||||
|
|||||||
Reference in New Issue
Block a user