JVM_IR: move serialized IR to a separate annotation

This commit is contained in:
Georgy Bronnikov
2021-09-21 17:27:23 +03:00
parent fcf44be785
commit 41e38d5a1a
5 changed files with 86 additions and 25 deletions
@@ -110,6 +110,9 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
if (fqName.equals(METADATA_FQ_NAME)) {
return new KotlinMetadataArgumentVisitor();
}
if (fqName.equals(SERIALIZED_IR_FQ_NAME)) {
return new KotlinSerializedIrArgumentVisitor();
}
if (IGNORE_OLD_METADATA) return null;
@@ -178,9 +181,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
else if (METADATA_STRINGS_FIELD_NAME.equals(string)) {
return stringsArrayVisitor();
}
else if (METADATA_SERIALIZED_IR_FIELD_NAME.equals(string)) {
return serializedIrArrayVisitor();
}
else {
return null;
}
@@ -206,16 +206,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
};
}
@NotNull
private AnnotationArrayArgumentVisitor serializedIrArrayVisitor() {
return new CollectStringArrayAnnotationVisitor() {
@Override
protected void visitEnd(@NotNull String[] result) {
serializedIrFields = result;
}
};
}
@Override
public void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName) {
}
@@ -301,6 +291,52 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
}
}
private class KotlinSerializedIrArgumentVisitor implements AnnotationArgumentVisitor {
@Override
public void visit(@Nullable Name name, @Nullable Object value) {
}
@Override
public void visitClassLiteral(@NotNull Name name, @NotNull ClassLiteralValue classLiteralValue) {
}
@Override
@Nullable
public AnnotationArrayArgumentVisitor visitArray(@NotNull Name name) {
String string = name.asString();
if (SERIALIZED_IR_BYTES_FIELD_NAME.equals(string)) {
return serializedIrArrayVisitor();
}
else {
return null;
}
}
@NotNull
private AnnotationArrayArgumentVisitor serializedIrArrayVisitor() {
return new CollectStringArrayAnnotationVisitor() {
@Override
protected void visitEnd(@NotNull String[] result) {
serializedIrFields = result;
}
};
}
@Override
public void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName) {
}
@Nullable
@Override
public AnnotationArgumentVisitor visitAnnotation(@NotNull Name name, @NotNull ClassId classId) {
return null;
}
@Override
public void visitEnd() {
}
}
private abstract static class CollectStringArrayAnnotationVisitor implements AnnotationArrayArgumentVisitor {
private final List<String> strings;