@Nullable private String[] getParameterNames(List<KParameter> parameters) { List<KParameter> filteredParameters = parameters .stream() // 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++) { 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; } parameterNames[i] = name; } return parameterNames; }
@Nullable private String[] getParameterNames(List<KParameter> parameters) { List<KParameter> filteredParameters = parameters .stream() // 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++) { 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; } parameterNames[i] = name; } return parameterNames; }
/** * Check whether the specified {@link MethodParameter} represents a nullable Kotlin type or an * optional parameter (with a default value in the Kotlin declaration). */ public static boolean isOptional(MethodParameter param) { Method method = param.getMethod(); Constructor<?> ctor = param.getConstructor(); int index = param.getParameterIndex(); if (method != null && index == -1) { KFunction<?> function = ReflectJvmMapping.getKotlinFunction(method); return (function != null && function.getReturnType().isMarkedNullable()); } else { KFunction<?> function = null; if (method != null) { function = ReflectJvmMapping.getKotlinFunction(method); } else if (ctor != null) { function = ReflectJvmMapping.getKotlinFunction(ctor); } if (function != null) { List<KParameter> parameters = function.getParameters(); KParameter parameter = parameters .stream() .filter(p -> KParameter.Kind.VALUE.equals(p.getKind())) .collect(Collectors.toList()) .get(index); return (parameter.getType().isMarkedNullable() || parameter.isOptional()); } } return false; }
@Nullable private String[] getParameterNames(List<KParameter> parameters) { List<KParameter> filteredParameters = parameters .stream() // 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++) { 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; } parameterNames[i] = name; } return parameterNames; }
@Nullable private String[] getParameterNames(List<KParameter> parameters) { List<KParameter> filteredParameters = parameters .stream() // 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++) { 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; } parameterNames[i] = name; } return parameterNames; }