X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2FCodeSnippetSupplier.java;h=22ebc090d49b9e0adc5f6c4c8403afa00ace3d1f;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;hp=0016cc725ba6c7fa56b52a79c1d48ab8962c1bf7;hpb=f0cbb45372e15f8fe1a36334f78d61c387d6c4c9;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java index 0016cc72..22ebc090 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java @@ -4,6 +4,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import net.mograsim.logic.model.serializing.ReflectionHelper; + public class CodeSnippetSupplier { private final Map standardSnippetIDClassNames = new HashMap<>(); @@ -16,9 +18,11 @@ public class CodeSnippetSupplier this.defaultSnippetSupplier = defaultSnippetSupplier; } - public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName) + public void addStandardSnippetID(String standardSnippetID, String associatedSnippetID) { - standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName); + if (!associatedSnippetID.startsWith("class:")) + throw new IllegalArgumentException("Unrecognized snippet ID format: " + associatedSnippetID); + standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetID); } public Map getStandardSnippetIDs() @@ -36,13 +40,10 @@ public class CodeSnippetSupplier { if (id != null) { - String snippetClassName; - if (id.startsWith("class:")) - snippetClassName = id.substring(6); - else - snippetClassName = standardSnippetIDClassNames.get(id); - if (snippetClassName != null) + String resolvedID = resolveID(id); + if (resolvedID != null) { + String snippetClassName = resolvedID.substring(6); tryLoadSnippetClass(snippetClassName); SnippetDefinintion snippetSupplier = snippetSuppliersForClassNames.get(snippetClassName); if (snippetSupplier != null) @@ -55,23 +56,17 @@ public class CodeSnippetSupplier return defaultSnippetSupplier; } - // static helpers - - private static void tryLoadSnippetClass(String snippetClassName) + public String resolveID(String id) { - tryInvokeStaticInitializer(snippetClassName, "Error getting snippet class: %s: %s\n"); + if (id.startsWith("class:")) + return id; + return standardSnippetIDClassNames.get(id); } - public static void tryInvokeStaticInitializer(String className, String errorMessageFormat) + // static helpers + + private static void tryLoadSnippetClass(String snippetClassName) { - try - { - Class.forName(className, true, CodeSnippetSupplier.class.getClassLoader()); - } - catch (ClassNotFoundException e) - { - System.err.printf(errorMessageFormat, className, "ClassNotFoundException thrown: " + e.getMessage()); - } + ReflectionHelper.tryInvokeStaticInitializer(snippetClassName, "Error getting snippet class: %s: %s\n"); } - } \ No newline at end of file