KT-11410: write multifile class code generation scheme to extra field (xi) in kotlin.Metadata.
This commit is contained in:
+4
-1
@@ -29,7 +29,10 @@ public final class JvmAnnotationNames {
|
||||
public static final String KIND_FIELD_NAME = "k";
|
||||
public static final String METADATA_DATA_FIELD_NAME = "d1";
|
||||
public static final String METADATA_STRINGS_FIELD_NAME = "d2";
|
||||
public static final String METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME = "xs";
|
||||
public static final String METADATA_EXTRA_STRING_FIELD_NAME = "xs";
|
||||
public static final String METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME = METADATA_EXTRA_STRING_FIELD_NAME;
|
||||
public static final String METADATA_EXTRA_INT_FIELD_NAME = "xi";
|
||||
public static final String METADATA_MULTIFILE_CLASS_KIND_FIELD_NAME = METADATA_EXTRA_INT_FIELD_NAME;
|
||||
|
||||
public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value");
|
||||
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ class JvmMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) {
|
||||
var skipCheck: Boolean = false
|
||||
|
||||
@JvmField
|
||||
val INSTANCE = JvmMetadataVersion(1, 1, 0)
|
||||
val INSTANCE = JvmMetadataVersion(1, 1, 1)
|
||||
|
||||
@JvmField
|
||||
val INVALID_VERSION = JvmMetadataVersion()
|
||||
|
||||
+24
-1
@@ -25,7 +25,8 @@ class KotlinClassHeader(
|
||||
val bytecodeVersion: JvmBytecodeBinaryVersion,
|
||||
val data: Array<String>?,
|
||||
val strings: Array<String>?,
|
||||
val multifileClassName: String?
|
||||
val extraString: String?,
|
||||
val extraInt: Int
|
||||
) {
|
||||
// See kotlin.Metadata
|
||||
enum class Kind(val id: Int) {
|
||||
@@ -44,5 +45,27 @@ class KotlinClassHeader(
|
||||
}
|
||||
}
|
||||
|
||||
// See kotlin.Metadata
|
||||
enum class MultifileClassKind(val id: Int) {
|
||||
DELEGATING(0),
|
||||
INHERITING(1);
|
||||
|
||||
companion object {
|
||||
private val entryById = values().associateBy(MultifileClassKind::id)
|
||||
|
||||
@JvmStatic
|
||||
fun getById(id: Int) = entryById[id]
|
||||
}
|
||||
}
|
||||
|
||||
val multifileClassName: String?
|
||||
get() = if (kind == Kind.MULTIFILE_CLASS_PART) extraString else null
|
||||
|
||||
val multifileClassKind: MultifileClassKind?
|
||||
get() = if (kind == Kind.MULTIFILE_CLASS || kind == Kind.MULTIFILE_CLASS_PART)
|
||||
MultifileClassKind.getById(extraInt)
|
||||
else
|
||||
null
|
||||
|
||||
override fun toString() = "$kind version=$metadataVersion"
|
||||
}
|
||||
|
||||
+12
-5
@@ -50,7 +50,8 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
||||
|
||||
private JvmMetadataVersion metadataVersion = null;
|
||||
private JvmBytecodeBinaryVersion bytecodeVersion = null;
|
||||
private String multifileClassName = null;
|
||||
private String extraString = null;
|
||||
private int extraInt = 0;
|
||||
private String[] data = null;
|
||||
private String[] strings = null;
|
||||
private KotlinClassHeader.Kind headerKind = null;
|
||||
@@ -76,7 +77,8 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
||||
bytecodeVersion != null ? bytecodeVersion : JvmBytecodeBinaryVersion.INVALID_VERSION,
|
||||
data,
|
||||
strings,
|
||||
multifileClassName
|
||||
extraString,
|
||||
extraInt
|
||||
);
|
||||
}
|
||||
|
||||
@@ -135,9 +137,14 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
||||
bytecodeVersion = new JvmBytecodeBinaryVersion((int[]) value);
|
||||
}
|
||||
}
|
||||
else if (METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME.equals(string)) {
|
||||
else if (METADATA_EXTRA_STRING_FIELD_NAME.equals(string)) {
|
||||
if (value instanceof String) {
|
||||
multifileClassName = (String) value;
|
||||
extraString = (String) value;
|
||||
}
|
||||
}
|
||||
else if (METADATA_EXTRA_INT_FIELD_NAME.equals(string)) {
|
||||
if (value instanceof Integer) {
|
||||
extraInt = (Integer) value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -209,7 +216,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
||||
}
|
||||
}
|
||||
else if ("multifileClassName".equals(string)) {
|
||||
multifileClassName = value instanceof String ? (String) value : null;
|
||||
extraString = value instanceof String ? (String) value : null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user