Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77c8c738 authored by Jean Chalard's avatar Jean Chalard
Browse files

Remove arity from dicttool commands (A1)

This unnecessarily complicates and limits commands.
It's simpler to just have one command by invocation.

Groundwork for
Bug: 6429606

Change-Id: I24cf267a9cbc937a5ba53942b29e28e7095d2fd2
parent 77e8e81a
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -55,11 +55,10 @@ public class Compress {
            return "compress <filename>: Compresses a file using gzip compression";
        }

        public int getArity() {
            return 1;
        }

        public void run() throws IOException {
            if (mArgs.length < 1) {
                throw new RuntimeException("Not enough arguments for command " + COMMAND);
            }
            final String inFilename = mArgs[0];
            final String outFilename = inFilename + SUFFIX;
            final FileInputStream input = new FileInputStream(new File(inFilename));
@@ -79,11 +78,10 @@ public class Compress {
            return "uncompress <filename>: Uncompresses a file compressed with gzip compression";
        }

        public int getArity() {
            return 1;
        }

        public void run() throws IOException {
            if (mArgs.length < 1) {
                throw new RuntimeException("Not enough arguments for command " + COMMAND);
            }
            final String inFilename = mArgs[0];
            final String outFilename = inFilename + SUFFIX;
            final FileInputStream input = new FileInputStream(new File(inFilename));
+9 −28
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ public class Dicttool {
        public void setArgs(String[] args) throws IllegalArgumentException {
            mArgs = args;
        }
        abstract public int getArity();
        abstract public String getHelp();
        abstract public void run() throws Exception;
    }
@@ -62,40 +61,23 @@ public class Dicttool {
        return sCommands.containsKey(commandName);
    }

    private String mPreviousCommand = null; // local to the getNextCommand function
    private Command getNextCommand(final ArrayList<String> arguments) {
    private Command getCommand(final ArrayList<String> arguments) {
        final String firstArgument = arguments.get(0);
        final String commandName;
        if (isCommand(firstArgument)) {
            commandName = firstArgument;
            arguments.remove(0);
        } else if (isCommand(mPreviousCommand)) {
            commandName = mPreviousCommand;
        } else {
            throw new RuntimeException("Unknown command : " + firstArgument);
        }
        final Command command = getCommandInstance(commandName);
        final int arity = command.getArity();
        if (arguments.size() < arity) {
            throw new RuntimeException("Not enough arguments to command " + commandName);
        }
        final String[] argsArray = new String[arity];
        arguments.subList(0, arity).toArray(argsArray);
        for (int i = 0; i < arity; ++i) {
            // For some reason, ArrayList#removeRange is protected
            arguments.remove(0);
        }
        final String[] argsArray = arguments.toArray(new String[arguments.size()]);
        command.setArgs(argsArray);
        mPreviousCommand = commandName;
        return command;
    }

    private void execute(final ArrayList<String> arguments) {
        ArrayList<Command> commandsToExecute = new ArrayList<Command>();
        while (!arguments.isEmpty()) {
            commandsToExecute.add(getNextCommand(arguments));
        }
        for (final Command command : commandsToExecute) {
        final Command command = getCommand(arguments);
        try {
            command.run();
        } catch (Exception e) {
@@ -104,7 +86,6 @@ public class Dicttool {
            return;
        }
    }
    }

    public static void main(final String[] args) {
        if (0 == args.length) {
+5 −4
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.inputmethod.latin.dicttool;

public class Info extends Dicttool.Command {
    public static final String COMMAND = "info";

    public Info() {
    }

@@ -24,12 +26,11 @@ public class Info extends Dicttool.Command {
        return "info <filename>: prints various information about a dictionary file";
    }

    public int getArity() {
        return 1;
    }

    public void run() {
        // TODO: implement this
        if (mArgs.length < 1) {
            throw new RuntimeException("Not enough arguments for command " + COMMAND);
        }
        System.out.println("Not implemented yet");
    }
}