Write "hasEnumEntries" flag into metadata when feature enabled

^KT-53929 Fixed
This commit is contained in:
Roman Efremov
2023-01-02 11:47:10 +01:00
parent 3c5e556ba6
commit 14b4cdc7c4
35 changed files with 210 additions and 80 deletions
@@ -284,7 +284,10 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
v.getSerializationBindings().put(METHOD_FOR_FUNCTION, freeLambdaDescriptor, method);
DescriptorSerializer serializer =
DescriptorSerializer.createForLambda(new JvmSerializerExtension(v.getSerializationBindings(), state));
DescriptorSerializer.createForLambda(
new JvmSerializerExtension(v.getSerializationBindings(), state),
state.getLanguageVersionSettings()
);
ProtoBuf.Function.Builder builder = serializer.functionProto(freeLambdaDescriptor);
if (builder == null) return;
@@ -129,7 +129,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
descriptor, extension,
parentCodegen instanceof ImplementationBodyCodegen
? ((ImplementationBodyCodegen) parentCodegen).serializer
: DescriptorSerializer.createTopLevel(extension, null),
: DescriptorSerializer.createTopLevel(extension, state.getLanguageVersionSettings(), null),
state.getLanguageVersionSettings(),
state.getProject()
);
@@ -127,7 +127,8 @@ public class PackagePartCodegen extends MemberCodegen<KtFile> {
List<MemberDescriptor> members = CodegenUtil.getMemberDescriptorsToGenerate(codegen.element, codegen.bindingContext);
JvmSerializerExtension extension = new JvmSerializerExtension(codegen.v.getSerializationBindings(), codegen.state);
DescriptorSerializer serializer = DescriptorSerializer.createTopLevel(extension, null);
DescriptorSerializer serializer = DescriptorSerializer.createTopLevel(
extension, codegen.state.getLanguageVersionSettings(), null);
ProtoBuf.Package.Builder builder = serializer.packagePartProto(codegen.element.getPackageFqName(), members);
extension.serializeJvmPackage(builder, packagePartType);
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.codegen.context.ScriptContext
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.METHOD_FOR_FUNCTION
import org.jetbrains.kotlin.codegen.serialization.JvmSerializerExtension
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
@@ -68,7 +69,10 @@ class ScriptCodegen private constructor(
override fun generateSyntheticPartsAfterBody() {}
override fun generateKotlinMetadataAnnotation() {
val serializer = DescriptorSerializer.create(scriptDescriptor, JvmSerializerExtension(v.serializationBindings, state), null)
val serializer = DescriptorSerializer.create(
scriptDescriptor, JvmSerializerExtension(v.serializationBindings, state), null,
state.configuration.languageVersionSettings,
)
val classProto = serializer.classProto(scriptDescriptor).build()
writeKotlinMetadata(v, state, KotlinClassHeader.Kind.CLASS, false, JvmAnnotationNames.METADATA_SCRIPT_FLAG) { av ->
DescriptorAsmUtil.writeAnnotationData(av, serializer, classProto)
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.backend.common.output.OutputFile
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
import org.jetbrains.kotlin.load.kotlin.loadModuleMapping
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
@@ -49,7 +50,9 @@ fun JvmModuleProtoBuf.Module.Builder.addDataFromCompiledModule(
}
}.orEmpty()
val serializer = DescriptorSerializer.createTopLevel(JvmOptionalAnnotationSerializerExtension(stringTable))
val serializer = DescriptorSerializer.createTopLevel(
JvmOptionalAnnotationSerializerExtension(stringTable), state.configuration.languageVersionSettings,
)
for (descriptor in optionalAnnotationClassDescriptors) {
addOptionalAnnotationClass(serializer.classProto(descriptor))
}
@@ -702,7 +702,9 @@ class CoroutineCodegenForNamedFunction private constructor(
override fun generateKotlinMetadataAnnotation() {
val publicAbi = InlineUtil.isInPublicInlineScope(classDescriptor)
writeKotlinMetadata(v, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, publicAbi, 0) { av ->
val serializer = DescriptorSerializer.createForLambda(JvmSerializerExtension(v.serializationBindings, state))
val serializer = DescriptorSerializer.createForLambda(
JvmSerializerExtension(v.serializationBindings, state), state.languageVersionSettings,
)
val functionProto =
serializer.functionProto(
createFreeFakeLambdaDescriptor(suspendFunctionJvmView, state.typeApproximator)
@@ -143,7 +143,7 @@ class JvmSerializerExtension @JvmOverloads constructor(
for (localVariable in localVariables) {
val propertyDescriptor = createFreeFakeLocalPropertyDescriptor(localVariable, approximator)
val serializer = DescriptorSerializer.createForLambda(this)
val serializer = DescriptorSerializer.createForLambda(this, languageVersionSettings)
proto.addExtension(extension, serializer.propertyProto(propertyDescriptor)?.build() ?: continue)
}
}