diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index a37f844592d..7ab5e6f0f75 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -241,7 +241,7 @@ public class ClosureCodegen extends MemberCodegen { final ProtoBuf.Function functionProto = serializer.functionProto(freeLambdaDescriptor).build(); - WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0, new Function1() { + WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0, new Function1() { @Override public Unit invoke(AnnotationVisitor av) { writeAnnotationData(av, serializer, functionProto); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt index 96c35c767d4..a211fbcb342 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt @@ -150,7 +150,7 @@ class InterfaceImplBodyCodegen( override fun generateKotlinMetadataAnnotation() { (v as InterfaceImplClassBuilder).stopCounting() - writeSyntheticClassMetadata(v) + writeSyntheticClassMetadata(v, state) } override fun done() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index 8d5b94ee0cf..44279b8e52e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -58,7 +58,6 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager; import org.jetbrains.kotlin.storage.NotNullLazyValue; import org.jetbrains.kotlin.types.ErrorUtils; import org.jetbrains.kotlin.types.KotlinType; -import org.jetbrains.kotlin.util.OperatorNameConventions; import org.jetbrains.org.objectweb.asm.*; import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; import org.jetbrains.org.objectweb.asm.commons.Method; @@ -66,12 +65,9 @@ import org.jetbrains.org.objectweb.asm.commons.Method; import java.util.*; import static org.jetbrains.kotlin.codegen.AsmUtil.*; -import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvm8Interface; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvm8InterfaceMember; import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED; -import static org.jetbrains.kotlin.resolve.BindingContext.PROVIDE_DELEGATE_RESOLVED_CALL; -import static org.jetbrains.kotlin.resolve.BindingContext.TYPE_ALIAS; -import static org.jetbrains.kotlin.resolve.BindingContext.VARIABLE; +import static org.jetbrains.kotlin.resolve.BindingContext.*; import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*; import static org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin.NO_ORIGIN; @@ -809,7 +805,7 @@ public abstract class MemberCodegen() { + WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.CLASS, 0, new Function1() { @Override public Unit invoke(AnnotationVisitor av) { writeAnnotationData(av, serializer, classProto); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt index bcab05a12ce..20ccd27cacf 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt @@ -328,7 +328,7 @@ class MultifileClassCodegenImpl( val extraFlags = if (shouldGeneratePartHierarchy) JvmAnnotationNames.METADATA_MULTIFILE_PARTS_INHERIT_FLAG else 0 - writeKotlinMetadata(classBuilder, KotlinClassHeader.Kind.MULTIFILE_CLASS, extraFlags) { av -> + writeKotlinMetadata(classBuilder, state, KotlinClassHeader.Kind.MULTIFILE_CLASS, extraFlags) { av -> val arv = av.visitArray(JvmAnnotationNames.METADATA_DATA_FIELD_NAME) for (internalName in partInternalNamesSorted) { arv.visit(null, internalName) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt index cfb7e3ac557..5e80c411eff 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt @@ -122,7 +122,7 @@ class MultifileClassPartCodegen( visitEnd() } - writeSyntheticClassMetadata(this) + writeSyntheticClassMetadata(this, state) } } } @@ -180,7 +180,7 @@ class MultifileClassPartCodegen( val extraFlags = if (shouldGeneratePartHierarchy) JvmAnnotationNames.METADATA_MULTIFILE_PARTS_INHERIT_FLAG else 0 - writeKotlinMetadata(v, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART, extraFlags) { av -> + writeKotlinMetadata(v, state, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART, extraFlags) { av -> AsmUtil.writeAnnotationData(av, serializer, packageProto) av.visit(JvmAnnotationNames.METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME, facadeClassType.internalName) } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java index 2f878ecd1bb..a313d7211bb 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java @@ -131,7 +131,7 @@ public class PackagePartCodegen extends MemberCodegen { DescriptorSerializer.createTopLevel(new JvmSerializerExtension(v.getSerializationBindings(), state)); final ProtoBuf.Package packageProto = serializer.packagePartProto(members).build(); - WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.FILE_FACADE, 0, new Function1() { + WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.FILE_FACADE, 0, new Function1() { @Override public Unit invoke(AnnotationVisitor av) { writeAnnotationData(av, serializer, packageProto); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt index b2af0a0726b..25f5efaed8f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt @@ -161,7 +161,7 @@ class PropertyReferenceCodegen( } override fun generateKotlinMetadataAnnotation() { - writeSyntheticClassMetadata(v) + writeSyntheticClassMetadata(v, state) } fun putInstanceOnStack(receiverValue: (() -> Unit)?): StackValue { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java index 76e4292adcd..3b591f2200d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java @@ -107,7 +107,7 @@ public class SamWrapperCodegen { ); cv.visitSource(file.getName(), null); - WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv); + WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv, state); // e.g. ASM type for Function2 Type functionAsmType = typeMapper.mapType(functionType); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index 345ae207d69..7e432b73542 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -166,10 +166,8 @@ class GenerationState @JvmOverloads constructor( val generateParametersMetadata: Boolean = configuration.getBoolean(JVMConfigurationKeys.PARAMETERS_METADATA) - val shouldInlineConstVals = run { - val settings = configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS) ?: LanguageVersionSettingsImpl.DEFAULT - settings.supportsFeature(LanguageFeature.InlineConstVals) - } + val languageVersionSettings = configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT) + val shouldInlineConstVals = languageVersionSettings.supportsFeature(LanguageFeature.InlineConstVals) init { this.interceptedBuilderFactory = builderFactory 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 f96f00394ac..c592c315a20 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java @@ -57,7 +57,7 @@ public class MappingClassesForWhenByEnumCodegen { generateFields(cb, mappings); generateInitialization(cb, mappings); - WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb); + WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb, state); cb.done(); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/writeAnnotationUtil.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/writeAnnotationUtil.kt index abacc3a6df7..0bcd560f941 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/writeAnnotationUtil.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/writeAnnotationUtil.kt @@ -16,7 +16,8 @@ package org.jetbrains.kotlin.codegen -import org.jetbrains.kotlin.config.KotlinCompilerVersion +import org.jetbrains.kotlin.codegen.state.GenerationState +import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver @@ -24,12 +25,21 @@ import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.org.objectweb.asm.AnnotationVisitor -fun writeKotlinMetadata(cb: ClassBuilder, kind: KotlinClassHeader.Kind, extraFlags: Int, action: (AnnotationVisitor) -> Unit) { +fun writeKotlinMetadata( + cb: ClassBuilder, + state: GenerationState, + kind: KotlinClassHeader.Kind, + extraFlags: Int, + action: (AnnotationVisitor) -> Unit +) { val av = cb.newAnnotation(JvmAnnotationNames.METADATA_DESC, true) av.visit(JvmAnnotationNames.METADATA_VERSION_FIELD_NAME, JvmMetadataVersion.INSTANCE.toArray()) av.visit(JvmAnnotationNames.BYTECODE_VERSION_FIELD_NAME, JvmBytecodeBinaryVersion.INSTANCE.toArray()) av.visit(JvmAnnotationNames.KIND_FIELD_NAME, kind.id) - val flags = extraFlags or (if (DeserializedDescriptorResolver.IS_PRE_RELEASE) JvmAnnotationNames.METADATA_PRE_RELEASE_FLAG else 0) + var flags = extraFlags + if (DeserializedDescriptorResolver.IS_PRE_RELEASE && state.languageVersionSettings.languageVersion == LanguageVersion.LATEST) { + flags = flags or JvmAnnotationNames.METADATA_PRE_RELEASE_FLAG + } if (flags != 0) { av.visit(JvmAnnotationNames.METADATA_EXTRA_INT_FIELD_NAME, flags) } @@ -37,8 +47,8 @@ fun writeKotlinMetadata(cb: ClassBuilder, kind: KotlinClassHeader.Kind, extraFla av.visitEnd() } -fun writeSyntheticClassMetadata(cb: ClassBuilder) { - writeKotlinMetadata(cb, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0) { _ -> +fun writeSyntheticClassMetadata(cb: ClassBuilder, state: GenerationState) { + writeKotlinMetadata(cb, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0) { _ -> // Do nothing } }