summaryrefslogtreecommitdiffstats
path: root/core/src/main/java
diff options
context:
space:
mode:
authorLibravatar bigfoot547 <[email protected]>2025-09-01 16:11:14 -0500
committerLibravatar bigfoot547 <[email protected]>2025-09-01 16:11:14 -0500
commit770469b999a8afb911ba6050c7f98d467b98d45d (patch)
tree256c3fe678d2708896db3555104b61810449f1b8 /core/src/main/java
parentflesh out task system (diff)
better exception handling for tasks
Diffstat (limited to 'core/src/main/java')
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/Launcher.java8
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java2
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java8
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/Task.java1
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java8
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java8
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java12
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);
}
}