JVM_IR: fix nullability annotations on synthetic marker parameters
Synthetic marker parameters (of type Lkotlin/jvm/internal/DefaultConstructorMarker;) don't have annotations (including nullability annotations). Also, for constructor accessors corresponding parameter should be nullable (since we pass 'null' as an argument there). KT-36966
This commit is contained in:
@@ -18,6 +18,7 @@ interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin {
|
||||
object LAMBDA_IMPL : IrDeclarationOriginImpl("LAMBDA_IMPL")
|
||||
object FUNCTION_REFERENCE_IMPL : IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL", isSynthetic = true)
|
||||
object SYNTHETIC_ACCESSOR : IrDeclarationOriginImpl("SYNTHETIC_ACCESSOR", isSynthetic = true)
|
||||
object SYNTHETIC_MARKER_PARAMETER : IrDeclarationOriginImpl("SYNTHETIC_MARKER_PARAMETER", isSynthetic = true)
|
||||
object TO_ARRAY : IrDeclarationOriginImpl("TO_ARRAY")
|
||||
object JVM_STATIC_WRAPPER : IrDeclarationOriginImpl("JVM_STATIC_WRAPPER")
|
||||
object JVM_OVERLOADS_WRAPPER : IrDeclarationOriginImpl("JVM_OVERLOADS_WRAPPER")
|
||||
|
||||
+10
-4
@@ -12,7 +12,10 @@ import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.suspendFunctionOriginal
|
||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||
import org.jetbrains.kotlin.codegen.inline.*
|
||||
import org.jetbrains.kotlin.codegen.inline.MethodBodyVisitor
|
||||
import org.jetbrains.kotlin.codegen.inline.SMAP
|
||||
import org.jetbrains.kotlin.codegen.inline.SMAPAndMethodNode
|
||||
import org.jetbrains.kotlin.codegen.inline.wrapWithMaxLocalCalc
|
||||
import org.jetbrains.kotlin.codegen.mangleNameIfNeeded
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.codegen.visitAnnotableParameterCount
|
||||
@@ -23,7 +26,6 @@ import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.load.java.JavaVisibilities
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.annotations.JVM_THROWS_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_SYNTHETIC_ANNOTATION_FQ_NAME
|
||||
@@ -237,7 +239,7 @@ private fun generateParameterAnnotations(
|
||||
else -> iterator.next()
|
||||
}
|
||||
|
||||
if (!kind.isSkippedInGenericSignature) {
|
||||
if (annotated != null && !kind.isSkippedInGenericSignature && !annotated.isSyntheticMarkerParameter()) {
|
||||
object : AnnotationCodegen(innerClassConsumer, context) {
|
||||
override fun visitAnnotation(descr: String?, visible: Boolean): AnnotationVisitor {
|
||||
return mv.visitParameterAnnotation(
|
||||
@@ -253,11 +255,15 @@ private fun generateParameterAnnotations(
|
||||
path, descr, visible
|
||||
)
|
||||
}
|
||||
}.genAnnotations(annotated, parameterSignature.asmType, annotated?.type)
|
||||
}.genAnnotations(annotated, parameterSignature.asmType, annotated.type)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun IrValueParameter.isSyntheticMarkerParameter(): Boolean =
|
||||
origin == IrDeclarationOrigin.DEFAULT_CONSTRUCTOR_MARKER ||
|
||||
origin == JvmLoweredDeclarationOrigin.SYNTHETIC_MARKER_PARAMETER
|
||||
|
||||
private fun generateParameterNames(irFunction: IrFunction, mv: MethodVisitor, jvmSignature: JvmMethodSignature, state: GenerationState) {
|
||||
val iterator = irFunction.valueParameters.iterator()
|
||||
for (parameterSignature in jvmSignature.valueParameters) {
|
||||
|
||||
+2
-2
@@ -272,8 +272,8 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
||||
|
||||
accessor.addValueParameter(
|
||||
"constructor_marker".synthesizedString,
|
||||
context.ir.symbols.defaultConstructorMarker.defaultType,
|
||||
JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR
|
||||
context.ir.symbols.defaultConstructorMarker.defaultType.makeNullable(),
|
||||
JvmLoweredDeclarationOrigin.SYNTHETIC_MARKER_PARAMETER
|
||||
)
|
||||
|
||||
accessor.body = IrExpressionBodyImpl(
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ public final class AnObject {
|
||||
public final class WithCompanion$Companion {
|
||||
inner class WithCompanion$Companion
|
||||
private method <init>(): void
|
||||
public synthetic method <init>(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||
public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||
public synthetic static method foo$default(p0: WithCompanion$Companion, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final @kotlin.jvm.JvmStatic method foo(p0: int): void
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user