JVM_IR: read serialized IR from annotation
This commit is contained in:
committed by
TeamCityServer
parent
baaecaa052
commit
7dbdb311e1
+31
-1
@@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement;
|
import org.jetbrains.kotlin.descriptors.SourceElement;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
|
||||||
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.BitEncoding;
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion;
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion;
|
||||||
import org.jetbrains.kotlin.name.ClassId;
|
import org.jetbrains.kotlin.name.ClassId;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
@@ -57,6 +58,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
private String[] strings = null;
|
private String[] strings = null;
|
||||||
private String[] incompatibleData = null;
|
private String[] incompatibleData = null;
|
||||||
private KotlinClassHeader.Kind headerKind = null;
|
private KotlinClassHeader.Kind headerKind = null;
|
||||||
|
private String[] serializedIrFields = null;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public KotlinClassHeader createHeader() {
|
public KotlinClassHeader createHeader() {
|
||||||
@@ -77,7 +79,22 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new KotlinClassHeader(headerKind, metadataVersion, data, incompatibleData, strings, extraString, extraInt, packageName);
|
byte[] serializedIr = null;
|
||||||
|
if (serializedIrFields != null) {
|
||||||
|
serializedIr = BitEncoding.decodeBytes(serializedIrFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new KotlinClassHeader(
|
||||||
|
headerKind,
|
||||||
|
metadataVersion,
|
||||||
|
data,
|
||||||
|
incompatibleData,
|
||||||
|
strings,
|
||||||
|
extraString,
|
||||||
|
extraInt,
|
||||||
|
packageName,
|
||||||
|
serializedIr
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldHaveData() {
|
private boolean shouldHaveData() {
|
||||||
@@ -161,6 +178,9 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
else if (METADATA_STRINGS_FIELD_NAME.equals(string)) {
|
else if (METADATA_STRINGS_FIELD_NAME.equals(string)) {
|
||||||
return stringsArrayVisitor();
|
return stringsArrayVisitor();
|
||||||
}
|
}
|
||||||
|
else if (METADATA_SERIALIZED_IR_FIELD_NAME.equals(string)) {
|
||||||
|
return serializedIrArrayVisitor();
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -186,6 +206,16 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private AnnotationArrayArgumentVisitor serializedIrArrayVisitor() {
|
||||||
|
return new CollectStringArrayAnnotationVisitor() {
|
||||||
|
@Override
|
||||||
|
protected void visitEnd(@NotNull String[] result) {
|
||||||
|
serializedIrFields = result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName) {
|
public void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName) {
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -18,7 +18,8 @@ class KotlinClassHeader(
|
|||||||
val strings: Array<String>?,
|
val strings: Array<String>?,
|
||||||
private val extraString: String?,
|
private val extraString: String?,
|
||||||
val extraInt: Int,
|
val extraInt: Int,
|
||||||
val packageName: String?
|
val packageName: String?,
|
||||||
|
val serializedIr: ByteArray?,
|
||||||
) {
|
) {
|
||||||
// See kotlin.Metadata
|
// See kotlin.Metadata
|
||||||
enum class Kind(val id: Int) {
|
enum class Kind(val id: Int) {
|
||||||
|
|||||||
Reference in New Issue
Block a user