Drop deprecated nested classes from Kotlin metadata annotations

This commit is contained in:
Alexander Udalov
2015-10-05 12:50:03 +03:00
parent 1497648093
commit 8c4d7fdf24
8 changed files with 7 additions and 45 deletions
@@ -21,7 +21,6 @@ import kotlin.jvm.functions.Function3;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.SourceElement;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader;
import org.jetbrains.kotlin.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor;
import org.jetbrains.kotlin.name.ClassId;
@@ -266,11 +265,6 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
return ClassId.topLevel(new FqName(name.replace('/', '.')));
}
// TODO: this is a hack which can be dropped once JVM back-end begins to write InnerClasses attribute for all referenced classes
if (name.equals(JvmAnnotationNames.KotlinSyntheticClass.KIND_INTERNAL_NAME)) {
return JvmAnnotationNames.KotlinSyntheticClass.KIND_CLASS_ID;
}
List<String> classes = new ArrayList<String>(1);
boolean local = false;
@@ -5,7 +5,7 @@ class Klass
fun box(): String {
assertEquals("Klass", Klass::class.simpleName)
assertEquals("Date", java.util.Date::class.simpleName)
assertEquals("Kind", kotlin.jvm.internal.KotlinSyntheticClass.Kind::class.simpleName)
assertEquals("ObjectRef", kotlin.jvm.internal.Ref.ObjectRef::class.simpleName)
assertEquals("Void", java.lang.Void::class.simpleName)
return "OK"
@@ -25,7 +25,7 @@ fun box(): String {
assertEquals("[[Ljava.lang.String;", Array<Array<String>>::class.jvmName)
assertEquals("java.util.Date", java.util.Date::class.jvmName)
assertEquals("kotlin.jvm.internal.KotlinSyntheticClass\$Kind", kotlin.jvm.internal.KotlinSyntheticClass.Kind::class.jvmName)
assertEquals("kotlin.jvm.internal.Ref\$ObjectRef", kotlin.jvm.internal.Ref.ObjectRef::class.jvmName)
assertEquals("java.lang.Void", java.lang.Void::class.jvmName)
class Local
@@ -23,7 +23,7 @@ fun box(): String {
assertEquals("kotlin.Array", Array<Array<String>>::class.qualifiedName)
assertEquals("java.util.Date", java.util.Date::class.qualifiedName)
assertEquals("kotlin.jvm.internal.KotlinSyntheticClass.Kind", kotlin.jvm.internal.KotlinSyntheticClass.Kind::class.qualifiedName)
assertEquals("kotlin.jvm.internal.Ref.ObjectRef", kotlin.jvm.internal.Ref.ObjectRef::class.qualifiedName)
assertEquals("java.lang.Void", java.lang.Void::class.qualifiedName)
class Local
@@ -46,7 +46,6 @@ public final class JvmAnnotationNames {
public static final FqName OLD_KOTLIN_SIGNATURE = new FqName("jet.runtime.typeinfo.KotlinSignature");
public static final String VERSION_FIELD_NAME = "version";
public static final String KIND_FIELD_NAME = "kind";
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 DATA_FIELD_NAME = "data";
@@ -72,9 +71,6 @@ public final class JvmAnnotationNames {
public static class KotlinSyntheticClass {
public static final JvmClassName CLASS_NAME = JvmClassName.byInternalName("kotlin/jvm/internal/KotlinSyntheticClass");
public static final ClassId KIND_CLASS_ID =
ClassId.topLevel(CLASS_NAME.getFqNameForClassNameWithoutDollars()).createNestedClassId(Name.identifier("Kind"));
public static final String KIND_INTERNAL_NAME = JvmClassName.byClassId(KIND_CLASS_ID).getInternalName();
}
public static final String OLD_ABI_VERSION_FIELD_NAME = "abiVersion";
@@ -286,7 +286,10 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
@Override
public void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName) {
if (KotlinSyntheticClass.KIND_CLASS_ID.equals(enumClassId) && KIND_FIELD_NAME.equals(name.asString())) {
if ("Kind".equals(enumClassId.getShortClassName().asString()) &&
enumClassId.isNestedClass() &&
enumClassId.getOuterClassId().equals(ClassId.topLevel(annotationClassName.getFqNameForClassNameWithoutDollars())) &&
"kind".equals(name.asString())) {
syntheticClassKind = enumEntryName.asString();
}
}
@@ -32,19 +32,4 @@ public @interface KotlinClass {
String[] data();
String[] strings();
@Deprecated
Kind kind() default Kind.CLASS;
@Deprecated
enum Kind {
CLASS,
/**
* A class has kind LOCAL_CLASS if and only if it's not an anonymous object and its first non-class container is not a package.
*/
LOCAL_CLASS,
ANONYMOUS_OBJECT,
}
}
@@ -28,20 +28,4 @@ public @interface KotlinSyntheticClass {
int abiVersion();
int[] version() default {};
@Deprecated
Kind kind() default Kind.LOCAL_FUNCTION;
@Deprecated
enum Kind {
PACKAGE_PART,
TRAIT_IMPL,
LOCAL_TRAIT_IMPL,
SAM_WRAPPER,
SAM_LAMBDA,
CALLABLE_REFERENCE_WRAPPER,
LOCAL_FUNCTION,
ANONYMOUS_FUNCTION,
WHEN_ON_ENUM_MAPPINGS,
}
}