diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index b04a315ea02..6796f69c1c3 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.codegen; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; +import com.google.protobuf.MessageLite; import com.intellij.openapi.util.Pair; import com.intellij.psi.tree.IElementType; import kotlin.Unit; @@ -29,6 +30,7 @@ import org.jetbrains.kotlin.builtins.PrimitiveType; import org.jetbrains.kotlin.codegen.binding.CalculatedClosure; import org.jetbrains.kotlin.codegen.context.CodegenContext; import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods; +import org.jetbrains.kotlin.codegen.serialization.JvmStringTable; import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.JetTypeMapper; import org.jetbrains.kotlin.descriptors.*; @@ -47,7 +49,6 @@ import org.jetbrains.kotlin.resolve.jvm.JvmPackage; import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType; import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin; import org.jetbrains.kotlin.serialization.DescriptorSerializer; -import org.jetbrains.kotlin.codegen.serialization.JvmStringTable; import org.jetbrains.kotlin.serialization.jvm.BitEncoding; import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor; import org.jetbrains.kotlin.types.JetType; @@ -844,7 +845,13 @@ public class AsmUtil { av.visitEnd(); } - public static void writeAnnotationData(@NotNull AnnotationVisitor av, @NotNull DescriptorSerializer serializer, @NotNull byte[] bytes) { + public static void writeAnnotationData( + @NotNull AnnotationVisitor av, + @NotNull DescriptorSerializer serializer, + @NotNull MessageLite message + ) { + byte[] bytes = serializer.serialize(message); + JvmCodegenUtil.writeAbiVersion(av); AnnotationVisitor data = av.visitArray(JvmAnnotationNames.DATA_FIELD_NAME); for (String string : BitEncoding.encodeBytes(bytes)) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index f28adb22200..fb87d0373bb 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -230,7 +230,7 @@ public class ClosureCodegen extends MemberCodegen { ProtoBuf.Callable callableProto = serializer.callableProto(funDescriptor).build(); AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CALLABLE), true); - writeAnnotationData(av, serializer, serializer.serialize(callableProto)); + writeAnnotationData(av, serializer, callableProto); av.visitEnd(); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index c51584fc998..69ffc51a1dd 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -253,7 +253,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { ProtoBuf.Class classProto = serializer.classProto(descriptor).build(); AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS), true); - writeAnnotationData(av, serializer, serializer.serialize(classProto)); + writeAnnotationData(av, serializer, classProto); if (kind != null) { av.visitEnum( JvmAnnotationNames.KIND_FIELD_NAME, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt index 108eca557cf..6403321b937 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt @@ -95,7 +95,7 @@ public class MultifileClassPartCodegen( if (packageProto.memberCount == 0) return val av = v.newAnnotation(AsmUtil.asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_MULTIFILE_CLASS_PART), true) - AsmUtil.writeAnnotationData(av, serializer, serializer.serialize(packageProto)) + AsmUtil.writeAnnotationData(av, serializer, packageProto) av.visit(JvmAnnotationNames.MULTIFILE_CLASS_NAME_FIELD_NAME, multifileClassFqName.shortName().asString()) av.visitEnd() } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java index f1c5b5071c0..20459771d6c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java @@ -290,7 +290,7 @@ public class PackageCodegen { ProtoBuf.Package packageProto = serializer.packageProtoWithoutDescriptors().build(); AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_PACKAGE), true); - AsmUtil.writeAnnotationData(av, serializer, serializer.serialize(packageProto)); + AsmUtil.writeAnnotationData(av, serializer, packageProto); av.visitEnd(); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java index 2c585f3b2b1..a9ebdb8f08f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java @@ -128,7 +128,7 @@ public class PackagePartCodegen extends MemberCodegen { if (packageProto.getMemberCount() == 0) return; AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_FILE_FACADE), true); - writeAnnotationData(av, serializer, serializer.serialize(packageProto)); + writeAnnotationData(av, serializer, packageProto); av.visitEnd(); } }