JVM_IR: skip synthetic enum parameters in signatures
This commit is contained in:
+5
-5
@@ -68,11 +68,11 @@ open class FunctionCodegen(
|
|||||||
functionView,
|
functionView,
|
||||||
signature.asmMethod.returnType
|
signature.asmMethod.returnType
|
||||||
)
|
)
|
||||||
}
|
// 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()) {
|
||||||
if (irFunction !is IrConstructor || !irFunction.parentAsClass.shouldNotGenerateConstructorParameterAnnotations()) {
|
generateParameterAnnotations(functionView, methodVisitor, signature, classCodegen, context)
|
||||||
generateParameterAnnotations(functionView, methodVisitor, signature, classCodegen, context)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!state.classBuilderMode.generateBodies || flags.and(Opcodes.ACC_ABSTRACT) != 0 || irFunction.isExternal) {
|
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) {
|
for (parameter in function.valueParameters) {
|
||||||
val kind = when (parameter.origin) {
|
val kind = when (parameter.origin) {
|
||||||
JvmLoweredDeclarationOrigin.FIELD_FOR_OUTER_THIS -> JvmMethodParameterKind.OUTER
|
JvmLoweredDeclarationOrigin.FIELD_FOR_OUTER_THIS -> JvmMethodParameterKind.OUTER
|
||||||
|
JvmLoweredDeclarationOrigin.ENUM_CONSTRUCTOR_SYNTHETIC_PARAMETER -> JvmMethodParameterKind.ENUM_NAME_OR_ORDINAL
|
||||||
else -> JvmMethodParameterKind.VALUE
|
else -> JvmMethodParameterKind.VALUE
|
||||||
}
|
}
|
||||||
val type = if (forceSingleValueParameterBoxing(function.descriptor)) parameter.type.makeNullable() else parameter.type
|
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)
|
inner class Inner(nested: Nested)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class E(val i: Int) { ENTRY(1) }
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
assertEquals(listOf(java.lang.Double.TYPE, String::class.java, A::class.java), ::A.parameters.map { it.type.javaType })
|
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.parameters.map { it.type.javaType })
|
||||||
assertEquals(listOf(A::class.java, A.Nested::class.java), A::Inner.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::class.java, ::A.returnType.javaType)
|
||||||
assertEquals(A.Nested::class.java, A::Nested.returnType.javaType)
|
assertEquals(A.Nested::class.java, A::Nested.returnType.javaType)
|
||||||
|
|||||||
Reference in New Issue
Block a user