diff options
Diffstat (limited to 'core/src/main')
7 files changed, 36 insertions, 11 deletions
diff --git a/core/src/main/java/dev/figboot/launcher/core/Launcher.java b/core/src/main/java/dev/figboot/launcher/core/Launcher.java index d6c7758..bc5b74e 100644 --- a/core/src/main/java/dev/figboot/launcher/core/Launcher.java +++ b/core/src/main/java/dev/figboot/launcher/core/Launcher.java @@ -5,7 +5,7 @@ import dev.figboot.launcher.core.task.TaskUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; +import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; public class Launcher { @@ -19,9 +19,7 @@ public class Launcher { service = new LauncherExecutorService(iface); } - public void loadVersions() throws IOException { - service.execute(TaskUtil.taskRunnable((task) -> { - task.setLabel("sussy"); - })); + public Future<?> loadVersions() { + return service.submit(TaskUtil.taskRunnable((task) -> task.setLabel("sussy"))); } } diff --git a/core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java b/core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java index fc97d92..6e7d20f 100644 --- a/core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java +++ b/core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java @@ -3,5 +3,5 @@ package dev.figboot.launcher.core; import dev.figboot.launcher.core.task.Task; public interface LauncherInterfaceAccess { - Task createTask(String label); + Task createTask(/* nullable */ String label); } diff --git a/core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java b/core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java index 81d9768..6c7f2be 100644 --- a/core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java +++ b/core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java @@ -17,7 +17,8 @@ public class LauncherExecutorService extends ScheduledThreadPoolExecutor { @Override protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task) { if (runnable instanceof TaskConsumingRunnable) { - ((TaskConsumingRunnable)runnable).consumeTask(iface.createTask(null)); + TaskConsumingRunnable tcr = (TaskConsumingRunnable)runnable; + tcr.consumeTask(iface.createTask(tcr.initialLabel)); } return task; @@ -26,9 +27,10 @@ public class LauncherExecutorService extends ScheduledThreadPoolExecutor { @Override protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task) { if (callable instanceof TaskConsumingCallable) { - ((TaskConsumingCallable<V>)callable).consumeTask(iface.createTask(null)); + TaskConsumingCallable<V> tcc = (TaskConsumingCallable<V>)callable; + tcc.consumeTask(iface.createTask(tcc.initialLabel)); } - return super.decorateTask(callable, task); + return task; } } diff --git a/core/src/main/java/dev/figboot/launcher/core/task/Task.java b/core/src/main/java/dev/figboot/launcher/core/task/Task.java index de025c1..57423d1 100644 --- a/core/src/main/java/dev/figboot/launcher/core/task/Task.java +++ b/core/src/main/java/dev/figboot/launcher/core/task/Task.java @@ -2,5 +2,6 @@ package dev.figboot.launcher.core.task; public interface Task { void setLabel(String label); + void unhandled(Throwable t); void complete(); } diff --git a/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java index 3080bfc..4835105 100644 --- a/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java +++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java @@ -7,6 +7,7 @@ import java.util.concurrent.Callable; @RequiredArgsConstructor(access = AccessLevel.PACKAGE) class TaskConsumingCallable<V> implements Callable<V> { + final String initialLabel; private final TaskCallable<V> delegate; private Task task = null; @@ -23,6 +24,13 @@ class TaskConsumingCallable<V> implements Callable<V> { try { return delegate.call(task); + } catch (Throwable t) { + try { + task.unhandled(t); + } catch (Throwable t1) { + t.addSuppressed(t1); + } + throw t; } finally { task.complete(); } diff --git a/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java index 63464e1..46824c5 100644 --- a/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java +++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java @@ -7,6 +7,7 @@ import java.util.function.Consumer; @RequiredArgsConstructor(access = AccessLevel.PACKAGE) class TaskConsumingRunnable implements Runnable { + final String initialLabel; private final Consumer<Task> delegate; private Task task; @@ -23,6 +24,13 @@ class TaskConsumingRunnable implements Runnable { try { delegate.accept(task); + } catch (Throwable t) { + try { + task.unhandled(t); + } catch (Throwable t1) { + t.addSuppressed(t1); + } + throw t; } finally { task.complete(); } diff --git a/core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java b/core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java index ffa0f9a..773bd06 100644 --- a/core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java +++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java @@ -6,11 +6,19 @@ import java.util.function.Consumer; public final class TaskUtil { private TaskUtil() { } + public static Runnable taskRunnable(String label, Consumer<Task> command) { + return new TaskConsumingRunnable(label, command); + } + public static Runnable taskRunnable(Consumer<Task> command) { - return new TaskConsumingRunnable(command); + return taskRunnable(null, command); + } + + public static <V> Callable<V> taskCallable(String label, TaskCallable<V> callable) { + return new TaskConsumingCallable<>(label, callable); } public static <V> Callable<V> taskCallable(TaskCallable<V> callable) { - return new TaskConsumingCallable<>(callable); + return taskCallable(null, callable); } } |
