JVM_IR: skip synthetic enum parameters in signatures
This commit is contained in:
+5
-5
@@ -68,11 +68,11 @@ open class FunctionCodegen(
|
||||
functionView,
|
||||
signature.asmMethod.returnType
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
if (irFunction !is IrConstructor || !irFunction.parentAsClass.shouldNotGenerateConstructorParameterAnnotations()) {
|
||||
generateParameterAnnotations(functionView, methodVisitor, signature, classCodegen, context)
|
||||
// Not generating parameter annotations for default stubs fixes KT-7892, though
|
||||
// this certainly looks like a workaround for a javac bug.
|
||||
if (irFunction !is IrConstructor || !irFunction.parentAsClass.shouldNotGenerateConstructorParameterAnnotations()) {
|
||||
generateParameterAnnotations(functionView, methodVisitor, signature, classCodegen, context)
|
||||
}
|
||||
}
|
||||
|
||||
if (!state.classBuilderMode.generateBodies || flags.and(Opcodes.ACC_ABSTRACT) != 0 || irFunction.isExternal) {
|
||||
|
||||
+1
@@ -214,6 +214,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
||||
for (parameter in function.valueParameters) {
|
||||
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 = if (forceSingleValueParameterBoxing(function.descriptor)) parameter.type.makeNullable() else parameter.type
|
||||
|
||||
@@ -12,10 +12,13 @@ class A(d: Double, s: String, parent: A?) {
|
||||
inner class Inner(nested: Nested)
|
||||
}
|
||||
|
||||
enum class E(val i: Int) { ENTRY(1) }
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(listOf(java.lang.Double.TYPE, String::class.java, A::class.java), ::A.parameters.map { it.type.javaType })
|
||||
assertEquals(listOf(A::class.java), A::Nested.parameters.map { it.type.javaType })
|
||||
assertEquals(listOf(A::class.java, A.Nested::class.java), A::Inner.parameters.map { it.type.javaType })
|
||||
assertEquals(listOf(java.lang.Integer.TYPE), E::class.constructors.single().parameters.map { it.type.javaType })
|
||||
|
||||
assertEquals(A::class.java, ::A.returnType.javaType)
|
||||
assertEquals(A.Nested::class.java, A::Nested.returnType.javaType)
|
||||
|
||||
Reference in New Issue
Block a user