From f68d45bd30c53da76fc0c2b563b8694775c6bb22 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sun, 5 Oct 2025 00:21:38 +0200 Subject: [PATCH] dynamically resolve snippet classes --- .../com/volmit/iris/core/loader/IrisData.java | 30 +++++++++++++++++-- .../volmit/iris/core/project/IrisProject.java | 3 +- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/loader/IrisData.java b/core/src/main/java/com/volmit/iris/core/loader/IrisData.java index fc038ecec..97215ef20 100644 --- a/core/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/core/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -50,8 +50,7 @@ import java.io.FileReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Objects; -import java.util.Optional; +import java.util.*; @Data public class IrisData implements ExclusionStrategy, TypeAdapterFactory { @@ -407,6 +406,33 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { possibleSnippets.clear(); } + public Set> resolveSnippets() { + var result = new HashSet>(); + var processed = new HashSet>(); + var excluder = gson.excluder(); + + var queue = new LinkedList>(loaders.keySet()); + while (!queue.isEmpty()) { + var type = queue.poll(); + if (excluder.excludeClass(type, false) || !processed.add(type)) + continue; + if (type.isAnnotationPresent(Snippet.class)) + result.add(type); + + try { + for (var field : type.getDeclaredFields()) { + if (excluder.excludeField(field, false)) + continue; + + queue.add(field.getType()); + } + } catch (Throwable ignored) { + } + } + + return result; + } + public String toLoadKey(File f) { if (f.getPath().startsWith(getDataFolder().getPath())) { String[] full = f.getPath().split("\\Q" + File.separator + "\\E"); diff --git a/core/src/main/java/com/volmit/iris/core/project/IrisProject.java b/core/src/main/java/com/volmit/iris/core/project/IrisProject.java index ad5a42bff..7e753f5c0 100644 --- a/core/src/main/java/com/volmit/iris/core/project/IrisProject.java +++ b/core/src/main/java/com/volmit/iris/core/project/IrisProject.java @@ -24,7 +24,6 @@ import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.loader.IrisRegistrant; import com.volmit.iris.core.loader.ResourceLoader; -import com.volmit.iris.core.scripting.environment.SimpleEnvironment; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.object.*; import com.volmit.iris.engine.object.annotations.Snippet; @@ -326,7 +325,7 @@ public class IrisProject { } } - for (Class i : Iris.getClasses("com.volmit.iris.engine.object.", Snippet.class)) { + for (Class i : dm.resolveSnippets()) { try { String snipType = i.getDeclaredAnnotation(Snippet.class).value(); JSONObject o = new JSONObject();