Add KotlinVersion.IS_PRE_RELEASE and a flag to kotlin/Metadata
This commit is contained in:
+4
-1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
|
||||
|
||||
@SuppressWarnings("PointlessBitwiseExpression")
|
||||
public final class JvmAnnotationNames {
|
||||
public static final FqName METADATA_FQ_NAME = new FqName("kotlin.Metadata");
|
||||
public static final String METADATA_DESC = "L" + JvmClassName.byFqNameWithoutInnerClasses(METADATA_FQ_NAME).getInternalName() + ";";
|
||||
@@ -32,7 +33,9 @@ public final class JvmAnnotationNames {
|
||||
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 int METADATA_MULTIFILE_PARTS_INHERIT_FLAG = 1 << 0;
|
||||
public static final int METADATA_PRE_RELEASE_FLAG = 1 << 1;
|
||||
|
||||
public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value");
|
||||
|
||||
|
||||
+16
-13
@@ -16,8 +16,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.load.kotlin.header
|
||||
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion
|
||||
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion
|
||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.MultifileClassKind.DELEGATING
|
||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.MultifileClassKind.INHERITING
|
||||
|
||||
class KotlinClassHeader(
|
||||
val kind: KotlinClassHeader.Kind,
|
||||
@@ -45,27 +48,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]
|
||||
}
|
||||
enum class MultifileClassKind {
|
||||
DELEGATING,
|
||||
INHERITING;
|
||||
}
|
||||
|
||||
val multifileClassName: String?
|
||||
get() = if (kind == Kind.MULTIFILE_CLASS_PART) extraString else null
|
||||
|
||||
// TODO: use in incremental compilation
|
||||
val multifileClassKind: MultifileClassKind?
|
||||
get() = if (kind == Kind.MULTIFILE_CLASS || kind == Kind.MULTIFILE_CLASS_PART)
|
||||
MultifileClassKind.getById(extraInt)
|
||||
get() = if (kind == Kind.MULTIFILE_CLASS || kind == Kind.MULTIFILE_CLASS_PART) {
|
||||
if ((extraInt and JvmAnnotationNames.METADATA_MULTIFILE_PARTS_INHERIT_FLAG) != 0)
|
||||
INHERITING
|
||||
else
|
||||
DELEGATING
|
||||
}
|
||||
else
|
||||
null
|
||||
|
||||
val isPreRelease: Boolean
|
||||
get() = (extraInt and JvmAnnotationNames.METADATA_PRE_RELEASE_FLAG) != 0
|
||||
|
||||
override fun toString() = "$kind version=$metadataVersion"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user