JVM IR: do not generate extension receiver parameter as ACC_MANDATED
Otherwise Java reflection is not able to load its type as a parameterized type. #KT-40857 Fixed
This commit is contained in:
committed by
Space Team
parent
d23a4f46cc
commit
47c48efa33
@@ -1,5 +1,6 @@
|
||||
// SKIP_JDK6
|
||||
// TARGET_BACKEND: JVM
|
||||
// IGNORE_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// FULL_JDK
|
||||
// PARAMETERS_METADATA
|
||||
@@ -15,7 +16,7 @@ fun box(): String {
|
||||
val method = clazz.getDeclaredMethod("test", String::class.java, String::class.java)
|
||||
val parameters = method.getParameters()
|
||||
|
||||
if (!parameters[0].isImplicit() || parameters[0].isSynthetic()) return "wrong modifier on receiver parameter: ${parameters[0].modifiers}"
|
||||
if (parameters[0].isImplicit() || parameters[0].isSynthetic()) return "wrong modifier on receiver parameter: ${parameters[0].modifiers}"
|
||||
|
||||
return parameters[1].name
|
||||
}
|
||||
|
||||
+3
-4
@@ -1,5 +1,6 @@
|
||||
// SKIP_JDK6
|
||||
// TARGET_BACKEND: JVM
|
||||
// IGNORE_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// FULL_JDK
|
||||
// PARAMETERS_METADATA
|
||||
@@ -19,10 +20,8 @@ fun box(): String {
|
||||
|
||||
val extensionMethod = Class.forName("AKt").declaredMethods.single { it.name.contains("extension") }
|
||||
val extensionMethodParameters = extensionMethod.getParameters()
|
||||
if (extensionMethodParameters[0].isSynthetic())
|
||||
return "wrong modifier (synthetic) on extension receiver parameter: ${extensionMethodParameters[0].modifiers}"
|
||||
if (!extensionMethodParameters[0].isImplicit())
|
||||
return "wrong modifier (not implicit) on extension receiver parameter: ${extensionMethodParameters[0].modifiers}"
|
||||
if (extensionMethodParameters[0].isSynthetic() || extensionMethodParameters[0].isImplicit())
|
||||
return "wrong modifier on extension receiver parameter: ${extensionMethodParameters[0].modifiers}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// SKIP_JDK6
|
||||
// TARGET_BACKEND: JVM
|
||||
// IGNORE_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// FULL_JDK
|
||||
// PARAMETERS_METADATA
|
||||
|
||||
import java.lang.reflect.ParameterizedType
|
||||
|
||||
fun List<String>.bar(i: Int) = Unit
|
||||
|
||||
fun box(): String {
|
||||
val function = object {}.javaClass.enclosingClass.getDeclaredMethods().single { it.name == "bar" }
|
||||
val type = function.parameters[0].parameterizedType
|
||||
if (type !is ParameterizedType || type.toString() != "java.util.List<java.lang.String>") return "Fail: $type ${type.javaClass}"
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user