From 5de1cf3bb4af888186c43d8ed21a67481256650f Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 26 Jan 2016 17:44:37 +0300 Subject: [PATCH] Do not write old metadata annotations to bytecode --- .../org/jetbrains/kotlin/codegen/AsmUtil.java | 17 +++-------- .../kotlin/codegen/ClosureCodegen.java | 13 ++------ .../codegen/ImplementationBodyCodegen.java | 10 ++----- .../codegen/InterfaceImplBodyCodegen.kt | 4 +-- .../kotlin/codegen/JvmCodegenUtil.java | 7 ----- .../kotlin/codegen/MemberCodegen.java | 4 +-- .../kotlin/codegen/MultifileClassCodegen.kt | 20 +++---------- .../codegen/MultifileClassPartCodegen.kt | 10 ++----- .../kotlin/codegen/PackagePartCodegen.java | 12 ++------ .../codegen/PropertyReferenceCodegen.kt | 5 +--- .../kotlin/codegen/SamWrapperCodegen.java | 5 ++-- .../kotlin/codegen/ScriptCodegen.java | 2 +- .../kotlin/codegen/inline/InlineCodegen.java | 2 +- .../MappingClassesForWhenByEnumCodegen.java | 3 -- .../annotations/JvmSynthetic.txt | 1 - .../annotations/defaultTargets.txt | 9 ------ .../bytecodeListing/annotations/literals.txt | 12 -------- .../annotations/onProperties.txt | 9 ------ .../annotations/onReceiver.txt | 3 -- .../codegen/bytecodeListing/defaultImpls.txt | 7 ----- .../codegen/bytecodeListing/inlineOnly.txt | 2 -- .../specialBridges/contains.txt | 12 -------- .../kotlin/load/java/JvmAnnotationNames.java | 30 ++++++------------- ...eadKotlinClassHeaderAnnotationVisitor.java | 23 +++++++------- 24 files changed, 45 insertions(+), 177 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index c17aaa7e83f..1b3635ae25c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -63,7 +63,6 @@ import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isBoolean; import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isPrimitiveClass; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface; -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; @@ -781,28 +780,20 @@ public class AsmUtil { } } - public static void writeKotlinSyntheticClassAnnotation(@NotNull ClassBuilder v, @NotNull GenerationState state) { - AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(KOTLIN_SYNTHETIC_CLASS), true); - JvmCodegenUtil.writeAbiVersion(av); - av.visitEnd(); - } - public static void writeAnnotationData( @NotNull AnnotationVisitor av, @NotNull DescriptorSerializer serializer, - @NotNull MessageLite message, - boolean old + @NotNull MessageLite message ) { byte[] bytes = serializer.serialize(message); - AnnotationVisitor data = av.visitArray(old ? JvmAnnotationNames.DATA_FIELD_NAME : JvmAnnotationNames.METADATA_DATA_FIELD_NAME); + AnnotationVisitor data = av.visitArray(JvmAnnotationNames.METADATA_DATA_FIELD_NAME); for (String string : BitEncoding.encodeBytes(bytes)) { data.visit(null, string); } data.visitEnd(); - AnnotationVisitor strings = av.visitArray( - old ? JvmAnnotationNames.STRINGS_FIELD_NAME : JvmAnnotationNames.METADATA_STRINGS_FIELD_NAME - ); + + AnnotationVisitor strings = av.visitArray(JvmAnnotationNames.METADATA_STRINGS_FIELD_NAME); for (String string : ((JvmStringTable) serializer.getStringTable()).getStrings()) { strings.visit(null, string); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index 51c6c655ef8..a6f5b03cbc5 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -34,7 +34,6 @@ import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; import org.jetbrains.kotlin.load.java.JvmAbi; -import org.jetbrains.kotlin.load.java.JvmAnnotationNames; import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader; import org.jetbrains.kotlin.psi.KtElement; import org.jetbrains.kotlin.resolve.BindingContext; @@ -60,7 +59,6 @@ import java.util.List; import static org.jetbrains.kotlin.codegen.AsmUtil.*; import static org.jetbrains.kotlin.codegen.ExpressionCodegen.generateClassLiteralReference; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConst; -import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.writeAbiVersion; import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.CLOSURE; import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClass; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*; @@ -219,9 +217,7 @@ public class ClosureCodegen extends MemberCodegen { } @Override - protected void generateKotlinAnnotation() { - writeKotlinSyntheticClassAnnotation(v, state); - + protected void generateKotlinMetadataAnnotation() { final DescriptorSerializer serializer = DescriptorSerializer.createForLambda(new JvmSerializerExtension(v.getSerializationBindings(), state)); @@ -230,15 +226,10 @@ public class ClosureCodegen extends MemberCodegen { WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.SYNTHETIC_CLASS, new Function1() { @Override public Unit invoke(AnnotationVisitor av) { - writeAnnotationData(av, serializer, functionProto, false); + writeAnnotationData(av, serializer, functionProto); return Unit.INSTANCE; } }); - - AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_FUNCTION), true); - writeAbiVersion(av); - writeAnnotationData(av, serializer, functionProto, true); - av.visitEnd(); } @Override diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index 5776f9c1281..043fb42d45c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -41,7 +41,6 @@ import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.load.java.JvmAbi; -import org.jetbrains.kotlin.load.java.JvmAnnotationNames; import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor; import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader; import org.jetbrains.kotlin.name.FqName; @@ -248,7 +247,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } @Override - protected void generateKotlinAnnotation() { + protected void generateKotlinMetadataAnnotation() { final DescriptorSerializer serializer = DescriptorSerializer.create(descriptor, new JvmSerializerExtension(v.getSerializationBindings(), state)); @@ -257,15 +256,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.CLASS, new Function1() { @Override public Unit invoke(AnnotationVisitor av) { - writeAnnotationData(av, serializer, classProto, false); + writeAnnotationData(av, serializer, classProto); return Unit.INSTANCE; } }); - - AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS), true); - writeAbiVersion(av); - writeAnnotationData(av, serializer, classProto, true); - av.visitEnd(); } private void writeEnclosingMethod() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt index b6cc476b0e5..61666b35a2d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt @@ -146,11 +146,9 @@ class InterfaceImplBodyCodegen( }) } - override fun generateKotlinAnnotation() { + override fun generateKotlinMetadataAnnotation() { (v as InterfaceImplClassBuilder).stopCounting() - AsmUtil.writeKotlinSyntheticClassAnnotation(v, state) - writeSyntheticClassMetadata(v); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java index a21f884413f..fb724359e3e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java @@ -30,8 +30,6 @@ import org.jetbrains.kotlin.codegen.context.MethodContext; import org.jetbrains.kotlin.codegen.context.RootContext; import org.jetbrains.kotlin.codegen.state.JetTypeMapper; import org.jetbrains.kotlin.descriptors.*; -import org.jetbrains.kotlin.load.java.JvmAnnotationNames; -import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion; import org.jetbrains.kotlin.load.kotlin.ModuleMapping; import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt; import org.jetbrains.kotlin.psi.KtFile; @@ -43,7 +41,6 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.inline.InlineUtil; import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor; import org.jetbrains.kotlin.types.KotlinType; -import org.jetbrains.org.objectweb.asm.AnnotationVisitor; import java.io.File; @@ -220,8 +217,4 @@ public class JvmCodegenUtil { public static String getMappingFileName(@NotNull String moduleName) { return "META-INF/" + moduleName + "." + ModuleMapping.MAPPING_FILE_EXT; } - - public static void writeAbiVersion(@NotNull AnnotationVisitor av) { - av.visit(JvmAnnotationNames.VERSION_FIELD_NAME, JvmMetadataVersion.INSTANCE.toArray()); - } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index 6ff9d9758f1..73b6e9ad56b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -119,7 +119,7 @@ public abstract class MemberCodegen + val arv = av.visitArray(JvmAnnotationNames.METADATA_DATA_FIELD_NAME) + for (internalName in partFqNames.map(AsmUtil::internalNameByFqNameWithoutInnerClasses).sorted()) { arv.visit(null, internalName) } arv.visitEnd() } - - writeKotlinMetadata(classBuilder, KotlinClassHeader.Kind.MULTIFILE_CLASS) { av -> - writePartNames(av, JvmAnnotationNames.METADATA_DATA_FIELD_NAME) - } - - val av = classBuilder.newAnnotation(AsmUtil.asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_MULTIFILE_CLASS), true) - JvmCodegenUtil.writeAbiVersion(av) - writePartNames(av, JvmAnnotationNames.FILE_PART_CLASS_NAMES_FIELD_NAME) - av.visitEnd() } private fun createCodegenForPartOfMultifileFacade(facadeContext: FieldOwnerContext<*>): MemberCodegen = object : MemberCodegen(state, null, facadeContext, null, classBuilder) { override fun generateDeclaration() = throw UnsupportedOperationException() override fun generateBody() = throw UnsupportedOperationException() - override fun generateKotlinAnnotation() = throw UnsupportedOperationException() + override fun generateKotlinMetadataAnnotation() = throw UnsupportedOperationException() } fun done() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt index f613088af05..a6bdb2dd54c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt @@ -69,7 +69,7 @@ class MultifileClassPartCodegen( } } - override fun generateKotlinAnnotation() { + override fun generateKotlinMetadataAnnotation() { val members = ArrayList() for (declaration in element.declarations) { when (declaration) { @@ -88,15 +88,9 @@ class MultifileClassPartCodegen( val packageProto = serializer.packagePartProto(members).build() writeKotlinMetadata(v, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART) { av -> - AsmUtil.writeAnnotationData(av, serializer, packageProto, false) + AsmUtil.writeAnnotationData(av, serializer, packageProto) av.visit(JvmAnnotationNames.METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME, multifileClassType.internalName) } - - val av = v.newAnnotation(AsmUtil.asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_MULTIFILE_CLASS_PART), true) - JvmCodegenUtil.writeAbiVersion(av) - AsmUtil.writeAnnotationData(av, serializer, packageProto, true) - av.visit(JvmAnnotationNames.MULTIFILE_CLASS_NAME_FIELD_NAME, multifileClassType.internalName) - av.visitEnd() } override fun generateSyntheticParts() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java index ad90db77f5e..885e968b5dd 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.descriptors.VariableDescriptor; import org.jetbrains.kotlin.descriptors.annotations.Annotated; import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl; -import org.jetbrains.kotlin.load.java.JvmAnnotationNames; import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.BindingContext; @@ -43,9 +42,7 @@ import org.jetbrains.org.objectweb.asm.Type; import java.util.ArrayList; import java.util.List; -import static org.jetbrains.kotlin.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses; import static org.jetbrains.kotlin.codegen.AsmUtil.writeAnnotationData; -import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.writeAbiVersion; import static org.jetbrains.org.objectweb.asm.Opcodes.*; public class PackagePartCodegen extends MemberCodegen { @@ -109,7 +106,7 @@ public class PackagePartCodegen extends MemberCodegen { } @Override - protected void generateKotlinAnnotation() { + protected void generateKotlinMetadataAnnotation() { List members = new ArrayList(); for (KtDeclaration declaration : element.getDeclarations()) { if (declaration instanceof KtNamedFunction) { @@ -128,15 +125,10 @@ public class PackagePartCodegen extends MemberCodegen { WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.FILE_FACADE, new Function1() { @Override public Unit invoke(AnnotationVisitor av) { - writeAnnotationData(av, serializer, packageProto, false); + writeAnnotationData(av, serializer, packageProto); return Unit.INSTANCE; } }); - - AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_FILE_FACADE), true); - writeAbiVersion(av); - writeAnnotationData(av, serializer, packageProto, true); - av.visitEnd(); } @Override diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt index c122ed4d759..eb6e2b86fe3 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.codegen import org.jetbrains.kotlin.codegen.AsmUtil.method -import org.jetbrains.kotlin.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation import org.jetbrains.kotlin.codegen.context.ClassContext import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.descriptors.* @@ -158,9 +157,7 @@ class PropertyReferenceCodegen( } } - override fun generateKotlinAnnotation() { - writeKotlinSyntheticClassAnnotation(v, state) - + override fun generateKotlinMetadataAnnotation() { writeSyntheticClassMetadata(v) } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java index 3f0e094cc44..bacca4cfd25 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java @@ -39,7 +39,8 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; import java.util.Collections; -import static org.jetbrains.kotlin.codegen.AsmUtil.*; +import static org.jetbrains.kotlin.codegen.AsmUtil.NO_FLAG_PACKAGE_PRIVATE; +import static org.jetbrains.kotlin.codegen.AsmUtil.asmTypeByFqNameWithoutInnerClasses; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE; import static org.jetbrains.org.objectweb.asm.Opcodes.*; @@ -94,8 +95,6 @@ public class SamWrapperCodegen { ); cv.visitSource(file.getName(), null); - writeKotlinSyntheticClassAnnotation(cv, state); - WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv); // e.g. ASM type for Function2 diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ScriptCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ScriptCodegen.java index 33f13957cac..cdc2b76be6d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ScriptCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ScriptCodegen.java @@ -104,7 +104,7 @@ public class ScriptCodegen extends MemberCodegen { } @Override - protected void generateKotlinAnnotation() { + protected void generateKotlinMetadataAnnotation() { // TODO } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java index 6ac6879e542..942e9627f35 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java @@ -425,7 +425,7 @@ public class InlineCodegen extends CallGenerator { } @Override - protected void generateKotlinAnnotation() { + protected void generateKotlinMetadataAnnotation() { throw new IllegalStateException(); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java index ffb9ffad44b..104c7cc664a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java @@ -31,7 +31,6 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; import java.util.List; import java.util.Map; -import static org.jetbrains.kotlin.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE; import static org.jetbrains.org.objectweb.asm.Opcodes.*; @@ -58,8 +57,6 @@ public class MappingClassesForWhenByEnumCodegen { generateFields(cb, mappings); generateInitialization(cb, mappings); - writeKotlinSyntheticClassAnnotation(cb, state); - WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb); cb.done(); diff --git a/compiler/testData/codegen/bytecodeListing/annotations/JvmSynthetic.txt b/compiler/testData/codegen/bytecodeListing/annotations/JvmSynthetic.txt index d0d1f144e78..966e50ce8f3 100644 --- a/compiler/testData/codegen/bytecodeListing/annotations/JvmSynthetic.txt +++ b/compiler/testData/codegen/bytecodeListing/annotations/JvmSynthetic.txt @@ -1,5 +1,4 @@ @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public final class Example { private field prop2: int private synthetic final @org.jetbrains.annotations.NotNull field prop: java.lang.String diff --git a/compiler/testData/codegen/bytecodeListing/annotations/defaultTargets.txt b/compiler/testData/codegen/bytecodeListing/annotations/defaultTargets.txt index 2c09977bbb6..9ac85558e47 100644 --- a/compiler/testData/codegen/bytecodeListing/annotations/defaultTargets.txt +++ b/compiler/testData/codegen/bytecodeListing/annotations/defaultTargets.txt @@ -1,5 +1,4 @@ @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public final class A { private final @AnnField @AnnParameterField @AnnTypeField field a: int private final @AnnField @AnnTypeField field x: int @@ -14,53 +13,45 @@ public final class A { @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnField @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnFieldProperty @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnParameterField @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnParameterProperty @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnProperty @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnTypeField @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class Anno @kotlin.Metadata -@kotlin.jvm.internal.KotlinFileFacade public final class DefaultTargetsKt { private final static @Anno field p2: int static method (): void diff --git a/compiler/testData/codegen/bytecodeListing/annotations/literals.txt b/compiler/testData/codegen/bytecodeListing/annotations/literals.txt index 0c573966a49..4ad69775a7d 100644 --- a/compiler/testData/codegen/bytecodeListing/annotations/literals.txt +++ b/compiler/testData/codegen/bytecodeListing/annotations/literals.txt @@ -2,26 +2,21 @@ @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class ClsAnn @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class ExprAnn @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class FunAnn -@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.Metadata -@kotlin.jvm.internal.KotlinFunction final class LiteralsKt$foo$1 { synthetic final field $arg: int inner class LiteralsKt$foo$1 @@ -30,9 +25,7 @@ final class LiteralsKt$foo$1 { public synthetic method invoke(): java.lang.Object } -@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.Metadata -@kotlin.jvm.internal.KotlinFunction final class LiteralsKt$foo$2 { synthetic final field $arg: int inner class LiteralsKt$foo$2 @@ -43,15 +36,12 @@ final class LiteralsKt$foo$2 { @ClsAnn @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public final class LiteralsKt$foo$3 { inner class LiteralsKt$foo$3 method (): void } -@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.Metadata -@kotlin.jvm.internal.KotlinFunction final class LiteralsKt$foo$x$1 { synthetic final field $arg: int inner class LiteralsKt$foo$x$1 @@ -61,7 +51,6 @@ final class LiteralsKt$foo$x$1 { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinFileFacade public final class LiteralsKt { inner class LiteralsKt$foo$1 inner class LiteralsKt$foo$2 @@ -72,7 +61,6 @@ public final class LiteralsKt { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public class My { public method (): void } \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/annotations/onProperties.txt b/compiler/testData/codegen/bytecodeListing/annotations/onProperties.txt index a9d1e5918ae..583a9608763 100644 --- a/compiler/testData/codegen/bytecodeListing/annotations/onProperties.txt +++ b/compiler/testData/codegen/bytecodeListing/annotations/onProperties.txt @@ -1,5 +1,4 @@ @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public final class A { private synthetic final static field $$delegatedProperties: kotlin.reflect.KProperty[] private @AnnField field p: int @@ -21,41 +20,33 @@ public final class A { @java.lang.annotation.Retention @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnDelegate @java.lang.annotation.Retention @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnField @java.lang.annotation.Retention @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnGetter @java.lang.annotation.Retention @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnParam @java.lang.annotation.Retention @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnProp @java.lang.annotation.Retention @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnProp2 @java.lang.annotation.Retention @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class AnnSetter @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public final class CustomDelegate { public method (): void public final @org.jetbrains.annotations.NotNull method getValue(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.reflect.KProperty): java.lang.String diff --git a/compiler/testData/codegen/bytecodeListing/annotations/onReceiver.txt b/compiler/testData/codegen/bytecodeListing/annotations/onReceiver.txt index 407d7a270e1..3c3bc6d1f68 100644 --- a/compiler/testData/codegen/bytecodeListing/annotations/onReceiver.txt +++ b/compiler/testData/codegen/bytecodeListing/annotations/onReceiver.txt @@ -1,5 +1,4 @@ @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public final class A { public method (): void public final @org.jetbrains.annotations.NotNull method f(@Ann p0: java.lang.String): java.lang.String @@ -8,11 +7,9 @@ public final class A { @java.lang.annotation.Retention @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class Ann @kotlin.Metadata -@kotlin.jvm.internal.KotlinFileFacade public final class OnReceiverKt { public final static @org.jetbrains.annotations.NotNull method getTopLevelP(@Ann p0: java.lang.String): java.lang.String public final static @org.jetbrains.annotations.NotNull method topLevelF(@Ann p0: java.lang.String): java.lang.String diff --git a/compiler/testData/codegen/bytecodeListing/defaultImpls.txt b/compiler/testData/codegen/bytecodeListing/defaultImpls.txt index d824764dd5b..48654292118 100644 --- a/compiler/testData/codegen/bytecodeListing/defaultImpls.txt +++ b/compiler/testData/codegen/bytecodeListing/defaultImpls.txt @@ -1,20 +1,16 @@ @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class B { public abstract method foo(): void } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class C { public abstract method getBar(): int } -@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.Metadata public final class D$DefaultImpls { inner class D$DefaultImpls @@ -22,21 +18,18 @@ public final class D$DefaultImpls { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class D { inner class D$DefaultImpls public abstract method baz(): int } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public final class E$InsideE { inner class E$InsideE public method (): void } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class E { inner class E$InsideE } \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inlineOnly.txt b/compiler/testData/codegen/bytecodeListing/inlineOnly.txt index f230d9cb182..0864d92b1f4 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineOnly.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineOnly.txt @@ -1,5 +1,4 @@ @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public final class Foo { public method (): void public final method bar(): void @@ -8,7 +7,6 @@ public final class Foo { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinFileFacade public final class InlineOnlyKt { public final static method bar(): void private final static method baz(): void diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/contains.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/contains.txt index ced76cb3b92..a0e0508bd21 100644 --- a/compiler/testData/codegen/bytecodeListing/specialBridges/contains.txt +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/contains.txt @@ -1,5 +1,4 @@ @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A1 { public method (): void public method contains(p0: java.lang.Object): boolean @@ -12,7 +11,6 @@ public abstract class A1 { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A2 { public method (): void public method contains(@org.jetbrains.annotations.NotNull p0: java.lang.String): boolean @@ -27,7 +25,6 @@ public abstract class A2 { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A3 { public method (): void public method contains(p0: java.lang.Object): boolean @@ -41,7 +38,6 @@ public abstract class A3 { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A4 { public method (): void public method contains(p0: java.lang.Object): boolean @@ -56,7 +52,6 @@ public abstract class A4 { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A5 { public method (): void public final method contains(p0: java.lang.Object): boolean @@ -74,7 +69,6 @@ public abstract class A5 { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A6 { public method (): void public method contains(@org.jetbrains.annotations.NotNull p0: java.lang.String): boolean @@ -93,7 +87,6 @@ public abstract class A6 { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A7 { public method (): void public method contains(p0: int): boolean @@ -107,7 +100,6 @@ public abstract class A7 { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class A8 { public method (): void public method contains(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean @@ -118,7 +110,6 @@ public abstract class A8 { public method toArray(p0: java.lang.Object[]): java.lang.Object[] } -@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.Metadata public final class I1$DefaultImpls { inner class I1$DefaultImpls @@ -127,7 +118,6 @@ public final class I1$DefaultImpls { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class I1 { inner class I1$DefaultImpls public abstract method contains(p0: java.lang.Object): boolean @@ -136,7 +126,6 @@ public abstract class I1 { public abstract method toArray(p0: java.lang.Object[]): java.lang.Object[] } -@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.Metadata public final class I2$DefaultImpls { inner class I2$DefaultImpls @@ -145,7 +134,6 @@ public final class I2$DefaultImpls { } @kotlin.Metadata -@kotlin.jvm.internal.KotlinClass public abstract class I2 { inner class I2$DefaultImpls public abstract method contains(@org.jetbrains.annotations.NotNull p0: java.lang.String): boolean 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 4d8c3023684..c0d962797ba 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 @@ -29,24 +29,12 @@ 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"); - 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_FUNCTION = new FqName("kotlin.jvm.internal.KotlinFunction"); - - 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 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 Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value"); public static final Name DEPRECATED_ANNOTATION_MESSAGE = Name.identifier("message"); public static final Name TARGET_ANNOTATION_MEMBER_NAME = Name.identifier("allowedTargets"); @@ -66,14 +54,10 @@ 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"); - private static final Set SPECIAL_ANNOTATIONS = new HashSet(); private static final Set NULLABILITY_ANNOTATIONS = new HashSet(); private static final Set SPECIAL_META_ANNOTATIONS = new HashSet(); - static { - for (FqName fqName : Arrays.asList(METADATA, KOTLIN_CLASS, KOTLIN_SYNTHETIC_CLASS)) { - SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName)); - } + static { for (FqName fqName : Arrays.asList(JETBRAINS_NOT_NULL_ANNOTATION, JETBRAINS_NULLABLE_ANNOTATION)) { NULLABILITY_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName)); } @@ -84,10 +68,14 @@ public final class JvmAnnotationNames { } public static boolean isSpecialAnnotation(@NotNull ClassId classId, boolean javaSpecificAnnotationsAreSpecial) { - JvmClassName className = JvmClassName.byClassId(classId); - return (javaSpecificAnnotationsAreSpecial - && (NULLABILITY_ANNOTATIONS.contains(className) || SPECIAL_META_ANNOTATIONS.contains(className)) - ) || SPECIAL_ANNOTATIONS.contains(className); + if (classId.asSingleFqName().equals(METADATA)) return true; + + if (javaSpecificAnnotationsAreSpecial) { + JvmClassName className = JvmClassName.byClassId(classId); + if (NULLABILITY_ANNOTATIONS.contains(className) || SPECIAL_META_ANNOTATIONS.contains(className)) return true; + } + + return false; } private JvmAnnotationNames() { 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 4aeace97e7a..b3e17e1a0b0 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 @@ -40,11 +40,12 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor private static final Map HEADER_KINDS = new HashMap(); static { - HEADER_KINDS.put(ClassId.topLevel(KOTLIN_CLASS), CLASS); - 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); + // TODO: delete this at some point + HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinClass")), CLASS); + HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinFileFacade")), FILE_FACADE); + HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinMultifileClass")), MULTIFILE_CLASS); + HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinMultifileClassPart")), MULTIFILE_CLASS_PART); + HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinSyntheticClass")), SYNTHETIC_CLASS); } private JvmMetadataVersion metadataVersion = null; @@ -103,7 +104,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor KotlinClassHeader.Kind newKind = HEADER_KINDS.get(classId); if (newKind != null) { headerKind = newKind; - return new HeaderAnnotationArgumentVisitor(); + return new OldDeprecatedAnnotationArgumentVisitor(); } return null; @@ -191,13 +192,13 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor } } - private class HeaderAnnotationArgumentVisitor implements AnnotationArgumentVisitor { + private class OldDeprecatedAnnotationArgumentVisitor implements AnnotationArgumentVisitor { @Override public void visit(@Nullable Name name, @Nullable Object value) { if (name == null) return; String string = name.asString(); - if (VERSION_FIELD_NAME.equals(string)) { + if ("version".equals(string)) { if (value instanceof int[]) { metadataVersion = new JvmMetadataVersion((int[]) value); @@ -207,7 +208,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor } } } - else if (MULTIFILE_CLASS_NAME_FIELD_NAME.equals(string)) { + else if ("multifileClassName".equals(string)) { multifileClassName = value instanceof String ? (String) value : null; } } @@ -216,10 +217,10 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor @Nullable public AnnotationArrayArgumentVisitor visitArray(@NotNull Name name) { String string = name.asString(); - if (DATA_FIELD_NAME.equals(string) || FILE_PART_CLASS_NAMES_FIELD_NAME.equals(string)) { + if ("data".equals(string) || "filePartClassNames".equals(string)) { return dataArrayVisitor(); } - else if (STRINGS_FIELD_NAME.equals(string)) { + else if ("strings".equals(string)) { return stringsArrayVisitor(); } else {