JVM: reduce usages of GenerationState in favor of JvmBackendConfig
To help in decoupling JVM IR from the old JVM backend.
This commit is contained in:
committed by
Space Team
parent
c3010dd599
commit
72b5123fc8
@@ -295,7 +295,7 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
||||
|
||||
boolean publicAbi = InlineUtil.isInPublicInlineScope(frontendFunDescriptor);
|
||||
|
||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, publicAbi, 0, av -> {
|
||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, state.getConfig(), KotlinClassHeader.Kind.SYNTHETIC_CLASS, publicAbi, 0, av -> {
|
||||
writeAnnotationData(av, serializer, functionProto);
|
||||
return Unit.INSTANCE;
|
||||
});
|
||||
|
||||
@@ -79,7 +79,7 @@ class CodeFragmentCodegen private constructor(
|
||||
}
|
||||
|
||||
override fun generateKotlinMetadataAnnotation() {
|
||||
writeSyntheticClassMetadata(v, state, false)
|
||||
writeSyntheticClassMetadata(v, state.config, false)
|
||||
}
|
||||
|
||||
private fun genConstructor() {
|
||||
|
||||
@@ -43,7 +43,6 @@ import org.jetbrains.kotlin.codegen.when.SwitchCodegen;
|
||||
import org.jetbrains.kotlin.codegen.when.SwitchCodegenProvider;
|
||||
import org.jetbrains.kotlin.config.ApiVersion;
|
||||
import org.jetbrains.kotlin.config.JVMAssertionsMode;
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
|
||||
import org.jetbrains.kotlin.config.LanguageFeature;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor;
|
||||
@@ -2662,7 +2661,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
||||
CallableMethod method = typeMapper.mapToCallableMethod(fd, superCall, null, resolvedCall);
|
||||
|
||||
if (method.getAsmMethod().getName().contains("-") &&
|
||||
!state.getConfiguration().getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME)
|
||||
!state.getConfig().getUseOldManglingSchemeForFunctionsWithInlineClassesInSignatures()
|
||||
) {
|
||||
Boolean classFileContainsMethod =
|
||||
InlineClassesCodegenUtilKt.classFileContainsMethod(fd, state, method.getAsmMethod());
|
||||
@@ -2890,7 +2889,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
||||
|
||||
JvmMethodSignature signature = typeMapper.mapSignatureWithGeneric(functionDescriptor, sourceCompiler.getContext().getContextKind());
|
||||
if (signature.getAsmMethod().getName().contains("-") &&
|
||||
!state.getConfiguration().getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME)
|
||||
!state.getConfig().getUseOldManglingSchemeForFunctionsWithInlineClassesInSignatures()
|
||||
) {
|
||||
Boolean classFileContainsMethod =
|
||||
InlineClassesCodegenUtilKt.classFileContainsMethod(functionDescriptor, state, signature.getAsmMethod());
|
||||
|
||||
@@ -309,7 +309,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
|
||||
boolean publicAbi = InlineUtil.isInPublicInlineScope(descriptor);
|
||||
|
||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.CLASS, publicAbi, 0, av -> {
|
||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, state.getConfig(), KotlinClassHeader.Kind.CLASS, publicAbi, 0, av -> {
|
||||
writeAnnotationData(av, serializer, classProto);
|
||||
return Unit.INSTANCE;
|
||||
});
|
||||
|
||||
@@ -140,7 +140,7 @@ class InterfaceImplBodyCodegen(
|
||||
override fun generateKotlinMetadataAnnotation() {
|
||||
(v as InterfaceImplClassBuilder).stopCounting()
|
||||
|
||||
writeSyntheticClassMetadata(v, state, false)
|
||||
writeSyntheticClassMetadata(v, state.config, false)
|
||||
}
|
||||
|
||||
override fun done() {
|
||||
|
||||
@@ -390,7 +390,7 @@ class MultifileClassCodegenImpl(
|
||||
facadeClassType: Type,
|
||||
kotlinPackageFqName: FqName
|
||||
) {
|
||||
writeKotlinMetadata(classBuilder, state, KotlinClassHeader.Kind.MULTIFILE_CLASS, false, flags) { av ->
|
||||
writeKotlinMetadata(classBuilder, state.config, KotlinClassHeader.Kind.MULTIFILE_CLASS, false, flags) { av ->
|
||||
val arv = av.visitArray(JvmAnnotationNames.METADATA_DATA_FIELD_NAME)
|
||||
for (internalName in partInternalNames) {
|
||||
arv.visit(null, internalName)
|
||||
|
||||
@@ -96,7 +96,7 @@ class MultifileClassPartCodegen(
|
||||
|
||||
val extraFlags = if (shouldGeneratePartHierarchy) JvmAnnotationNames.METADATA_MULTIFILE_PARTS_INHERIT_FLAG else 0
|
||||
|
||||
writeKotlinMetadata(v, state, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART, false, extraFlags) { av ->
|
||||
writeKotlinMetadata(v, state.config, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART, false, extraFlags) { av ->
|
||||
DescriptorAsmUtil.writeAnnotationData(av, serializer, packageProto)
|
||||
av.visit(JvmAnnotationNames.METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME, facadeClassType.internalName)
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ public class PackagePartCodegen extends MemberCodegen<KtFile> {
|
||||
protected void generateKotlinMetadataAnnotation() {
|
||||
Pair<DescriptorSerializer, ProtoBuf.Package> serializedPart = serializePackagePartMembers(this, packagePartType);
|
||||
|
||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, state, KotlinClassHeader.Kind.FILE_FACADE, false, 0, av -> {
|
||||
WriteAnnotationUtilKt.writeKotlinMetadata(v, state.getConfig(), KotlinClassHeader.Kind.FILE_FACADE, false, 0, av -> {
|
||||
writeAnnotationData(av, serializedPart.getFirst(), serializedPart.getSecond());
|
||||
|
||||
FqName kotlinPackageFqName = element.getPackageFqName();
|
||||
|
||||
@@ -210,7 +210,7 @@ class PropertyReferenceCodegen(
|
||||
}
|
||||
|
||||
override fun generateKotlinMetadataAnnotation() {
|
||||
writeSyntheticClassMetadata(v, state, InlineUtil.isInPublicInlineScope(classDescriptor))
|
||||
writeSyntheticClassMetadata(v, state.config, InlineUtil.isInPublicInlineScope(classDescriptor))
|
||||
}
|
||||
|
||||
fun putInstanceOnStack(receiverValue: StackValue?): StackValue {
|
||||
|
||||
@@ -138,7 +138,7 @@ public class SamWrapperCodegen {
|
||||
);
|
||||
cv.visitSource(file.getName(), null);
|
||||
|
||||
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv, state, isInsideInline);
|
||||
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv, state.getConfig(), isInsideInline);
|
||||
|
||||
generateInnerClassInformation(file, asmType, cv);
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ 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
|
||||
@@ -71,10 +70,10 @@ class ScriptCodegen private constructor(
|
||||
override fun generateKotlinMetadataAnnotation() {
|
||||
val serializer = DescriptorSerializer.create(
|
||||
scriptDescriptor, JvmSerializerExtension(v.serializationBindings, state), null,
|
||||
state.configuration.languageVersionSettings,
|
||||
state.config.languageVersionSettings,
|
||||
)
|
||||
val classProto = serializer.classProto(scriptDescriptor).build()
|
||||
writeKotlinMetadata(v, state, KotlinClassHeader.Kind.CLASS, false, JvmAnnotationNames.METADATA_SCRIPT_FLAG) { av ->
|
||||
writeKotlinMetadata(v, state.config, KotlinClassHeader.Kind.CLASS, false, JvmAnnotationNames.METADATA_SCRIPT_FLAG) { av ->
|
||||
DescriptorAsmUtil.writeAnnotationData(av, serializer, classProto)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ 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
|
||||
@@ -51,7 +50,7 @@ fun JvmModuleProtoBuf.Module.Builder.addDataFromCompiledModule(
|
||||
}.orEmpty()
|
||||
|
||||
val serializer = DescriptorSerializer.createTopLevel(
|
||||
JvmOptionalAnnotationSerializerExtension(stringTable), state.configuration.languageVersionSettings,
|
||||
JvmOptionalAnnotationSerializerExtension(stringTable), state.config.languageVersionSettings,
|
||||
)
|
||||
for (descriptor in optionalAnnotationClassDescriptors) {
|
||||
addOptionalAnnotationClass(serializer.classProto(descriptor))
|
||||
|
||||
@@ -674,7 +674,7 @@ private fun generateLambdaForRunSuspend(
|
||||
visitEnd()
|
||||
}
|
||||
|
||||
writeSyntheticClassMetadata(lambdaBuilder, state, false)
|
||||
writeSyntheticClassMetadata(lambdaBuilder, state.config, false)
|
||||
|
||||
lambdaBuilder.done(state.config.generateSmapCopyToAnnotation)
|
||||
return lambdaBuilder.thisName
|
||||
|
||||
@@ -701,7 +701,7 @@ class CoroutineCodegenForNamedFunction private constructor(
|
||||
|
||||
override fun generateKotlinMetadataAnnotation() {
|
||||
val publicAbi = InlineUtil.isInPublicInlineScope(classDescriptor)
|
||||
writeKotlinMetadata(v, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, publicAbi, 0) { av ->
|
||||
writeKotlinMetadata(v, state.config, KotlinClassHeader.Kind.SYNTHETIC_CLASS, publicAbi, 0) { av ->
|
||||
val serializer = DescriptorSerializer.createForLambda(
|
||||
JvmSerializerExtension(v.serializationBindings, state), state.languageVersionSettings,
|
||||
)
|
||||
|
||||
+1
-1
@@ -242,7 +242,7 @@ class AnonymousObjectTransformer(
|
||||
val publicAbi = inliningContext.callSiteInfo.isInPublicInlineScope
|
||||
writeKotlinMetadata(
|
||||
classBuilder,
|
||||
state,
|
||||
state.config,
|
||||
header.kind,
|
||||
publicAbi,
|
||||
header.extraInt and JvmAnnotationNames.METADATA_PUBLIC_ABI_FLAG.inv()
|
||||
|
||||
+5
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.codegen.inline
|
||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.codegen.*
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.codegen.state.JvmBackendConfig
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
@@ -27,9 +28,12 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
||||
import org.jetbrains.org.objectweb.asm.tree.FieldInsnNode
|
||||
|
||||
class PsiInlineIntrinsicsSupport(
|
||||
override val state: GenerationState,
|
||||
private val state: GenerationState,
|
||||
private val reportErrorsOn: KtElement,
|
||||
) : ReifiedTypeInliner.IntrinsicsSupport<KotlinType> {
|
||||
override val config: JvmBackendConfig
|
||||
get() = state.config
|
||||
|
||||
override fun putClassInstance(v: InstructionAdapter, type: KotlinType) {
|
||||
DescriptorAsmUtil.putJavaLangClassInstance(v, state.typeMapper.mapType(type), type, state.typeMapper)
|
||||
}
|
||||
|
||||
+1
-2
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.codegen.context.*
|
||||
import org.jetbrains.kotlin.codegen.coroutines.getOrCreateJvmSuspendFunctionView
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.incremental.KotlinLookupLocation
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -223,7 +222,7 @@ class PsiSourceCompilerForInline(
|
||||
// This is all available in the `Callable` passed to `PsiInlineCodegen.genCallInner`, but it's not forwarded through the inliner...
|
||||
var result = state.typeMapper.mapDefaultMethod(functionDescriptor, context.contextKind)
|
||||
if (result.name.contains("-") &&
|
||||
!state.configuration.getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME) &&
|
||||
!state.config.useOldManglingSchemeForFunctionsWithInlineClassesInSignatures &&
|
||||
classFileContainsMethod(functionDescriptor, state, result) == false
|
||||
) {
|
||||
state.typeMapper.useOldManglingRulesForFunctionAcceptingInlineClass = true
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.codegen.generateIsCheck
|
||||
import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods
|
||||
import org.jetbrains.kotlin.codegen.optimization.common.intConstant
|
||||
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.codegen.state.JvmBackendConfig
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
|
||||
@@ -56,7 +56,7 @@ class ReifiedTypeInliner<KT : KotlinTypeMarker>(
|
||||
|
||||
|
||||
interface IntrinsicsSupport<KT : KotlinTypeMarker> {
|
||||
val state: GenerationState
|
||||
val config: JvmBackendConfig
|
||||
|
||||
fun putClassInstance(v: InstructionAdapter, type: KT)
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ private fun <KT : KotlinTypeMarker> TypeSystemCommonBackendContext.generateTypeO
|
||||
intrinsicsSupport.reportSuspendTypeUnsupported()
|
||||
}
|
||||
|
||||
if (intrinsicsSupport.state.config.stableTypeOf) {
|
||||
if (intrinsicsSupport.config.stableTypeOf) {
|
||||
if (intrinsicsSupport.isMutableCollectionType(type)) {
|
||||
v.invokestatic(REFLECTION, "mutableCollectionType", Type.getMethodDescriptor(K_TYPE, K_TYPE), false)
|
||||
} else if (type.typeConstructor().isNothingConstructor()) {
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ public class MappingClassesForWhenByEnumCodegen {
|
||||
generateInitialization(cb, mappings);
|
||||
|
||||
boolean publicAbi = mappings.stream().anyMatch(WhenByEnumsMapping::isPublicAbi);
|
||||
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb, state, publicAbi);
|
||||
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb, state.getConfig(), publicAbi);
|
||||
|
||||
cb.done(state.getConfig().getGenerateSmapCopyToAnnotation());
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.codegen
|
||||
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.codegen.state.JvmBackendConfig
|
||||
import org.jetbrains.kotlin.config.JvmAnalysisFlags
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
@@ -26,19 +26,19 @@ import org.jetbrains.org.objectweb.asm.AnnotationVisitor
|
||||
|
||||
fun writeKotlinMetadata(
|
||||
cb: ClassBuilder,
|
||||
state: GenerationState,
|
||||
config: JvmBackendConfig,
|
||||
kind: KotlinClassHeader.Kind,
|
||||
publicAbi: Boolean,
|
||||
extraFlags: Int,
|
||||
action: (AnnotationVisitor) -> Unit
|
||||
) {
|
||||
val av = cb.newAnnotation(JvmAnnotationNames.METADATA_DESC, true)
|
||||
av.visit(JvmAnnotationNames.METADATA_VERSION_FIELD_NAME, state.config.metadataVersion.toArray())
|
||||
if (!state.config.metadataVersion.isAtLeast(1, 5, 0)) {
|
||||
av.visit(JvmAnnotationNames.METADATA_VERSION_FIELD_NAME, config.metadataVersion.toArray())
|
||||
if (!config.metadataVersion.isAtLeast(1, 5, 0)) {
|
||||
av.visit("bv", JvmBytecodeBinaryVersion.INSTANCE.toArray())
|
||||
}
|
||||
av.visit(JvmAnnotationNames.KIND_FIELD_NAME, kind.id)
|
||||
var flags = extraFlags or generateLanguageVersionSettingsBasedMetadataFlags(state.languageVersionSettings)
|
||||
var flags = extraFlags or generateLanguageVersionSettingsBasedMetadataFlags(config.languageVersionSettings)
|
||||
if (publicAbi) {
|
||||
flags = flags or JvmAnnotationNames.METADATA_PUBLIC_ABI_FLAG
|
||||
}
|
||||
@@ -49,8 +49,8 @@ fun writeKotlinMetadata(
|
||||
av.visitEnd()
|
||||
}
|
||||
|
||||
fun writeSyntheticClassMetadata(cb: ClassBuilder, state: GenerationState, publicAbi: Boolean) {
|
||||
writeKotlinMetadata(cb, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, publicAbi, 0) { _ ->
|
||||
fun writeSyntheticClassMetadata(cb: ClassBuilder, config: JvmBackendConfig, publicAbi: Boolean) {
|
||||
writeKotlinMetadata(cb, config, KotlinClassHeader.Kind.SYNTHETIC_CLASS, publicAbi, 0) { _ ->
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user