In the second code snippet, something is a property, so ::something is a reference to the property. ::something is of type KMutableProperty0<(String, String) -> String>. You obviously don't want to get the parameters of the property.
The "function" you want is the value stored in something, so ideally you would just do something.parameters. However, something is a (String, String) -> String, not a KFunction, so you cannot do reflection on it.
There is an experimental API that gives you the KFunction representing the (String, String) -> String - reflect.
So you can do:
var something = fun(a: String, b: String): String { return "$a $b" } @OptIn(ExperimentalReflectionOnLambdas::class) fun main() { println(something.reflect()?.parameters) }
For language version (not compiler version) 2.0, lambdas and anonymous functions are now created using invokedynamic calls, and reflect cannot work with those.
For this to work in 2.0, you can annotate the function like this:
var something = @JvmSerializableLambda fun(a: String, b: String): String { ... }
or use the -Xlambdas=class compiler option. Either of these will make the anonymous function compile to a class (the old behaviour before 2.0).