@ -75,11 +75,15 @@ public class KotlinReflectionParameterNameDiscoverer implements ParameterNameDis
private String [ ] getParameterNames ( List < KParameter > parameters ) {
List < KParameter > filteredParameters = parameters
. stream ( )
. filter ( p - > KParameter . Kind . VALUE . equals ( p . getKind ( ) ) )
// Extension receivers of extension methods must be included as they appear as normal method parameters in Java
. filter ( p - > KParameter . Kind . VALUE . equals ( p . getKind ( ) ) | | KParameter . Kind . EXTENSION_RECEIVER . equals ( p . getKind ( ) ) )
. collect ( Collectors . toList ( ) ) ;
String [ ] parameterNames = new String [ filteredParameters . size ( ) ] ;
for ( int i = 0 ; i < filteredParameters . size ( ) ; i + + ) {
String name = filteredParameters . get ( i ) . getName ( ) ;
KParameter parameter = filteredParameters . get ( i ) ;
// extension receivers are not explicitly named, but require a name for Java interoperability
// $receiver is not a valid Kotlin identifier, but valid in Java, so it can be used here
String name = KParameter . Kind . EXTENSION_RECEIVER . equals ( parameter . getKind ( ) ) ? "$receiver" : parameter . getName ( ) ;
if ( name = = null ) {
return null ;
}