TaskHandle.task() is not correctly typed !
Remi Forax
forax at univ-mlv.fr
Sat May 13 06:26:28 UTC 2023
Here is an example that shows that TaskHandle.task() should be typed Callable<? extends T> and not Callable<T>.
The current API is unsound.
interface NonCovariantCallable<T> extends Callable<T> {
T call() throws Exception;
void set(T t);
}
...
try(var scope = new STS<Object>()) {
TaskHandle<Object> handle = scope.fork(new NonCovariantCallable<String>() {
public String call() {
return "foo";
}
public void set(String s) {}
});
scope.join();
Callable<Object> task = handle.task();
NonCovariantCallable<Object> nonCovariantTask = (NonCovariantCallable<Object>) task;
nonCovariantTask.set(3);
}
The last call should throw a CCE in the bridge that calls set(String).
regards,
Rémi
More information about the loom-dev
mailing list