Add -X argument to disable generation of @SourceDebugExtension

This will be used in tests in the subsequent commit.
This commit is contained in:
Alexander Udalov
2022-07-17 02:22:11 +02:00
parent 87d3ce6ded
commit 7dad47cd76
31 changed files with 62 additions and 55 deletions
@@ -99,7 +99,7 @@ class ParcelableClinitClassBuilderInterceptorExtension : ClassBuilderInterceptor
super.defineClass(origin, version, access, name, signature, superName, interfaces)
}
override fun done() {
override fun done(generateSmapCopyToAnnotation: Boolean) {
if (!isClinitGenerated && currentClass != null && currentClassName != null) {
val descriptor = bindingContext[BindingContext.CLASS, currentClass]
if (descriptor != null && declarationOrigin.descriptor == descriptor && descriptor.isParcelize) {
@@ -112,7 +112,7 @@ class ParcelableClinitClassBuilderInterceptorExtension : ClassBuilderInterceptor
}
}
super.done()
super.done(generateSmapCopyToAnnotation)
}
override fun newMethod(
@@ -7,34 +7,30 @@ package org.jetbrains.kotlin.android.parcel
import kotlinx.android.parcel.TypeParceler
import org.jetbrains.kotlin.android.parcel.ParcelableResolveExtension.Companion.createMethod
import org.jetbrains.kotlin.android.parcel.serializers.*
import org.jetbrains.kotlin.android.parcel.ParcelableSyntheticComponent.ComponentKind.*
import org.jetbrains.kotlin.android.parcel.serializers.*
import org.jetbrains.kotlin.android.parcel.serializers.ParcelableExtensionBase.Companion.FILE_DESCRIPTOR_FQNAME
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.codegen.*
import org.jetbrains.kotlin.codegen.FunctionGenerationStrategy.CodegenBased
import org.jetbrains.kotlin.codegen.context.ClassContext
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.kotlin.codegen.ExpressionCodegen
import org.jetbrains.kotlin.codegen.FunctionGenerationStrategy.CodegenBased
import org.jetbrains.kotlin.codegen.ImplementationBodyCodegen
import org.jetbrains.kotlin.codegen.OwnerKind
import org.jetbrains.kotlin.codegen.context.ClassContext
import org.jetbrains.kotlin.codegen.writeSyntheticClassMetadata
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorFactory
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.resolve.inline.InlineUtil
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.KotlinType
@@ -320,7 +316,7 @@ open class ParcelableCodegenExtension : ParcelableExtensionBase, ExpressionCodeg
writeNewArrayMethod(codegenForCreator, parcelableClass, parcelableCreatorClassType, creatorClass, parcelerObject)
writeCreateFromParcel(codegenForCreator, parcelableClass, parcelableCreatorClassType, creatorClass, parcelClassType, parcelAsmType, parcelerObject, properties)
classBuilderForCreator.done()
classBuilderForCreator.done(codegen.state.generateSmapCopyToAnnotation)
}
private fun writeCreatorConstructor(codegen: ImplementationBodyCodegen, creatorClass: ClassDescriptor, creatorAsmType: Type) {
@@ -408,4 +404,4 @@ internal fun getTypeParcelers(annotations: Annotations): List<TypeParcelerMappin
}
return serializers
}
}
@@ -78,7 +78,7 @@ abstract class AbstractAndroidOnDestroyClassBuilderInterceptorExtension : ClassB
super.defineClass(origin, version, access, name, signature, superName, interfaces)
}
override fun done() {
override fun done(generateSmapCopyToAnnotation: Boolean) {
if (hasCache && !hasOnDestroy) {
val mv = newMethod(
JvmDeclarationOrigin.NO_ORIGIN, Opcodes.ACC_PUBLIC or Opcodes.ACC_SYNTHETIC, ON_DESTROY_METHOD_NAME, "()V",
@@ -91,7 +91,7 @@ abstract class AbstractAndroidOnDestroyClassBuilderInterceptorExtension : ClassB
mv.visitMaxs(1, 1)
mv.visitEnd()
}
super.done()
super.done(generateSmapCopyToAnnotation)
}
override fun newMethod(
@@ -172,7 +172,7 @@ class JvmAbiClassBuilderInterceptor : ClassBuilderInterceptorExtension {
}
}
override fun done() {
override fun done(generateSmapCopyToAnnotation: Boolean) {
// Remove local or anonymous classes unless they are in the scope of an inline function and
// strip non-inline methods from all other classes.
when {
@@ -185,7 +185,7 @@ class JvmAbiClassBuilderInterceptor : ClassBuilderInterceptorExtension {
abiClassInfo[internalName] = AbiClassInfo.Stripped(methodInfos)
}
}
super.done()
super.done(generateSmapCopyToAnnotation)
}
private val isWhenMappingClass: Boolean
@@ -762,7 +762,7 @@ internal fun createSingletonLambda(
}
writeSyntheticClassMetadata(lambdaClassBuilder, lambdaCodegen.state, false)
lambdaClassBuilder.done()
lambdaClassBuilder.done(lambdaCodegen.state.generateSmapCopyToAnnotation)
return lambdaType
}
@@ -81,7 +81,7 @@ class ParcelizeClinitClassBuilderInterceptorExtension : ClassBuilderInterceptorE
super.defineClass(origin, version, access, name, signature, superName, interfaces)
}
override fun done() {
override fun done(generateSmapCopyToAnnotation: Boolean) {
if (!isClinitGenerated && currentClass != null && currentClassName != null) {
val descriptor = bindingContext[BindingContext.CLASS, currentClass]
if (descriptor != null && declarationOrigin.descriptor == descriptor && descriptor.isParcelize) {
@@ -94,7 +94,7 @@ class ParcelizeClinitClassBuilderInterceptorExtension : ClassBuilderInterceptorE
}
}
super.done()
super.done(generateSmapCopyToAnnotation)
}
override fun newMethod(
@@ -340,7 +340,7 @@ open class ParcelizeCodegenExtension : ParcelizeExtensionBase, ExpressionCodegen
parcelAsmType, parcelerObject, properties
)
classBuilderForCreator.done()
classBuilderForCreator.done(codegen.state.generateSmapCopyToAnnotation)
}
private fun writeCreatorConstructor(codegen: ImplementationBodyCodegen, creatorClass: ClassDescriptor, creatorAsmType: Type) {