diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index 63197d049a8..87a3bc418ee 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -66,7 +66,7 @@ import java.util.Set; import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isBoolean; import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isPrimitiveClass; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface; -import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass; +import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KOTLIN_SYNTHETIC_CLASS; import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*; import static org.jetbrains.kotlin.types.TypeUtils.isNullableType; @@ -837,7 +837,7 @@ public class AsmUtil { } public static void writeKotlinSyntheticClassAnnotation(@NotNull ClassBuilder v, @NotNull GenerationState state) { - AnnotationVisitor av = v.newAnnotation(Type.getObjectType(KotlinSyntheticClass.CLASS_NAME.getInternalName()).getDescriptor(), true); + AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(KOTLIN_SYNTHETIC_CLASS), true); JvmCodegenUtil.writeAbiVersion(av); JvmCodegenUtil.writeModuleName(av, state); av.visitEnd(); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java index 1dbebfeabb8..dd2c0032814 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java @@ -22,8 +22,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.backend.common.output.OutputFile; import org.jetbrains.kotlin.load.java.AbiVersionUtil; import org.jetbrains.kotlin.load.java.JvmAbi; -import org.jetbrains.kotlin.load.java.JvmAnnotationNames; -import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion; import org.jetbrains.kotlin.test.ConfigurationKind; @@ -32,7 +30,7 @@ import java.lang.annotation.Annotation; import java.util.Collection; import java.util.List; -import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.VERSION_FIELD_NAME; +import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.*; public class KotlinSyntheticClassAnnotationTest extends CodegenTestCase { public static final FqName PACKAGE_NAME = new FqName("test"); @@ -115,11 +113,11 @@ public class KotlinSyntheticClassAnnotationTest extends CodegenTestCase { } private void doTestKotlinSyntheticClass(@NotNull String code, @NotNull String classFilePart) { - doTest(code, classFilePart, KotlinSyntheticClass.CLASS_NAME.getFqNameForClassNameWithoutDollars()); + doTest(code, classFilePart, KOTLIN_SYNTHETIC_CLASS); } private void doTestKotlinClass(@NotNull String code, @NotNull String classFilePart) { - doTest(code, classFilePart, JvmAnnotationNames.KOTLIN_CLASS, JvmAnnotationNames.KOTLIN_LOCAL_CLASS); + doTest(code, classFilePart, KOTLIN_CLASS, KOTLIN_LOCAL_CLASS); } private void doTest( diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java index 1275a83ee83..2043c1ac027 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java @@ -33,6 +33,7 @@ public final class JvmAnnotationNames { 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"); public static final FqName KOTLIN_MULTIFILE_CLASS_PART = new FqName("kotlin.jvm.internal.KotlinMultifileClassPart"); + public static final FqName KOTLIN_SYNTHETIC_CLASS = new FqName("kotlin.jvm.internal.KotlinSyntheticClass"); public static final FqName KOTLIN_CALLABLE = new FqName("kotlin.jvm.internal.KotlinCallable"); public static final FqName KOTLIN_INTERFACE_DEFAULT_IMPLS = new FqName("kotlin.jvm.internal.KotlinInterfaceDefaultImpls"); public static final FqName KOTLIN_LOCAL_CLASS = new FqName("kotlin.jvm.internal.KotlinLocalClass"); @@ -70,10 +71,6 @@ public final class JvmAnnotationNames { public static final FqName ENHANCED_NULLABILITY_ANNOTATION = new FqName("kotlin.jvm.internal.EnhancedNullability"); public static final FqName ENHANCED_MUTABILITY_ANNOTATION = new FqName("kotlin.jvm.internal.EnhancedMutability"); - public static class KotlinSyntheticClass { - public static final JvmClassName CLASS_NAME = JvmClassName.byInternalName("kotlin/jvm/internal/KotlinSyntheticClass"); - } - public static final String OLD_ABI_VERSION_FIELD_NAME = "abiVersion"; // When these annotations appear on a declaration, they are copied to the _type_ of the declaration, becoming type annotations @@ -89,16 +86,16 @@ public final class JvmAnnotationNames { private static final Set NULLABILITY_ANNOTATIONS = new HashSet(); private static final Set SPECIAL_META_ANNOTATIONS = new HashSet(); static { - for (FqName fqName : Arrays.asList(KOTLIN_CLASS, KOTLIN_PACKAGE, KOTLIN_SIGNATURE)) { + for (FqName fqName : Arrays.asList( + KOTLIN_CLASS, KOTLIN_PACKAGE, KOTLIN_SIGNATURE, KOTLIN_SYNTHETIC_CLASS, KOTLIN_INTERFACE_DEFAULT_IMPLS, KOTLIN_LOCAL_CLASS + )) { SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName)); } - SPECIAL_ANNOTATIONS.add(KotlinSyntheticClass.CLASS_NAME); - SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_INTERFACE_DEFAULT_IMPLS)); - SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_LOCAL_CLASS)); for (FqName fqName : Arrays.asList(JETBRAINS_NOT_NULL_ANNOTATION, JETBRAINS_NULLABLE_ANNOTATION)) { NULLABILITY_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName)); } + for (FqName fqName : Arrays.asList(TARGET_ANNOTATION, RETENTION_ANNOTATION, DOCUMENTED_ANNOTATION)) { SPECIAL_META_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName)); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java index 22cde7139c2..31818c2218f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.load.java.AbiVersionUtil; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.Name; -import org.jetbrains.kotlin.resolve.jvm.JvmClassName; import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion; import java.util.ArrayList; @@ -36,15 +35,15 @@ import static org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass.*; import static org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.Kind.*; public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor { - private static final Map HEADER_KINDS = new HashMap(); + private static final Map HEADER_KINDS = new HashMap(); static { - HEADER_KINDS.put(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_CLASS), CLASS); - HEADER_KINDS.put(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_PACKAGE), PACKAGE_FACADE); - HEADER_KINDS.put(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_FILE_FACADE), FILE_FACADE); - HEADER_KINDS.put(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_MULTIFILE_CLASS), MULTIFILE_CLASS); - HEADER_KINDS.put(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_MULTIFILE_CLASS_PART), MULTIFILE_CLASS_PART); - HEADER_KINDS.put(KotlinSyntheticClass.CLASS_NAME, SYNTHETIC_CLASS); + HEADER_KINDS.put(ClassId.topLevel(KOTLIN_CLASS), CLASS); + HEADER_KINDS.put(ClassId.topLevel(KOTLIN_PACKAGE), PACKAGE_FACADE); + HEADER_KINDS.put(ClassId.topLevel(KOTLIN_FILE_FACADE), FILE_FACADE); + HEADER_KINDS.put(ClassId.topLevel(KOTLIN_MULTIFILE_CLASS), MULTIFILE_CLASS); + HEADER_KINDS.put(ClassId.topLevel(KOTLIN_MULTIFILE_CLASS_PART), MULTIFILE_CLASS_PART); + HEADER_KINDS.put(ClassId.topLevel(KOTLIN_SYNTHETIC_CLASS), SYNTHETIC_CLASS); } private BinaryVersion version = AbiVersionUtil.INVALID_VERSION; @@ -103,23 +102,17 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor return null; } - JvmClassName annotation = JvmClassName.byClassId(classId); - - KotlinClassHeader.Kind newKind = HEADER_KINDS.get(annotation); + KotlinClassHeader.Kind newKind = HEADER_KINDS.get(classId); if (newKind != null) { headerKind = newKind; switch (newKind) { case CLASS: - return new ClassHeaderReader(); case PACKAGE_FACADE: - return new PackageHeaderReader(); case FILE_FACADE: - return new FileFacadeHeaderReader(); case MULTIFILE_CLASS: - return new MultifileClassHeaderReader(); case MULTIFILE_CLASS_PART: - return new MultifileClassPartHeaderReader(); + return new HeaderAnnotationArgumentVisitor(); case SYNTHETIC_CLASS: return new SyntheticClassHeaderReader(); default: @@ -134,13 +127,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor public void visitEnd() { } - private abstract class HeaderAnnotationArgumentVisitor implements AnnotationArgumentVisitor { - protected final JvmClassName annotationClassName; - - public HeaderAnnotationArgumentVisitor(@NotNull JvmClassName annotationClassName) { - this.annotationClassName = annotationClassName; - } - + private class HeaderAnnotationArgumentVisitor implements AnnotationArgumentVisitor { @Override public void visit(@Nullable Name name, @Nullable Object value) { if (name == null) return; @@ -249,46 +236,12 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor } } - private class ClassHeaderReader extends HeaderAnnotationArgumentVisitor { - public ClassHeaderReader() { - super(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_CLASS)); - } - } - - private class PackageHeaderReader extends HeaderAnnotationArgumentVisitor { - public PackageHeaderReader() { - super(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_PACKAGE)); - } - } - - private class FileFacadeHeaderReader extends HeaderAnnotationArgumentVisitor { - public FileFacadeHeaderReader() { - super(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_FILE_FACADE)); - } - } - - private class MultifileClassHeaderReader extends HeaderAnnotationArgumentVisitor { - public MultifileClassHeaderReader() { - super(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_MULTIFILE_CLASS)); - } - } - - private class MultifileClassPartHeaderReader extends HeaderAnnotationArgumentVisitor { - public MultifileClassPartHeaderReader() { - super(JvmClassName.byFqNameWithoutInnerClasses(KOTLIN_MULTIFILE_CLASS_PART)); - } - } - private class SyntheticClassHeaderReader extends HeaderAnnotationArgumentVisitor { - public SyntheticClassHeaderReader() { - super(KotlinSyntheticClass.CLASS_NAME); - } - @Override public void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName) { if ("Kind".equals(enumClassId.getShortClassName().asString()) && enumClassId.isNestedClass() && - enumClassId.getOuterClassId().equals(ClassId.topLevel(annotationClassName.getFqNameForClassNameWithoutDollars())) && + enumClassId.getOuterClassId().equals(ClassId.topLevel(KOTLIN_SYNTHETIC_CLASS)) && "kind".equals(name.asString())) { syntheticClassKind = enumEntryName.asString(); }