Skip to content
Snippets Groups Projects
Commit e1266bcd authored by dgelessus's avatar dgelessus
Browse files

Store command names in command classes instead of ProBKernel

This way all information about a command is in a single place.
The ProBKernel class now only needs to contain a list of all commands
that exist, and all other information is obtained from the command
objects.
parent be1480e2
No related branches found
No related tags found
No related merge requests found
Showing
with 128 additions and 30 deletions
......@@ -16,6 +16,11 @@ public final class BsymbCommand implements Command {
super();
}
@Override
public @NotNull String getName() {
return ":bsymb";
}
@Override
public @NotNull String getSyntax() {
return ":bsymb";
......
......@@ -4,6 +4,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
......@@ -75,6 +76,38 @@ public final class ProBKernel extends BaseKernel {
private static final @NotNull Pattern BSYMB_COMMAND_PATTERN = Pattern.compile("\\\\([a-z]+)");
private static final @NotNull Pattern LATEX_FORMULA_PATTERN = Pattern.compile("(\\$\\$?)([^\\$]+)\\1");
private static final @NotNull Collection<@NotNull Class<? extends Command>> COMMAND_CLASSES = Collections.unmodifiableList(Arrays.asList(
HelpCommand.class,
VersionCommand.class,
EvalCommand.class,
TypeCommand.class,
TableCommand.class,
SolveCommand.class,
LetCommand.class,
UnletCommand.class,
LoadFileCommand.class,
LoadCellCommand.class,
PrefCommand.class,
BrowseCommand.class,
TraceCommand.class,
StatsCommand.class,
ExecCommand.class,
ConstantsCommand.class,
InitialiseCommand.class,
GotoCommand.class,
FindCommand.class,
ShowCommand.class,
DotCommand.class,
AssertCommand.class,
CheckCommand.class,
TimeCommand.class,
GroovyCommand.class,
RenderCommand.class,
BsymbCommand.class,
PrettyPrintCommand.class,
ModelCheckCommand.class
));
private static final @NotNull Map<@NotNull String, @NotNull String> BSYMB_COMMAND_DEFINITIONS;
static {
final Map<String, String> map = new HashMap<>();
......@@ -151,36 +184,9 @@ public final class ProBKernel extends BaseKernel {
this.animationSelector = animationSelector;
this.commands = new HashMap<>();
this.commands.put(":help", injector.getInstance(HelpCommand.class));
this.commands.put(":version", injector.getInstance(VersionCommand.class));
this.commands.put(":eval", injector.getInstance(EvalCommand.class));
this.commands.put(":type", injector.getInstance(TypeCommand.class));
this.commands.put(":table", injector.getInstance(TableCommand.class));
this.commands.put(":solve", injector.getInstance(SolveCommand.class));
this.commands.put(":let", injector.getInstance(LetCommand.class));
this.commands.put(":unlet", injector.getInstance(UnletCommand.class));
this.commands.put(":load", injector.getInstance(LoadFileCommand.class));
this.commands.put("::load", injector.getInstance(LoadCellCommand.class));
this.commands.put(":pref", injector.getInstance(PrefCommand.class));
this.commands.put(":browse", injector.getInstance(BrowseCommand.class));
this.commands.put(":trace", injector.getInstance(TraceCommand.class));
this.commands.put(":stats", injector.getInstance(StatsCommand.class));
this.commands.put(":exec", injector.getInstance(ExecCommand.class));
this.commands.put(":constants", injector.getInstance(ConstantsCommand.class));
this.commands.put(":init", injector.getInstance(InitialiseCommand.class));
this.commands.put(":goto", injector.getInstance(GotoCommand.class));
this.commands.put(":find", injector.getInstance(FindCommand.class));
this.commands.put(":show", injector.getInstance(ShowCommand.class));
this.commands.put(":dot", injector.getInstance(DotCommand.class));
this.commands.put(":assert", injector.getInstance(AssertCommand.class));
this.commands.put(":check", injector.getInstance(CheckCommand.class));
this.commands.put(":time", injector.getInstance(TimeCommand.class));
this.commands.put(":groovy", injector.getInstance(GroovyCommand.class));
this.commands.put("::render", injector.getInstance(RenderCommand.class));
this.commands.put(":bsymb", injector.getInstance(BsymbCommand.class));
this.commands.put(":prettyprint", injector.getInstance(PrettyPrintCommand.class));
this.commands.put(":modelcheck", injector.getInstance(ModelCheckCommand.class));
this.commands = COMMAND_CLASSES.stream()
.map(injector::getInstance)
.collect(Collectors.toMap(Command::getName, cmd -> cmd));
this.variables = new HashMap<>();
......
......@@ -29,6 +29,11 @@ public final class AssertCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":assert";
}
@Override
public @NotNull String getSyntax() {
return ":assert PREDICATE";
......
......@@ -32,6 +32,11 @@ public final class BrowseCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":browse";
}
@Override
public @NotNull String getSyntax() {
return ":browse";
......
......@@ -47,6 +47,11 @@ public final class CheckCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":check";
}
@Override
public @NotNull String getSyntax() {
return ":check WHAT";
......
......@@ -7,6 +7,8 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public interface Command {
public abstract @NotNull String getName();
public abstract @NotNull String getSyntax();
public abstract @NotNull String getShortHelp();
......
......@@ -30,6 +30,11 @@ public final class ConstantsCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":constants";
}
@Override
public @NotNull String getSyntax() {
return ":constants [PREDICATE]";
......
......@@ -40,6 +40,11 @@ public final class DotCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":dot";
}
@Override
public @NotNull String getSyntax() {
return ":dot COMMAND [FORMULA]";
......
......@@ -25,6 +25,11 @@ public final class EvalCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":eval";
}
@Override
public @NotNull String getSyntax() {
return ":eval FORMULA";
......
......@@ -31,6 +31,11 @@ public final class ExecCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":exec";
}
@Override
public @NotNull String getSyntax() {
return ":exec OPERATION [PREDICATE]";
......
......@@ -27,6 +27,11 @@ public final class FindCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":find";
}
@Override
public @NotNull String getSyntax() {
return ":find PREDICATE";
......
......@@ -23,6 +23,11 @@ public final class GotoCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":goto";
}
@Override
public @NotNull String getSyntax() {
return ":goto INDEX";
......
......@@ -30,6 +30,11 @@ public final class GroovyCommand implements Command {
this.groovyScriptEngine = scriptEngineProvider.get();
}
@Override
public @NotNull String getName() {
return ":groovy";
}
@Override
public @NotNull String getSyntax() {
return ":groovy EXPRESSION";
......
......@@ -26,6 +26,11 @@ public final class HelpCommand implements Command {
this.injector = injector;
}
@Override
public @NotNull String getName() {
return ":help";
}
@Override
public @NotNull String getSyntax() {
return ":help [COMMAND]";
......
......@@ -30,6 +30,11 @@ public final class InitialiseCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":init";
}
@Override
public @NotNull String getSyntax() {
return ":init [PREDICATE]";
......
......@@ -30,6 +30,11 @@ public final class LetCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":let";
}
@Override
public @NotNull String getSyntax() {
return ":let NAME EXPR";
......
......@@ -37,6 +37,11 @@ public final class LoadCellCommand implements Command {
this.proBKernelProvider = proBKernelProvider;
}
@Override
public @NotNull String getName() {
return "::load";
}
@Override
public @NotNull String getSyntax() {
return "::load [PREF=VALUE ...]\nMACHINE\n...\nEND";
......
......@@ -49,6 +49,11 @@ public final class LoadFileCommand implements Command {
this.proBKernelProvider = proBKernelProvider;
}
@Override
public @NotNull String getName() {
return ":load";
}
@Override
public @NotNull String getSyntax() {
return ":load FILENAME [PREF=VALUE ...]";
......
......@@ -39,6 +39,11 @@ public final class ModelCheckCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":modelcheck";
}
@Override
public @NotNull String getSyntax() {
return ":modelcheck";
......
......@@ -30,6 +30,11 @@ public final class PrefCommand implements Command {
this.animationSelector = animationSelector;
}
@Override
public @NotNull String getName() {
return ":pref";
}
@Override
public @NotNull String getSyntax() {
return ":pref [NAME ...]\n:pref NAME=VALUE [NAME=VALUE ...]";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment