Fix parameter names of Java inner classes in reflection
#KT-25541 Fixed
This commit is contained in:
+5
@@ -9,6 +9,10 @@ public class J {
|
|||||||
public void foo(int methodParam) {}
|
public void foo(int methodParam) {}
|
||||||
|
|
||||||
public static void bar(J staticMethodParam) {}
|
public static void bar(J staticMethodParam) {}
|
||||||
|
|
||||||
|
class Inner {
|
||||||
|
public Inner(double innerParam, Object innerParam2) {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FILE: K.kt
|
// FILE: K.kt
|
||||||
@@ -19,6 +23,7 @@ fun box(): String {
|
|||||||
assertEquals(listOf("constructorParam"), ::J.parameters.map { it.name })
|
assertEquals(listOf("constructorParam"), ::J.parameters.map { it.name })
|
||||||
assertEquals(listOf(null, "methodParam"), J::foo.parameters.map { it.name })
|
assertEquals(listOf(null, "methodParam"), J::foo.parameters.map { it.name })
|
||||||
assertEquals(listOf("staticMethodParam"), J::bar.parameters.map { it.name })
|
assertEquals(listOf("staticMethodParam"), J::bar.parameters.map { it.name })
|
||||||
|
assertEquals(listOf(null, "innerParam", "innerParam2"), J::Inner.parameters.map { it.name })
|
||||||
|
|
||||||
return "OK"
|
return "OK"
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -8,6 +8,10 @@ public class J {
|
|||||||
public void foo(int methodParam) {}
|
public void foo(int methodParam) {}
|
||||||
|
|
||||||
public static void bar(J staticMethodParam) {}
|
public static void bar(J staticMethodParam) {}
|
||||||
|
|
||||||
|
class Inner {
|
||||||
|
public Inner(double innerParam, Object innerParam2) {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FILE: K.kt
|
// FILE: K.kt
|
||||||
@@ -18,6 +22,7 @@ fun box(): String {
|
|||||||
assertEquals(listOf("arg0"), ::J.parameters.map { it.name })
|
assertEquals(listOf("arg0"), ::J.parameters.map { it.name })
|
||||||
assertEquals(listOf(null, "arg0"), J::foo.parameters.map { it.name })
|
assertEquals(listOf(null, "arg0"), J::foo.parameters.map { it.name })
|
||||||
assertEquals(listOf("arg0"), J::bar.parameters.map { it.name })
|
assertEquals(listOf("arg0"), J::bar.parameters.map { it.name })
|
||||||
|
assertEquals(listOf(null, "arg1", "arg2"), J::Inner.parameters.map { it.name })
|
||||||
|
|
||||||
return "OK"
|
return "OK"
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -46,9 +46,13 @@ abstract class ReflectJavaMember : ReflectJavaElement(), ReflectJavaAnnotationOw
|
|||||||
): List<JavaValueParameter> {
|
): List<JavaValueParameter> {
|
||||||
val result = ArrayList<JavaValueParameter>(parameterTypes.size)
|
val result = ArrayList<JavaValueParameter>(parameterTypes.size)
|
||||||
val names = Java8ParameterNamesLoader.loadParameterNames(member)
|
val names = Java8ParameterNamesLoader.loadParameterNames(member)
|
||||||
|
|
||||||
|
// Skip synthetic parameters such as outer class instance
|
||||||
|
val shift = names?.size?.minus(parameterTypes.size) ?: 0
|
||||||
|
|
||||||
for (i in parameterTypes.indices) {
|
for (i in parameterTypes.indices) {
|
||||||
val type = ReflectJavaType.create(parameterTypes[i])
|
val type = ReflectJavaType.create(parameterTypes[i])
|
||||||
val name = names?.run { get(i) }
|
val name = names?.getOrNull(i + shift) ?: error("No parameter with index $i+$shift (name=$name type=$type) in $this")
|
||||||
val isParamVararg = isVararg && i == parameterTypes.lastIndex
|
val isParamVararg = isVararg && i == parameterTypes.lastIndex
|
||||||
result.add(ReflectJavaValueParameter(type, parameterAnnotations[i], name, isParamVararg))
|
result.add(ReflectJavaValueParameter(type, parameterAnnotations[i], name, isParamVararg))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user