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
@@ -115,9 +115,9 @@ public abstract class AbstractClassBuilder implements ClassBuilder {
} }
@Override @Override
public void done() { public void done(boolean generateSmapCopyToAnnotation) {
getVisitor().visitSource(sourceName, debugInfo); getVisitor().visitSource(sourceName, debugInfo);
if (debugInfo != null) { if (generateSmapCopyToAnnotation && debugInfo != null) {
AnnotationVisitor v = AnnotationVisitor v =
getVisitor().visitAnnotation(JvmAnnotationNames.SOURCE_DEBUG_EXTENSION_DESC, false).visitArray("value"); getVisitor().visitAnnotation(JvmAnnotationNames.SOURCE_DEBUG_EXTENSION_DESC, false).visitArray("value");
for (String part : CodegenUtilKt.splitStringConstant(debugInfo)) { for (String part : CodegenUtilKt.splitStringConstant(debugInfo)) {
@@ -57,7 +57,7 @@ public interface ClassBuilder {
@NotNull @NotNull
AnnotationVisitor newAnnotation(@NotNull String desc, boolean visible); AnnotationVisitor newAnnotation(@NotNull String desc, boolean visible);
void done(); void done(boolean generateSmapCopyToAnnotation);
@NotNull @NotNull
ClassVisitor getVisitor(); ClassVisitor getVisitor();
@@ -30,9 +30,9 @@ class ClassBuilderOnDemand(createClassBuilder: () -> ClassBuilder) : DelegatingC
classBuilder() classBuilder()
} }
override fun done() { override fun done(generateSmapCopyToAnnotation: Boolean) {
if (isComputed) { if (isComputed) {
classBuilder().done() classBuilder().done(generateSmapCopyToAnnotation)
} }
} }
} }
@@ -49,9 +49,9 @@ abstract class ClassNameCollectionClassBuilderFactory(
super.defineClass(origin, version, access, name, signature, superName, interfaces) super.defineClass(origin, version, access, name, signature, superName, interfaces)
} }
override fun done() { override fun done(generateSmapCopyToAnnotation: Boolean) {
handleClashingNames(classInternalName, classCreatedFor) handleClashingNames(classInternalName, classCreatedFor)
super.done() super.done(generateSmapCopyToAnnotation)
} }
} }
} }
@@ -75,8 +75,8 @@ public abstract class DelegatingClassBuilder implements ClassBuilder {
} }
@Override @Override
public void done() { public void done(boolean generateSmapCopyToAnnotation) {
getDelegate().done(); getDelegate().done(generateSmapCopyToAnnotation);
} }
@NotNull @NotNull
@@ -47,8 +47,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt; import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt;
import org.jetbrains.kotlin.storage.LockBasedStorageManager; import org.jetbrains.kotlin.storage.LockBasedStorageManager;
import org.jetbrains.kotlin.storage.NotNullLazyValue; import org.jetbrains.kotlin.storage.NotNullLazyValue;
import org.jetbrains.kotlin.types.error.ErrorUtils;
import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.KotlinType;
import org.jetbrains.kotlin.types.error.ErrorUtils;
import org.jetbrains.org.objectweb.asm.Label; import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.MethodVisitor; import org.jetbrains.org.objectweb.asm.MethodVisitor;
import org.jetbrains.org.objectweb.asm.Opcodes; import org.jetbrains.org.objectweb.asm.Opcodes;
@@ -191,7 +191,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
v.visitSMAP(getOrCreateSourceMapper(), !state.getLanguageVersionSettings().supportsFeature(LanguageFeature.CorrectSourceMappingSyntax)); v.visitSMAP(getOrCreateSourceMapper(), !state.getLanguageVersionSettings().supportsFeature(LanguageFeature.CorrectSourceMappingSyntax));
} }
v.done(); v.done(state.getGenerateSmapCopyToAnnotation());
} }
public void genSimpleMember(@NotNull KtDeclaration declaration) { public void genSimpleMember(@NotNull KtDeclaration declaration) {
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.backend.common.CodegenUtil
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext import org.jetbrains.kotlin.codegen.context.FieldOwnerContext
import org.jetbrains.kotlin.codegen.context.MethodContext import org.jetbrains.kotlin.codegen.context.MethodContext
import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.IncrementalCompilation
import org.jetbrains.kotlin.config.JvmAnalysisFlags import org.jetbrains.kotlin.config.JvmAnalysisFlags
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
@@ -345,7 +344,7 @@ class MultifileClassCodegenImpl(
} }
private fun done() { private fun done() {
classBuilder.done() classBuilder.done(state.generateSmapCopyToAnnotation)
if (classBuilder.isComputed) { if (classBuilder.isComputed) {
state.afterIndependentPart() state.afterIndependentPart()
} }
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.codegen;
import kotlin.text.StringsKt; import kotlin.text.StringsKt;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.backend.common.CodegenUtil; import org.jetbrains.kotlin.backend.common.CodegenUtil;
import org.jetbrains.kotlin.backend.common.SamType;
import org.jetbrains.kotlin.codegen.context.ClassContext; import org.jetbrains.kotlin.codegen.context.ClassContext;
import org.jetbrains.kotlin.codegen.context.CodegenContext; import org.jetbrains.kotlin.codegen.context.CodegenContext;
import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.GenerationState;
@@ -38,7 +39,6 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKt;
import org.jetbrains.kotlin.resolve.scopes.MemberScope; import org.jetbrains.kotlin.resolve.scopes.MemberScope;
import org.jetbrains.kotlin.storage.LockBasedStorageManager; import org.jetbrains.kotlin.storage.LockBasedStorageManager;
import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.KotlinType;
import org.jetbrains.kotlin.backend.common.SamType;
import org.jetbrains.kotlin.util.OperatorNameConventions; import org.jetbrains.kotlin.util.OperatorNameConventions;
import org.jetbrains.org.objectweb.asm.Label; import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.MethodVisitor; import org.jetbrains.org.objectweb.asm.MethodVisitor;
@@ -166,7 +166,7 @@ public class SamWrapperCodegen {
generateDelegatesToDefaultImpl(asmType, classDescriptor, samType.getClassDescriptor(), functionCodegen, state); generateDelegatesToDefaultImpl(asmType, classDescriptor, samType.getClassDescriptor(), functionCodegen, state);
} }
cv.done(); cv.done(state.getGenerateSmapCopyToAnnotation());
return asmType; return asmType;
} }
@@ -71,7 +71,7 @@ abstract class SignatureCollectingClassBuilderFactory(
return super.newMethod(origin, access, name, desc, signature, exceptions) return super.newMethod(origin, access, name, desc, signature, exceptions)
} }
override fun done() { override fun done(generateSmapCopyToAnnotation: Boolean) {
for ((signature, elementsAndDescriptors) in signatures.entrySet()) { for ((signature, elementsAndDescriptors) in signatures.entrySet()) {
if (elementsAndDescriptors.size == 1) continue // no clash if (elementsAndDescriptors.size == 1) continue // no clash
handleClashingSignatures(ConflictingJvmDeclarationsData( handleClashingSignatures(ConflictingJvmDeclarationsData(
@@ -82,7 +82,7 @@ abstract class SignatureCollectingClassBuilderFactory(
)) ))
} }
onClassDone(classCreatedFor, classInternalName, signatures) onClassDone(classCreatedFor, classInternalName, signatures)
super.done() super.done(generateSmapCopyToAnnotation)
} }
} }
@@ -656,7 +656,7 @@ private fun generateLambdaForRunSuspend(
writeSyntheticClassMetadata(lambdaBuilder, state, false) writeSyntheticClassMetadata(lambdaBuilder, state, false)
lambdaBuilder.done() lambdaBuilder.done(state.generateSmapCopyToAnnotation)
return lambdaBuilder.thisName return lambdaBuilder.thisName
} }
@@ -729,4 +729,4 @@ fun String.encodedUTF8Size(): Int {
} }
} }
return result return result
} }
@@ -228,7 +228,7 @@ class AnonymousObjectTransformer(
if (continuationClassName == transformationInfo.oldClassName) { if (continuationClassName == transformationInfo.oldClassName) {
coroutineTransformer.registerClassBuilder(continuationClassName) coroutineTransformer.registerClassBuilder(continuationClassName)
} else { } else {
classBuilder.done() classBuilder.done(state.generateSmapCopyToAnnotation)
} }
return transformationResult return transformationResult
@@ -207,7 +207,7 @@ class MethodInliner(
} }
for (classBuilder in childInliningContext.continuationBuilders.values) { for (classBuilder in childInliningContext.continuationBuilders.values) {
classBuilder.done() classBuilder.done(inliningContext.state.generateSmapCopyToAnnotation)
} }
} else { } else {
result.addNotChangedClass(oldClassName) result.addNotChangedClass(oldClassName)
@@ -104,7 +104,7 @@ class WhenMappingTransformer(
transformedClinit.signature, transformedClinit.exceptions.toTypedArray() transformedClinit.signature, transformedClinit.exceptions.toTypedArray()
) )
transformedClinit.accept(result) transformedClinit.accept(result)
classBuilder.done() classBuilder.done(state.generateSmapCopyToAnnotation)
return transformationResult return transformationResult
} }
@@ -65,7 +65,7 @@ class SamWrapperTransformer(transformationInfo: SamWrapperTransformationInfo, pr
} }
}, ClassReader.SKIP_FRAMES) }, ClassReader.SKIP_FRAMES)
classBuilder.done() classBuilder.done(inliningContext.state.generateSmapCopyToAnnotation)
return transformationResult return transformationResult
} }
@@ -142,7 +142,7 @@ class CoroutineTransformer(
} }
fun replaceFakesWithReals(node: MethodNode) { fun replaceFakesWithReals(node: MethodNode) {
findFakeContinuationConstructorClassName(node)?.let(::unregisterClassBuilder)?.let(ClassBuilder::done) findFakeContinuationConstructorClassName(node)?.let(::unregisterClassBuilder)?.done(state.generateSmapCopyToAnnotation)
replaceFakeContinuationsWithRealOnes( replaceFakeContinuationsWithRealOnes(
node, if (!inliningContext.isContinuation) getLastParameterIndex(node.desc, node.access) else 0 node, if (!inliningContext.isContinuation) getLastParameterIndex(node.desc, node.access) else 0
) )
@@ -322,6 +322,7 @@ class GenerationState private constructor(
val unifiedNullChecks: Boolean = val unifiedNullChecks: Boolean =
languageVersionSettings.apiVersion >= ApiVersion.KOTLIN_1_4 && languageVersionSettings.apiVersion >= ApiVersion.KOTLIN_1_4 &&
!configuration.getBoolean(JVMConfigurationKeys.NO_UNIFIED_NULL_CHECKS) !configuration.getBoolean(JVMConfigurationKeys.NO_UNIFIED_NULL_CHECKS)
val generateSmapCopyToAnnotation: Boolean = !configuration.getBoolean(JVMConfigurationKeys.NO_SOURCE_DEBUG_EXTENSION)
val functionsWithInlineClassReturnTypesMangled: Boolean = val functionsWithInlineClassReturnTypesMangled: Boolean =
languageVersionSettings.supportsFeature(LanguageFeature.MangleClassMembersReturningInlineClasses) languageVersionSettings.supportsFeature(LanguageFeature.MangleClassMembersReturningInlineClasses)
val shouldValidateIr = configuration.getBoolean(JVMConfigurationKeys.VALIDATE_IR) val shouldValidateIr = configuration.getBoolean(JVMConfigurationKeys.VALIDATE_IR)
@@ -95,7 +95,7 @@ class SignatureDumpingBuilderFactory(
return super.newField(origin, access, name, desc, signature, value) return super.newField(origin, access, name, desc, signature, value)
} }
override fun done() { override fun done(generateSmapCopyToAnnotation: Boolean) {
if (firstClassWritten) outputStream.append(",\n") else firstClassWritten = true if (firstClassWritten) outputStream.append(",\n") else firstClassWritten = true
outputStream.append("\t{\n") outputStream.append("\t{\n")
origin.descriptor?.let { origin.descriptor?.let {
@@ -122,7 +122,7 @@ class SignatureDumpingBuilderFactory(
}} }}
outputStream.append("\n\t\t]\n\t}") outputStream.append("\n\t\t]\n\t}")
super.done() super.done(generateSmapCopyToAnnotation)
} }
} }
} }
@@ -148,4 +148,4 @@ private fun jsonEscape(value: String): String = buildString {
} }
} }
} }
} }
@@ -60,7 +60,7 @@ public class MappingClassesForWhenByEnumCodegen {
boolean publicAbi = mappings.stream().anyMatch(WhenByEnumsMapping::isPublicAbi); boolean publicAbi = mappings.stream().anyMatch(WhenByEnumsMapping::isPublicAbi);
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb, state, publicAbi); WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb, state, publicAbi);
cb.done(); cb.done(state.getGenerateSmapCopyToAnnotation());
} }
private static void generateFields(@NotNull ClassBuilder cb, @NotNull List<WhenByEnumsMapping> mappings) { private static void generateFields(@NotNull ClassBuilder cb, @NotNull List<WhenByEnumsMapping> mappings) {
@@ -431,6 +431,12 @@ Also sets `-jvm-target` value equal to the selected JDK version"""
) )
var noUnifiedNullChecks: Boolean by FreezableVar(false) var noUnifiedNullChecks: Boolean by FreezableVar(false)
@Argument(
value = "-Xno-source-debug-extension",
description = "Do not generate @kotlin.jvm.internal.SourceDebugExtension annotation on a class with the copy of SMAP"
)
var noSourceDebugExtension: Boolean by FreezableVar(false)
@Argument( @Argument(
value = "-Xprofile", value = "-Xprofile",
valueDescription = "<profilerPath:command:outputDir>", valueDescription = "<profilerPath:command:outputDir>",
@@ -193,11 +193,11 @@ public class StubClassBuilder extends AbstractClassBuilder {
} }
@Override @Override
public void done() { public void done(boolean generateSmapCopyToAnnotation) {
if (!isPackageClass) { if (!isPackageClass) {
StubElement pop = parentStack.pop(); StubElement pop = parentStack.pop();
assert pop == v.getResult() : "parentStack: got " + pop + ", expected " + v.getResult(); assert pop == v.getResult() : "parentStack: got " + pop + ", expected " + v.getResult();
} }
super.done(); super.done(generateSmapCopyToAnnotation);
} }
} }
@@ -307,6 +307,7 @@ fun CompilerConfiguration.configureAdvancedJvmOptions(arguments: K2JVMCompilerAr
put(JVMConfigurationKeys.NO_KOTLIN_NOTHING_VALUE_EXCEPTION, arguments.noKotlinNothingValueException) put(JVMConfigurationKeys.NO_KOTLIN_NOTHING_VALUE_EXCEPTION, arguments.noKotlinNothingValueException)
put(JVMConfigurationKeys.NO_RESET_JAR_TIMESTAMPS, arguments.noResetJarTimestamps) put(JVMConfigurationKeys.NO_RESET_JAR_TIMESTAMPS, arguments.noResetJarTimestamps)
put(JVMConfigurationKeys.NO_UNIFIED_NULL_CHECKS, arguments.noUnifiedNullChecks) put(JVMConfigurationKeys.NO_UNIFIED_NULL_CHECKS, arguments.noUnifiedNullChecks)
put(JVMConfigurationKeys.NO_SOURCE_DEBUG_EXTENSION, arguments.noSourceDebugExtension)
put(JVMConfigurationKeys.SERIALIZE_IR, JvmSerializeIrMode.fromString(arguments.serializeIr)) put(JVMConfigurationKeys.SERIALIZE_IR, JvmSerializeIrMode.fromString(arguments.serializeIr))
@@ -133,6 +133,9 @@ public class JVMConfigurationKeys {
public static final CompilerConfigurationKey<Boolean> NO_UNIFIED_NULL_CHECKS = public static final CompilerConfigurationKey<Boolean> NO_UNIFIED_NULL_CHECKS =
CompilerConfigurationKey.create("Use pre-1.4 exception types in null checks instead of java.lang.NPE"); CompilerConfigurationKey.create("Use pre-1.4 exception types in null checks instead of java.lang.NPE");
public static final CompilerConfigurationKey<Boolean> NO_SOURCE_DEBUG_EXTENSION =
CompilerConfigurationKey.create("Do not generate @kotlin.jvm.internal.SourceDebugExtension annotation on a class with the copy of SMAP");
public static final CompilerConfigurationKey<Boolean> USE_OLD_INLINE_CLASSES_MANGLING_SCHEME = public static final CompilerConfigurationKey<Boolean> USE_OLD_INLINE_CLASSES_MANGLING_SCHEME =
CompilerConfigurationKey.create("Use old, 1.4 version of inline classes mangling scheme"); CompilerConfigurationKey.create("Use old, 1.4 version of inline classes mangling scheme");
@@ -215,7 +215,7 @@ class ClassCodegen private constructor(
generateInnerAndOuterClasses() generateInnerAndOuterClasses()
visitor.done() visitor.done(state.generateSmapCopyToAnnotation)
jvmSignatureClashDetector.reportErrors(classOrigin) jvmSignatureClashDetector.reportErrors(classOrigin)
} }
+1
View File
@@ -101,6 +101,7 @@ where advanced options include:
-Xno-param-assertions Don't generate not-null assertions on parameters of methods accessible from Java -Xno-param-assertions Don't generate not-null assertions on parameters of methods accessible from Java
-Xno-receiver-assertions Don't generate not-null assertion for extension receiver arguments of platform types -Xno-receiver-assertions Don't generate not-null assertion for extension receiver arguments of platform types
-Xno-reset-jar-timestamps Do not reset jar entry timestamps to a fixed date -Xno-reset-jar-timestamps Do not reset jar entry timestamps to a fixed date
-Xno-source-debug-extension Do not generate @kotlin.jvm.internal.SourceDebugExtension annotation on a class with the copy of SMAP
-Xno-unified-null-checks Use pre-1.4 exception types in null checks instead of java.lang.NPE. See KT-22275 for more details -Xno-unified-null-checks Use pre-1.4 exception types in null checks instead of java.lang.NPE. See KT-22275 for more details
-Xnullability-annotations=@<fq.name>:{ignore/strict/warn} -Xnullability-annotations=@<fq.name>:{ignore/strict/warn}
Specify behavior for specific Java nullability annotations (provided with fully qualified package name) Specify behavior for specific Java nullability annotations (provided with fully qualified package name)
@@ -99,7 +99,7 @@ class ParcelableClinitClassBuilderInterceptorExtension : ClassBuilderInterceptor
super.defineClass(origin, version, access, name, signature, superName, interfaces) super.defineClass(origin, version, access, name, signature, superName, interfaces)
} }
override fun done() { override fun done(generateSmapCopyToAnnotation: Boolean) {
if (!isClinitGenerated && currentClass != null && currentClassName != null) { if (!isClinitGenerated && currentClass != null && currentClassName != null) {
val descriptor = bindingContext[BindingContext.CLASS, currentClass] val descriptor = bindingContext[BindingContext.CLASS, currentClass]
if (descriptor != null && declarationOrigin.descriptor == descriptor && descriptor.isParcelize) { if (descriptor != null && declarationOrigin.descriptor == descriptor && descriptor.isParcelize) {
@@ -112,7 +112,7 @@ class ParcelableClinitClassBuilderInterceptorExtension : ClassBuilderInterceptor
} }
} }
super.done() super.done(generateSmapCopyToAnnotation)
} }
override fun newMethod( override fun newMethod(
@@ -7,34 +7,30 @@ package org.jetbrains.kotlin.android.parcel
import kotlinx.android.parcel.TypeParceler import kotlinx.android.parcel.TypeParceler
import org.jetbrains.kotlin.android.parcel.ParcelableResolveExtension.Companion.createMethod 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.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.android.parcel.serializers.ParcelableExtensionBase.Companion.FILE_DESCRIPTOR_FQNAME
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.codegen.* 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.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.descriptors.* 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.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl
import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorFactory 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.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.resolve.inline.InlineUtil 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.diagnostics.JvmDeclarationOriginKind
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
@@ -320,7 +316,7 @@ open class ParcelableCodegenExtension : ParcelableExtensionBase, ExpressionCodeg
writeNewArrayMethod(codegenForCreator, parcelableClass, parcelableCreatorClassType, creatorClass, parcelerObject) writeNewArrayMethod(codegenForCreator, parcelableClass, parcelableCreatorClassType, creatorClass, parcelerObject)
writeCreateFromParcel(codegenForCreator, parcelableClass, parcelableCreatorClassType, creatorClass, parcelClassType, parcelAsmType, parcelerObject, properties) 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) { private fun writeCreatorConstructor(codegen: ImplementationBodyCodegen, creatorClass: ClassDescriptor, creatorAsmType: Type) {
@@ -408,4 +404,4 @@ internal fun getTypeParcelers(annotations: Annotations): List<TypeParcelerMappin
} }
return serializers return serializers
} }
@@ -78,7 +78,7 @@ abstract class AbstractAndroidOnDestroyClassBuilderInterceptorExtension : ClassB
super.defineClass(origin, version, access, name, signature, superName, interfaces) super.defineClass(origin, version, access, name, signature, superName, interfaces)
} }
override fun done() { override fun done(generateSmapCopyToAnnotation: Boolean) {
if (hasCache && !hasOnDestroy) { if (hasCache && !hasOnDestroy) {
val mv = newMethod( val mv = newMethod(
JvmDeclarationOrigin.NO_ORIGIN, Opcodes.ACC_PUBLIC or Opcodes.ACC_SYNTHETIC, ON_DESTROY_METHOD_NAME, "()V", 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.visitMaxs(1, 1)
mv.visitEnd() mv.visitEnd()
} }
super.done() super.done(generateSmapCopyToAnnotation)
} }
override fun newMethod( 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 // Remove local or anonymous classes unless they are in the scope of an inline function and
// strip non-inline methods from all other classes. // strip non-inline methods from all other classes.
when { when {
@@ -185,7 +185,7 @@ class JvmAbiClassBuilderInterceptor : ClassBuilderInterceptorExtension {
abiClassInfo[internalName] = AbiClassInfo.Stripped(methodInfos) abiClassInfo[internalName] = AbiClassInfo.Stripped(methodInfos)
} }
} }
super.done() super.done(generateSmapCopyToAnnotation)
} }
private val isWhenMappingClass: Boolean private val isWhenMappingClass: Boolean
@@ -762,7 +762,7 @@ internal fun createSingletonLambda(
} }
writeSyntheticClassMetadata(lambdaClassBuilder, lambdaCodegen.state, false) writeSyntheticClassMetadata(lambdaClassBuilder, lambdaCodegen.state, false)
lambdaClassBuilder.done() lambdaClassBuilder.done(lambdaCodegen.state.generateSmapCopyToAnnotation)
return lambdaType return lambdaType
} }
@@ -81,7 +81,7 @@ class ParcelizeClinitClassBuilderInterceptorExtension : ClassBuilderInterceptorE
super.defineClass(origin, version, access, name, signature, superName, interfaces) super.defineClass(origin, version, access, name, signature, superName, interfaces)
} }
override fun done() { override fun done(generateSmapCopyToAnnotation: Boolean) {
if (!isClinitGenerated && currentClass != null && currentClassName != null) { if (!isClinitGenerated && currentClass != null && currentClassName != null) {
val descriptor = bindingContext[BindingContext.CLASS, currentClass] val descriptor = bindingContext[BindingContext.CLASS, currentClass]
if (descriptor != null && declarationOrigin.descriptor == descriptor && descriptor.isParcelize) { if (descriptor != null && declarationOrigin.descriptor == descriptor && descriptor.isParcelize) {
@@ -94,7 +94,7 @@ class ParcelizeClinitClassBuilderInterceptorExtension : ClassBuilderInterceptorE
} }
} }
super.done() super.done(generateSmapCopyToAnnotation)
} }
override fun newMethod( override fun newMethod(
@@ -340,7 +340,7 @@ open class ParcelizeCodegenExtension : ParcelizeExtensionBase, ExpressionCodegen
parcelAsmType, parcelerObject, properties parcelAsmType, parcelerObject, properties
) )
classBuilderForCreator.done() classBuilderForCreator.done(codegen.state.generateSmapCopyToAnnotation)
} }
private fun writeCreatorConstructor(codegen: ImplementationBodyCodegen, creatorClass: ClassDescriptor, creatorAsmType: Type) { private fun writeCreatorConstructor(codegen: ImplementationBodyCodegen, creatorClass: ClassDescriptor, creatorAsmType: Type) {