From b708e71209912a33c677c596da8ea18da37c5ac2 Mon Sep 17 00:00:00 2001 From: a2geek Date: Fri, 31 Jul 2026 22:22:22 -0500 Subject: [PATCH] There were three lists of the subcommands: The flags (ex: "--checkit"), the dynamically added hidden subcommands, and the case statement setting up the proper checker in the dynamic subcommand. This combines the last two. --- .../io/github/applecommander/acx/Main.java | 2 +- .../acx/command/AbstractProofCommand.java | 32 +++++++++---------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/app/cli-acx/src/main/java/io/github/applecommander/acx/Main.java b/app/cli-acx/src/main/java/io/github/applecommander/acx/Main.java index 67243bbc..ae833793 100644 --- a/app/cli-acx/src/main/java/io/github/applecommander/acx/Main.java +++ b/app/cli-acx/src/main/java/io/github/applecommander/acx/Main.java @@ -102,7 +102,7 @@ public class Main { public static void main(String[] args) { CommandLine cmd = new CommandLine(new Main()); - for (var name : HiddenProofCommand.PROOF_READERS) { + for (var name : HiddenProofCommand.PROOF_READER_FNS.keySet()) { cmd.addSubcommand(name, new AbstractProofCommand.HiddenProofCommand()); } cmd.setUsageHelpAutoWidth(true); diff --git a/app/cli-acx/src/main/java/io/github/applecommander/acx/command/AbstractProofCommand.java b/app/cli-acx/src/main/java/io/github/applecommander/acx/command/AbstractProofCommand.java index 7610568c..6021f8f0 100644 --- a/app/cli-acx/src/main/java/io/github/applecommander/acx/command/AbstractProofCommand.java +++ b/app/cli-acx/src/main/java/io/github/applecommander/acx/command/AbstractProofCommand.java @@ -37,6 +37,7 @@ import picocli.CommandLine.Model.CommandSpec; import java.io.File; import java.io.FileNotFoundException; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Queue; import java.util.concurrent.Callable; @@ -121,14 +122,17 @@ public abstract class AbstractProofCommand extends ReusableCommandOptions { @Command(hidden = true, name = "proof") public static class HiddenProofCommand extends AbstractProofCommand implements Callable { - public static final String[] PROOF_READERS = { - "apple-checker", - "checkit", - "kp2", "key-perfect-2", - "kp4", "key-perfect-4", - "kp5", "key-perfect-5", - "proofreader" - }; + public static final Map> PROOF_READER_FNS = Map.of( + "apple-checker", NibbleAppleChecker::new, + "checkit", NibbleCheckit::new, + "kp2", MicrosparcKeyPerfect2::new, + "key-perfect-2", MicrosparcKeyPerfect2::new, + "kp4", MicrosparcKeyPerfect4::new, + "key-perfect-4", MicrosparcKeyPerfect4::new, + "kp5", MicrosparcKeyPerfect5::new, + "key-perfect-5", MicrosparcKeyPerfect5::new, + "proofreader", ComputeAutomaticProofreader::new + ); @Spec private CommandSpec spec; @@ -136,15 +140,9 @@ public abstract class AbstractProofCommand extends ReusableCommandOptions { @Override public int handleCommand() throws Exception { String commandName = spec.commandLine().getCommandName(); - Function proofReaderFn = switch (commandName) { - case "apple-checker" -> NibbleAppleChecker::new; - case "checkit" -> NibbleCheckit::new; - case "kp2", "key-perfect-2" -> MicrosparcKeyPerfect2::new; - case "kp4", "key-perfect-4" -> MicrosparcKeyPerfect4::new; - case "kp5", "key-perfect-5" -> MicrosparcKeyPerfect5::new; - case "proofreader" -> ComputeAutomaticProofreader::new; - default -> throw new UnmatchedArgumentException(spec.commandLine(), "Unknown subcommand: " + commandName); - }; + Function proofReaderFn = PROOF_READER_FNS.getOrDefault(commandName, key -> { + throw new UnmatchedArgumentException(spec.commandLine(), "Unknown subcommand: " + key); + }); return handle(proofReaderFn); } }