Do not mark class files as pre-release if compiled with -language-version 1.0
#KT-15584 Fixed
This commit is contained in:
@@ -241,7 +241,7 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
|||||||
|
|
||||||
final ProtoBuf.Function functionProto = serializer.functionProto(freeLambdaDescriptor).build();
|
final ProtoBuf.Function functionProto = serializer.functionProto(freeLambdaDescriptor).build();
|
||||||
|
|
||||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0, new Function1<AnnotationVisitor, Unit>() {
|
WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0, new Function1<AnnotationVisitor, Unit>() {
|
||||||
@Override
|
@Override
|
||||||
public Unit invoke(AnnotationVisitor av) {
|
public Unit invoke(AnnotationVisitor av) {
|
||||||
writeAnnotationData(av, serializer, functionProto);
|
writeAnnotationData(av, serializer, functionProto);
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ class InterfaceImplBodyCodegen(
|
|||||||
override fun generateKotlinMetadataAnnotation() {
|
override fun generateKotlinMetadataAnnotation() {
|
||||||
(v as InterfaceImplClassBuilder).stopCounting()
|
(v as InterfaceImplClassBuilder).stopCounting()
|
||||||
|
|
||||||
writeSyntheticClassMetadata(v)
|
writeSyntheticClassMetadata(v, state)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun done() {
|
override fun done() {
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager;
|
|||||||
import org.jetbrains.kotlin.storage.NotNullLazyValue;
|
import org.jetbrains.kotlin.storage.NotNullLazyValue;
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils;
|
import org.jetbrains.kotlin.types.ErrorUtils;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions;
|
|
||||||
import org.jetbrains.org.objectweb.asm.*;
|
import org.jetbrains.org.objectweb.asm.*;
|
||||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
|
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
|
||||||
import org.jetbrains.org.objectweb.asm.commons.Method;
|
import org.jetbrains.org.objectweb.asm.commons.Method;
|
||||||
@@ -66,12 +65,9 @@ import org.jetbrains.org.objectweb.asm.commons.Method;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
|
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.codegen.JvmCodegenUtil.isJvm8InterfaceMember;
|
||||||
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED;
|
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.*;
|
||||||
import static org.jetbrains.kotlin.resolve.BindingContext.TYPE_ALIAS;
|
|
||||||
import static org.jetbrains.kotlin.resolve.BindingContext.VARIABLE;
|
|
||||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
||||||
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
|
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
|
||||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
|
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
|
||||||
@@ -809,7 +805,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
|
|||||||
|
|
||||||
final ProtoBuf.Class classProto = serializer.classProto(descriptor).build();
|
final ProtoBuf.Class classProto = serializer.classProto(descriptor).build();
|
||||||
|
|
||||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.CLASS, 0, new Function1<AnnotationVisitor, Unit>() {
|
WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.CLASS, 0, new Function1<AnnotationVisitor, Unit>() {
|
||||||
@Override
|
@Override
|
||||||
public Unit invoke(AnnotationVisitor av) {
|
public Unit invoke(AnnotationVisitor av) {
|
||||||
writeAnnotationData(av, serializer, classProto);
|
writeAnnotationData(av, serializer, classProto);
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ class MultifileClassCodegenImpl(
|
|||||||
|
|
||||||
val extraFlags = if (shouldGeneratePartHierarchy) JvmAnnotationNames.METADATA_MULTIFILE_PARTS_INHERIT_FLAG else 0
|
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)
|
val arv = av.visitArray(JvmAnnotationNames.METADATA_DATA_FIELD_NAME)
|
||||||
for (internalName in partInternalNamesSorted) {
|
for (internalName in partInternalNamesSorted) {
|
||||||
arv.visit(null, internalName)
|
arv.visit(null, internalName)
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ class MultifileClassPartCodegen(
|
|||||||
visitEnd()
|
visitEnd()
|
||||||
}
|
}
|
||||||
|
|
||||||
writeSyntheticClassMetadata(this)
|
writeSyntheticClassMetadata(this, state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,7 +180,7 @@ class MultifileClassPartCodegen(
|
|||||||
|
|
||||||
val extraFlags = if (shouldGeneratePartHierarchy) JvmAnnotationNames.METADATA_MULTIFILE_PARTS_INHERIT_FLAG else 0
|
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)
|
AsmUtil.writeAnnotationData(av, serializer, packageProto)
|
||||||
av.visit(JvmAnnotationNames.METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME, facadeClassType.internalName)
|
av.visit(JvmAnnotationNames.METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME, facadeClassType.internalName)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ public class PackagePartCodegen extends MemberCodegen<KtFile> {
|
|||||||
DescriptorSerializer.createTopLevel(new JvmSerializerExtension(v.getSerializationBindings(), state));
|
DescriptorSerializer.createTopLevel(new JvmSerializerExtension(v.getSerializationBindings(), state));
|
||||||
final ProtoBuf.Package packageProto = serializer.packagePartProto(members).build();
|
final ProtoBuf.Package packageProto = serializer.packagePartProto(members).build();
|
||||||
|
|
||||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.FILE_FACADE, 0, new Function1<AnnotationVisitor, Unit>() {
|
WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.FILE_FACADE, 0, new Function1<AnnotationVisitor, Unit>() {
|
||||||
@Override
|
@Override
|
||||||
public Unit invoke(AnnotationVisitor av) {
|
public Unit invoke(AnnotationVisitor av) {
|
||||||
writeAnnotationData(av, serializer, packageProto);
|
writeAnnotationData(av, serializer, packageProto);
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ class PropertyReferenceCodegen(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun generateKotlinMetadataAnnotation() {
|
override fun generateKotlinMetadataAnnotation() {
|
||||||
writeSyntheticClassMetadata(v)
|
writeSyntheticClassMetadata(v, state)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun putInstanceOnStack(receiverValue: (() -> Unit)?): StackValue {
|
fun putInstanceOnStack(receiverValue: (() -> Unit)?): StackValue {
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ public class SamWrapperCodegen {
|
|||||||
);
|
);
|
||||||
cv.visitSource(file.getName(), null);
|
cv.visitSource(file.getName(), null);
|
||||||
|
|
||||||
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv);
|
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv, state);
|
||||||
|
|
||||||
// e.g. ASM type for Function2
|
// e.g. ASM type for Function2
|
||||||
Type functionAsmType = typeMapper.mapType(functionType);
|
Type functionAsmType = typeMapper.mapType(functionType);
|
||||||
|
|||||||
@@ -166,10 +166,8 @@ class GenerationState @JvmOverloads constructor(
|
|||||||
|
|
||||||
val generateParametersMetadata: Boolean = configuration.getBoolean(JVMConfigurationKeys.PARAMETERS_METADATA)
|
val generateParametersMetadata: Boolean = configuration.getBoolean(JVMConfigurationKeys.PARAMETERS_METADATA)
|
||||||
|
|
||||||
val shouldInlineConstVals = run {
|
val languageVersionSettings = configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)
|
||||||
val settings = configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS) ?: LanguageVersionSettingsImpl.DEFAULT
|
val shouldInlineConstVals = languageVersionSettings.supportsFeature(LanguageFeature.InlineConstVals)
|
||||||
settings.supportsFeature(LanguageFeature.InlineConstVals)
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
this.interceptedBuilderFactory = builderFactory
|
this.interceptedBuilderFactory = builderFactory
|
||||||
|
|||||||
+1
-1
@@ -57,7 +57,7 @@ public class MappingClassesForWhenByEnumCodegen {
|
|||||||
generateFields(cb, mappings);
|
generateFields(cb, mappings);
|
||||||
generateInitialization(cb, mappings);
|
generateInitialization(cb, mappings);
|
||||||
|
|
||||||
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb);
|
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb, state);
|
||||||
|
|
||||||
cb.done();
|
cb.done();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.codegen
|
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.JvmAnnotationNames
|
||||||
import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion
|
import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion
|
||||||
import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver
|
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.kotlin.load.kotlin.header.KotlinClassHeader
|
||||||
import org.jetbrains.org.objectweb.asm.AnnotationVisitor
|
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)
|
val av = cb.newAnnotation(JvmAnnotationNames.METADATA_DESC, true)
|
||||||
av.visit(JvmAnnotationNames.METADATA_VERSION_FIELD_NAME, JvmMetadataVersion.INSTANCE.toArray())
|
av.visit(JvmAnnotationNames.METADATA_VERSION_FIELD_NAME, JvmMetadataVersion.INSTANCE.toArray())
|
||||||
av.visit(JvmAnnotationNames.BYTECODE_VERSION_FIELD_NAME, JvmBytecodeBinaryVersion.INSTANCE.toArray())
|
av.visit(JvmAnnotationNames.BYTECODE_VERSION_FIELD_NAME, JvmBytecodeBinaryVersion.INSTANCE.toArray())
|
||||||
av.visit(JvmAnnotationNames.KIND_FIELD_NAME, kind.id)
|
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) {
|
if (flags != 0) {
|
||||||
av.visit(JvmAnnotationNames.METADATA_EXTRA_INT_FIELD_NAME, flags)
|
av.visit(JvmAnnotationNames.METADATA_EXTRA_INT_FIELD_NAME, flags)
|
||||||
}
|
}
|
||||||
@@ -37,8 +47,8 @@ fun writeKotlinMetadata(cb: ClassBuilder, kind: KotlinClassHeader.Kind, extraFla
|
|||||||
av.visitEnd()
|
av.visitEnd()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun writeSyntheticClassMetadata(cb: ClassBuilder) {
|
fun writeSyntheticClassMetadata(cb: ClassBuilder, state: GenerationState) {
|
||||||
writeKotlinMetadata(cb, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0) { _ ->
|
writeKotlinMetadata(cb, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0) { _ ->
|
||||||
// Do nothing
|
// Do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user