On Monday, January 15, 2018 at 4:03:11 PM UTC+1, Jan Blok wrote:
>
> Hi,
>
> Would it be possible for GWTc to handle java.lang.FunctionalInterface as 
> if it was jsinterop.annotations.JsFunction ?
>

No, if only because JsFunction has many 
constraints: 
http://www.gwtproject.org/javadoc/latest/jsinterop/annotations/JsFunction.html
 

> The reason for asking is, I have this java code:
>
>     public void transaction(Runnable runnable) {
>         startTransaction();
>         try {
>             runnable.run();
>         }
>         finally {
>             endTransaction();
>         }
>     }
>
> when I expose this method via jsinterop I get a warning "not usable from 
> javascript"
>
> I intent to use it from JS/TS as: myJavaLib.transaction(() => 
> doSomethingInTransaction(...));
>
> but this is not possible unless I supersource java.lang.Runnable and 
> add @JsFunction 
>

You'd need to create an overload taking a JsFunction as input, and exposing 
that one.

@JsFunction @FunctionalInterface
interface TransactionCallback {
  void run();
}


@JsMethod
public void transaction(TransactionCallback callback) {
  startTransaction();
  try {
    callback.run();
  } finally {
    endTransaction();
  }
}

// Note: not a @JsMethod
public void transaction(Runnable runnable) {
  transaction((TransactionCallback) runnable::run);
}

 

> It seems to me that @FunctionalInterface and @JsFunction are very similar 
> already...
>

And this is why the javadoc for JsFunction recommends also annotating the 
interface with FunctionalInterface. 

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to