jso: move interfaces from 'util.function' to 'function' subpackage, rename JSFunction to JSMapping to avoid name clash

This commit is contained in:
Alexey Andreev 2024-04-22 18:58:17 +02:00
parent a1d711d069
commit 81fc843da3
5 changed files with 29 additions and 29 deletions

View File

@ -22,9 +22,9 @@ import org.teavm.jso.JSFunctor;
import org.teavm.jso.JSMethod; import org.teavm.jso.JSMethod;
import org.teavm.jso.JSObject; import org.teavm.jso.JSObject;
import org.teavm.jso.JSProperty; import org.teavm.jso.JSProperty;
import org.teavm.jso.util.function.JSConsumer; import org.teavm.jso.function.JSConsumer;
import org.teavm.jso.util.function.JSFunction; import org.teavm.jso.function.JSMapping;
import org.teavm.jso.util.function.JSSupplier; import org.teavm.jso.function.JSSupplier;
/** /**
* Interface for interacting with JavaScript * Interface for interacting with JavaScript
@ -76,29 +76,29 @@ public class JSPromise<T> implements JSObject {
public static native <V> JSPromise<V> reject(Object reason); public static native <V> JSPromise<V> reject(Object reason);
/** Call {@code onFulfilled} with the success value, resolving with its return value. */ /** Call {@code onFulfilled} with the success value, resolving with its return value. */
public native <V> JSPromise<V> then(JSFunction<T, V> onFulfilled); public native <V> JSPromise<V> then(JSMapping<T, V> onFulfilled);
/** Call {@code onFulfilled} with the success value or {@code onRejected} with the reject reason, /** Call {@code onFulfilled} with the success value or {@code onRejected} with the reject reason,
* resolving with its return value. */ * resolving with its return value. */
public native <V> JSPromise<V> then(JSFunction<T, V> onFulfilled, JSFunction<Object, V> onRejected); public native <V> JSPromise<V> then(JSMapping<T, V> onFulfilled, JSMapping<Object, V> onRejected);
/** Call {@code onFulfilled} with the success value, returning a new promise. */ /** Call {@code onFulfilled} with the success value, returning a new promise. */
@JSMethod("then") @JSMethod("then")
public native <V> JSPromise<V> flatThen(JSFunction<T, ? extends JSPromise<V>> onFulfilled); public native <V> JSPromise<V> flatThen(JSMapping<T, ? extends JSPromise<V>> onFulfilled);
/** Call {@code onFulfilled} with the success value or {@code onRejected} with the reject reason, /** Call {@code onFulfilled} with the success value or {@code onRejected} with the reject reason,
* returning a new promise. */ * returning a new promise. */
@JSMethod("then") @JSMethod("then")
public native <V> JSPromise<V> flatThen(JSFunction<T, ? extends JSPromise<V>> onFulfilled, public native <V> JSPromise<V> flatThen(JSMapping<T, ? extends JSPromise<V>> onFulfilled,
JSFunction<Object, ? extends JSPromise<V>> onRejected); JSMapping<Object, ? extends JSPromise<V>> onRejected);
/** Call {@code onRejected} with the reject reason, resolving with its return value. */ /** Call {@code onRejected} with the reject reason, resolving with its return value. */
@JSMethod("catch") @JSMethod("catch")
public native <V> JSPromise<V> catchError(JSFunction<Object, V> onRejected); public native <V> JSPromise<V> catchError(JSMapping<Object, V> onRejected);
/** Call {@code onRejected} with the reject reason, returning a new promise. */ /** Call {@code onRejected} with the reject reason, returning a new promise. */
@JSMethod("catch") @JSMethod("catch")
public native <V> JSPromise<V> flatCatchError(JSFunction<Object, ? extends JSPromise<V>> onRejected); public native <V> JSPromise<V> flatCatchError(JSMapping<Object, ? extends JSPromise<V>> onRejected);
/** Call {@code onFinally} after settling, ignoring the return value. */ /** Call {@code onFinally} after settling, ignoring the return value. */
@JSMethod("finally") @JSMethod("finally")

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2023 Bernd Busse. * Copyright 2024 Alexey Andreev.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.teavm.jso.util.function; package org.teavm.jso.function;
import java.util.Objects; import java.util.Objects;
import org.teavm.jso.JSFunctor; import org.teavm.jso.JSFunctor;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2023 Bernd Busse. * Copyright 2024 Alexey Andreev.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.teavm.jso.util.function; package org.teavm.jso.function;
import java.util.Objects; import java.util.Objects;
import org.teavm.jso.JSFunctor; import org.teavm.jso.JSFunctor;
@ -21,10 +21,10 @@ import org.teavm.jso.JSObject;
@FunctionalInterface @FunctionalInterface
@JSFunctor @JSFunctor
public interface JSFunction<T, R> extends JSObject { public interface JSMapping<T, R> extends JSObject {
R apply(T t); R apply(T t);
default <V> JSFunction<T, V> andThen(JSFunction<? super R, ? extends V> after) { default <V> JSMapping<T, V> andThen(JSMapping<? super R, ? extends V> after) {
Objects.requireNonNull(after); Objects.requireNonNull(after);
return (T t) -> { return (T t) -> {
@ -33,7 +33,7 @@ public interface JSFunction<T, R> extends JSObject {
}; };
} }
default <V> JSFunction<V, R> compose(JSFunction<? super V, ? extends T> before) { default <V> JSMapping<V, R> compose(JSMapping<? super V, ? extends T> before) {
Objects.requireNonNull(before); Objects.requireNonNull(before);
return (V v) -> { return (V v) -> {
@ -42,7 +42,7 @@ public interface JSFunction<T, R> extends JSObject {
}; };
} }
static <T> JSFunction<T, T> identity() { static <T> JSMapping<T, T> identity() {
return (T t) -> { return (T t) -> {
return t; return t;
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2023 Bernd Busse. * Copyright 2024 Alexey Andreev.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.teavm.jso.util.function; package org.teavm.jso.function;
import org.teavm.jso.JSFunctor; import org.teavm.jso.JSFunctor;
import org.teavm.jso.JSObject; import org.teavm.jso.JSObject;

View File

@ -21,9 +21,9 @@ import org.teavm.jso.browser.Window;
import org.teavm.jso.core.JSArray; import org.teavm.jso.core.JSArray;
import org.teavm.jso.core.JSPromise; import org.teavm.jso.core.JSPromise;
import org.teavm.jso.core.JSString; import org.teavm.jso.core.JSString;
import org.teavm.jso.util.function.JSConsumer; import org.teavm.jso.function.JSConsumer;
import org.teavm.jso.util.function.JSFunction; import org.teavm.jso.function.JSMapping;
import org.teavm.jso.util.function.JSSupplier; import org.teavm.jso.function.JSSupplier;
public final class PromiseExample { public final class PromiseExample {
private static long start = System.currentTimeMillis(); private static long start = System.currentTimeMillis();
@ -67,15 +67,15 @@ public final class PromiseExample {
private static void checkFunctionalInterface() { private static void checkFunctionalInterface() {
JSSupplier<Integer> supplier = () -> 23; JSSupplier<Integer> supplier = () -> 23;
JSFunction<Integer, Integer> addTwenty = value -> value + 20; JSMapping<Integer, Integer> addTwenty = value -> value + 20;
JSFunction<Integer, Integer> subTwenty = value -> value - 20; JSMapping<Integer, Integer> subTwenty = value -> value - 20;
JSFunction<Integer, Boolean> isPositive = value -> value >= 0; JSMapping<Integer, Boolean> isPositive = value -> value >= 0;
JSConsumer<Integer> print = value -> report("My value: " + value.toString()); JSConsumer<Integer> print = value -> report("My value: " + value.toString());
JSConsumer<Integer> print2 = value -> report("My value plus 10: " + Integer.valueOf(value + 10).toString()); JSConsumer<Integer> print2 = value -> report("My value plus 10: " + Integer.valueOf(value + 10).toString());
var value = supplier.get(); var value = supplier.get();
report("Supplied value: " + value.toString()); report("Supplied value: " + value);
value = addTwenty.apply(value); value = addTwenty.apply(value);
report("Value plus 20: " + value.toString()); report("Value plus 20: " + value.toString());
@ -176,7 +176,7 @@ public final class PromiseExample {
} }
private static void runLongRunningPromise(Object lock) { private static void runLongRunningPromise(Object lock) {
var promise = new JSPromise<>((resolve, reject) -> { new JSPromise<>((resolve, reject) -> {
report("Long promise exection"); report("Long promise exection");
report("Wait for a while..."); report("Wait for a while...");
Window.setTimeout(() -> { Window.setTimeout(() -> {
@ -250,7 +250,7 @@ public final class PromiseExample {
var item = value.get(i); var item = value.get(i);
var msg = "-- Promise " + i + " " + item.getStatus() + " with: "; var msg = "-- Promise " + i + " " + item.getStatus() + " with: ";
if (item.getStatus().stringValue().equals("fulfilled")) { if (item.getStatus().stringValue().equals("fulfilled")) {
msg += item.getValue().toString(); msg += item.getValue();
} else if (item.getStatus().stringValue().equals("rejected")) { } else if (item.getStatus().stringValue().equals("rejected")) {
msg += item.getReason().toString(); msg += item.getReason().toString();
} }