Can lambda expressions be annotated? Or maybe inherit annotations from parameters?


Today I noticed a wrong usage in code which looks like this:

        if (null == activity) {


The problem is that hud.dismiss() should run on the UI thread, and that method is annotated with @UiThread. However the IDE is unable to flag that, because there is no information for it to figure out that the runnable block has to run in a background thread:

public static void runInBackground(@NonNull Runnable r)
    if (Looper.myLooper() != Looper.getMainLooper()) {;
    } else {

Two things I imagine could be done are flagging the SAM/lambda with annotations, adding manually the @WorkerThread annotation which would tell the IDE this information. More convenient of course would be to somehow be able to flag the @NonNull Runnable r as a @WorkerThread, which would make whatever is passed as parameter inherit this annotation.

Is this the correct place to request a feature request which would aid with these situations? I’m not sure if this is something that Kotlin has to implement or is a limitation of annotations which can’t be worked around.

As a workaround I write the SAM block as a separate private function which can be annotated, but this can lead to many parameters being passed over and over across thread boundaries and manual bookkeeping.