Combine all metadata annotations into one kotlin/Metadata

This commit is contained in:
Alexander Udalov
2015-12-28 21:22:28 +03:00
parent 661af854fa
commit 59dab0a558
27 changed files with 300 additions and 45 deletions
@@ -28,6 +28,8 @@ import java.util.HashSet;
import java.util.Set;
public final class JvmAnnotationNames {
public static final FqName METADATA = new FqName("kotlin.Metadata");
public static final FqName KOTLIN_CLASS = new FqName("kotlin.jvm.internal.KotlinClass");
public static final FqName KOTLIN_FILE_FACADE = new FqName("kotlin.jvm.internal.KotlinFileFacade");
public static final FqName KOTLIN_MULTIFILE_CLASS = new FqName("kotlin.jvm.internal.KotlinMultifileClass");
@@ -38,8 +40,15 @@ public final class JvmAnnotationNames {
public static final FqName KOTLIN_LOCAL_CLASS = new FqName("kotlin.jvm.internal.KotlinLocalClass");
public static final String VERSION_FIELD_NAME = "version";
public static final String METADATA_VERSION_FIELD_NAME = "mv";
public static final String BYTECODE_VERSION_FIELD_NAME = "bv";
public static final String FILE_PART_CLASS_NAMES_FIELD_NAME = "filePartClassNames";
public static final String MULTIFILE_CLASS_NAME_FIELD_NAME = "multifileClassName";
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 SYNTHETIC_CLASS_KIND_FIELD_NAME = "xi";
public static final String METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME = "xs";
public static final String DATA_FIELD_NAME = "data";
public static final String STRINGS_FIELD_NAME = "strings";
public static final String MODULE_NAME_FIELD_NAME = "moduleName";
@@ -66,7 +75,9 @@ public final class JvmAnnotationNames {
private static final Set<JvmClassName> NULLABILITY_ANNOTATIONS = new HashSet<JvmClassName>();
private static final Set<JvmClassName> SPECIAL_META_ANNOTATIONS = new HashSet<JvmClassName>();
static {
for (FqName fqName : Arrays.asList(KOTLIN_CLASS, KOTLIN_SYNTHETIC_CLASS, KOTLIN_INTERFACE_DEFAULT_IMPLS, KOTLIN_LOCAL_CLASS)) {
for (FqName fqName : Arrays.asList(
METADATA, KOTLIN_CLASS, KOTLIN_SYNTHETIC_CLASS, KOTLIN_INTERFACE_DEFAULT_IMPLS, KOTLIN_LOCAL_CLASS
)) {
SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName));
}
@@ -29,12 +29,19 @@ class KotlinClassHeader(
val isInterfaceDefaultImpls: Boolean,
val isLocalClass: Boolean
) {
enum class Kind {
CLASS,
FILE_FACADE,
MULTIFILE_CLASS,
MULTIFILE_CLASS_PART,
SYNTHETIC_CLASS
// See kotlin.Metadata
enum class Kind(val id: Int) {
CLASS(1),
FILE_FACADE(2),
SYNTHETIC_CLASS(3),
MULTIFILE_CLASS(4),
MULTIFILE_CLASS_PART(5);
}
enum class SyntheticClassKind(val id: Int) {
FUNCTION(1),
LOCAL_CLASS(2),
INTERFACE_DEFAULT_IMPLS(3);
}
override fun toString() = "$kind " + (if (isLocalClass) "(local) " else "") + "version=$metadataVersion"