Decompilation support

- class header reader for KotlinMultifileClass, KotlinMultifileClassPart
- proper implClassName for multifile class members
This commit is contained in:
Dmitry Petrov
2015-09-08 16:35:25 +03:00
parent e88584742e
commit 0c951b2ed3
15 changed files with 207 additions and 70 deletions
@@ -226,7 +226,8 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C
nameResolver: NameResolver
): KotlinJvmBinaryClass? {
if (proto.hasExtension(implClassName)) {
return kotlinClassFinder.findKotlinClass(ClassId(packageFqName, nameResolver.getName(proto.getExtension(implClassName))))
val implClassName = nameResolver.getName(proto.getExtension(implClassName))
return kotlinClassFinder.findKotlinClass(ClassId(packageFqName, implClassName))
}
return null
}
@@ -120,6 +120,10 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
return new PackageHeaderReader();
case FILE_FACADE:
return new FileFacadeHeaderReader();
case MULTIFILE_CLASS:
return new MultifileClassHeaderReader();
case MULTIFILE_CLASS_PART:
return new MultifileClassPartHeaderReader();
case SYNTHETIC_CLASS:
return new SyntheticClassHeaderReader();
default:
@@ -259,6 +263,18 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
}
}
private class MultifileClassHeaderReader extends HeaderAnnotationArgumentVisitor {
public MultifileClassHeaderReader() {
super(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_MULTIFILE_CLASS));
}
}
private class MultifileClassPartHeaderReader extends HeaderAnnotationArgumentVisitor {
public MultifileClassPartHeaderReader() {
super(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_MULTIFILE_CLASS_PART));
}
}
private class SyntheticClassHeaderReader extends HeaderAnnotationArgumentVisitor {
public SyntheticClassHeaderReader() {
super(KotlinSyntheticClass.CLASS_NAME);