KotlinClassFileHeader now saves JvmClassName for processed class
Add utility methods Refactor static method to member methods
This commit is contained in:
+39
-15
@@ -23,18 +23,6 @@ import java.util.List;
|
|||||||
import static org.jetbrains.asm4.ClassReader.*;
|
import static org.jetbrains.asm4.ClassReader.*;
|
||||||
|
|
||||||
public final class KotlinClassFileHeader {
|
public final class KotlinClassFileHeader {
|
||||||
@Nullable
|
|
||||||
public static ClassData readClassData(@NotNull VirtualFile virtualFile) {
|
|
||||||
String[] data = readKotlinHeaderFromClassFile(virtualFile).getAnnotationData();
|
|
||||||
return data != null ? JavaProtoBufUtil.readClassDataFrom(data) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public static PackageData readPackageData(@NotNull VirtualFile virtualFile) {
|
|
||||||
String[] data = readKotlinHeaderFromClassFile(virtualFile).getAnnotationData();
|
|
||||||
return data != null ? JavaProtoBufUtil.readPackageDataFrom(data) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static KotlinClassFileHeader readKotlinHeaderFromClassFile(@NotNull VirtualFile virtualFile) {
|
public static KotlinClassFileHeader readKotlinHeaderFromClassFile(@NotNull VirtualFile virtualFile) {
|
||||||
try {
|
try {
|
||||||
@@ -71,20 +59,51 @@ public final class KotlinClassFileHeader {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private String[] annotationData = null;
|
private String[] annotationData = null;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
HeaderType type = HeaderType.NONE;
|
HeaderType type = HeaderType.NONE;
|
||||||
|
@Nullable
|
||||||
|
JvmClassName jvmClassName = null;
|
||||||
|
|
||||||
public int getVersion() {
|
public int getVersion() {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@NotNull
|
||||||
|
public HeaderType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isKotlinCompiledFile() {
|
||||||
|
return type != HeaderType.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JvmClassName getJvmClassName() {
|
||||||
|
assert jvmClassName != null;
|
||||||
|
return jvmClassName;
|
||||||
|
}
|
||||||
|
|
||||||
public String[] getAnnotationData() {
|
public String[] getAnnotationData() {
|
||||||
|
assertDataRead();
|
||||||
|
return annotationData;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertDataRead() {
|
||||||
if (annotationData == null && type != HeaderType.NONE) {
|
if (annotationData == null && type != HeaderType.NONE) {
|
||||||
throw new IllegalStateException("Data for annotations " + type.correspondingAnnotation + " was not read.");
|
throw new IllegalStateException("Data for annotations " + type.correspondingAnnotation + " was not read.");
|
||||||
}
|
}
|
||||||
return annotationData;
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public ClassData readClassData() {
|
||||||
|
assert type == HeaderType.CLASS;
|
||||||
|
return JavaProtoBufUtil.readClassDataFrom(getAnnotationData());
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public PackageData readPackageData() {
|
||||||
|
assert type == HeaderType.PACKAGE;
|
||||||
|
return JavaProtoBufUtil.readPackageDataFrom(getAnnotationData());
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ReadDataFromAnnotationVisitor extends ClassVisitor {
|
private class ReadDataFromAnnotationVisitor extends ClassVisitor {
|
||||||
@@ -93,6 +112,11 @@ public final class KotlinClassFileHeader {
|
|||||||
super(Opcodes.ASM4);
|
super(Opcodes.ASM4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
|
||||||
|
jvmClassName = JvmClassName.byInternalName(name);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AnnotationVisitor visitAnnotation(final String desc, boolean visible) {
|
public AnnotationVisitor visitAnnotation(final String desc, boolean visible) {
|
||||||
for (HeaderType headerType : HeaderType.values()) {
|
for (HeaderType headerType : HeaderType.values()) {
|
||||||
|
|||||||
@@ -103,14 +103,14 @@ public class JetFromJavaDescriptorHelper {
|
|||||||
private static ClassData getClassData(@NotNull PsiClass psiClass) {
|
private static ClassData getClassData(@NotNull PsiClass psiClass) {
|
||||||
VirtualFile virtualFile = getVirtualFileForPsiClass(psiClass);
|
VirtualFile virtualFile = getVirtualFileForPsiClass(psiClass);
|
||||||
if (virtualFile == null) return null;
|
if (virtualFile == null) return null;
|
||||||
return KotlinClassFileHeader.readClassData(virtualFile);
|
return KotlinClassFileHeader.readKotlinHeaderFromClassFile(virtualFile).readClassData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static PackageData getPackageData(@NotNull PsiClass psiClass) {
|
private static PackageData getPackageData(@NotNull PsiClass psiClass) {
|
||||||
VirtualFile virtualFile = getVirtualFileForPsiClass(psiClass);
|
VirtualFile virtualFile = getVirtualFileForPsiClass(psiClass);
|
||||||
if (virtualFile == null) return null;
|
if (virtualFile == null) return null;
|
||||||
return KotlinClassFileHeader.readPackageData(virtualFile);
|
return KotlinClassFileHeader.readKotlinHeaderFromClassFile(virtualFile).readPackageData();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: common utility
|
//TODO: common utility
|
||||||
|
|||||||
Reference in New Issue
Block a user