JVM IR: do not use JvmMethodParameterKind
This commit is contained in:
committed by
Space Team
parent
d9bc714992
commit
8ad38db2ad
+3
-3
@@ -182,10 +182,10 @@ public class BothSignatureWriter extends JvmSignatureWriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeParameterType(JvmMethodParameterKind parameterKind) {
|
public void writeParameterType(@NotNull JvmMethodParameterKind parameterKind, boolean isSkippedInGenericSignature) {
|
||||||
// This magic mimics the behavior of javac that enum constructor have these synthetic parameters in erased signature, but doesn't
|
// This magic mimics the behavior of javac that enum constructor have these synthetic parameters in erased signature, but doesn't
|
||||||
// have them in generic signature. IDEA, javac and their friends rely on this behavior.
|
// have them in generic signature. IDEA, javac and their friends rely on this behavior.
|
||||||
if (parameterKind.isSkippedInGenericSignature()) {
|
if (isSkippedInGenericSignature) {
|
||||||
generic = true;
|
generic = true;
|
||||||
|
|
||||||
// pushing dummy visitor, because we don't want these parameters to appear in generic JVM signature
|
// pushing dummy visitor, because we don't want these parameters to appear in generic JVM signature
|
||||||
@@ -194,7 +194,7 @@ public class BothSignatureWriter extends JvmSignatureWriter {
|
|||||||
else {
|
else {
|
||||||
push(signatureVisitor().visitParameterType());
|
push(signatureVisitor().visitParameterType());
|
||||||
}
|
}
|
||||||
super.writeParameterType(parameterKind);
|
super.writeParameterType(parameterKind, isSkippedInGenericSignature);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+5
-1
@@ -98,7 +98,11 @@ public class JvmSignatureWriter extends JvmDescriptorTypeWriter<Type> {
|
|||||||
clearCurrentType();
|
clearCurrentType();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeParameterType(JvmMethodParameterKind parameterKind) {
|
public void writeParameterType(@NotNull JvmMethodParameterKind parameterKind) {
|
||||||
|
writeParameterType(parameterKind, parameterKind.isSkippedInGenericSignature());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeParameterType(@NotNull JvmMethodParameterKind parameterKind, boolean isSkippedInGenericSignature) {
|
||||||
currentParameterKind = parameterKind;
|
currentParameterKind = parameterKind;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -272,7 +272,7 @@ class FunctionCodegen(private val irFunction: IrFunction, private val classCodeg
|
|||||||
) {
|
) {
|
||||||
val iterator = irFunction.valueParameters.iterator()
|
val iterator = irFunction.valueParameters.iterator()
|
||||||
val kotlinParameterTypes = jvmSignature.valueParameters
|
val kotlinParameterTypes = jvmSignature.valueParameters
|
||||||
val syntheticParameterCount = kotlinParameterTypes.count { it.kind.isSkippedInGenericSignature }
|
val syntheticParameterCount = irFunction.valueParameters.count { it.isSkippedInGenericSignature }
|
||||||
|
|
||||||
visitAnnotableParameterCount(mv, kotlinParameterTypes.size - syntheticParameterCount)
|
visitAnnotableParameterCount(mv, kotlinParameterTypes.size - syntheticParameterCount)
|
||||||
|
|
||||||
@@ -283,7 +283,7 @@ class FunctionCodegen(private val irFunction: IrFunction, private val classCodeg
|
|||||||
else
|
else
|
||||||
iterator.next()
|
iterator.next()
|
||||||
|
|
||||||
if (!parameterSignature.kind.isSkippedInGenericSignature && !annotated.isSyntheticMarkerParameter()) {
|
if (i >= syntheticParameterCount && !annotated.isSyntheticMarkerParameter()) {
|
||||||
object : AnnotationCodegen(classCodegen, skipNullabilityAnnotations) {
|
object : AnnotationCodegen(classCodegen, skipNullabilityAnnotations) {
|
||||||
override fun visitAnnotation(descr: String, visible: Boolean): AnnotationVisitor {
|
override fun visitAnnotation(descr: String, visible: Boolean): AnnotationVisitor {
|
||||||
return mv.visitParameterAnnotation(
|
return mv.visitParameterAnnotation(
|
||||||
|
|||||||
@@ -551,3 +551,7 @@ fun IrClass.findEnumValuesFunction(context: JvmBackendContext): IrSimpleFunction
|
|||||||
&& it.returnType.isBoxedArray
|
&& it.returnType.isBoxedArray
|
||||||
&& it.returnType.getArrayElementType(context.irBuiltIns).classOrNull == this.symbol
|
&& it.returnType.getArrayElementType(context.irBuiltIns).classOrNull == this.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val IrValueParameter.isSkippedInGenericSignature: Boolean
|
||||||
|
get() = origin == JvmLoweredDeclarationOrigin.FIELD_FOR_OUTER_THIS ||
|
||||||
|
origin == JvmLoweredDeclarationOrigin.ENUM_CONSTRUCTOR_SYNTHETIC_PARAMETER
|
||||||
|
|||||||
+5
-10
@@ -254,26 +254,21 @@ class MethodSignatureMapper(private val context: JvmBackendContext, private val
|
|||||||
|
|
||||||
for (i in 0 until function.contextReceiverParametersCount) {
|
for (i in 0 until function.contextReceiverParametersCount) {
|
||||||
val contextReceiver = function.valueParameters[i]
|
val contextReceiver = function.valueParameters[i]
|
||||||
writeParameter(sw, JvmMethodParameterKind.VALUE, contextReceiver.type, function)
|
writeParameter(sw, false, contextReceiver.type, function)
|
||||||
}
|
}
|
||||||
|
|
||||||
val receiverParameter = function.extensionReceiverParameter
|
val receiverParameter = function.extensionReceiverParameter
|
||||||
if (receiverParameter != null) {
|
if (receiverParameter != null) {
|
||||||
writeParameter(sw, JvmMethodParameterKind.VALUE, receiverParameter.type, function)
|
writeParameter(sw, false, receiverParameter.type, function)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i in function.contextReceiverParametersCount until function.valueParameters.size) {
|
for (i in function.contextReceiverParametersCount until function.valueParameters.size) {
|
||||||
val parameter = function.valueParameters[i]
|
val parameter = function.valueParameters[i]
|
||||||
val kind = when (parameter.origin) {
|
|
||||||
JvmLoweredDeclarationOrigin.FIELD_FOR_OUTER_THIS -> JvmMethodParameterKind.OUTER
|
|
||||||
JvmLoweredDeclarationOrigin.ENUM_CONSTRUCTOR_SYNTHETIC_PARAMETER -> JvmMethodParameterKind.ENUM_NAME_OR_ORDINAL
|
|
||||||
else -> JvmMethodParameterKind.VALUE
|
|
||||||
}
|
|
||||||
val type =
|
val type =
|
||||||
if (shouldBoxSingleValueParameterForSpecialCaseOfRemove(function))
|
if (shouldBoxSingleValueParameterForSpecialCaseOfRemove(function))
|
||||||
parameter.type.makeNullable()
|
parameter.type.makeNullable()
|
||||||
else parameter.type
|
else parameter.type
|
||||||
writeParameter(sw, kind, type, function, materialized)
|
writeParameter(sw, parameter.isSkippedInGenericSignature, type, function, materialized)
|
||||||
}
|
}
|
||||||
|
|
||||||
sw.writeReturnType()
|
sw.writeReturnType()
|
||||||
@@ -337,12 +332,12 @@ class MethodSignatureMapper(private val context: JvmBackendContext, private val
|
|||||||
|
|
||||||
private fun writeParameter(
|
private fun writeParameter(
|
||||||
sw: JvmSignatureWriter,
|
sw: JvmSignatureWriter,
|
||||||
kind: JvmMethodParameterKind,
|
isSkippedInGenericSignature: Boolean,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
function: IrFunction,
|
function: IrFunction,
|
||||||
materialized: Boolean = true
|
materialized: Boolean = true
|
||||||
) {
|
) {
|
||||||
sw.writeParameterType(kind)
|
sw.writeParameterType(JvmMethodParameterKind.VALUE, isSkippedInGenericSignature)
|
||||||
writeParameterType(sw, type, function, materialized)
|
writeParameterType(sw, type, function, materialized)
|
||||||
sw.writeParameterTypeEnd()
|
sw.writeParameterTypeEnd()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user