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 static void bar(J staticMethodParam) {}
|
||||
|
||||
class Inner {
|
||||
public Inner(double innerParam, Object innerParam2) {}
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: K.kt
|
||||
@@ -19,6 +23,7 @@ fun box(): String {
|
||||
assertEquals(listOf("constructorParam"), ::J.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(null, "innerParam", "innerParam2"), J::Inner.parameters.map { it.name })
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+5
@@ -8,6 +8,10 @@ public class J {
|
||||
public void foo(int methodParam) {}
|
||||
|
||||
public static void bar(J staticMethodParam) {}
|
||||
|
||||
class Inner {
|
||||
public Inner(double innerParam, Object innerParam2) {}
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: K.kt
|
||||
@@ -18,6 +22,7 @@ fun box(): String {
|
||||
assertEquals(listOf("arg0"), ::J.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(null, "arg1", "arg2"), J::Inner.parameters.map { it.name })
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+5
-1
@@ -46,9 +46,13 @@ abstract class ReflectJavaMember : ReflectJavaElement(), ReflectJavaAnnotationOw
|
||||
): List<JavaValueParameter> {
|
||||
val result = ArrayList<JavaValueParameter>(parameterTypes.size)
|
||||
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) {
|
||||
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
|
||||
result.add(ReflectJavaValueParameter(type, parameterAnnotations[i], name, isParamVararg))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user