From 68e03c8f0816bf13e9e36403ba690887614caa07 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Mon, 25 Jun 2018 14:27:52 +0200
Subject: [PATCH] Change Command interface to require the complete method

Almost all command implement code completion, so the default method
isn't really necessary.
---
 src/main/java/de/prob2/jupyter/commands/BrowseCommand.java | 7 +++++++
 src/main/java/de/prob2/jupyter/commands/Command.java       | 4 +---
 src/main/java/de/prob2/jupyter/commands/GroovyCommand.java | 7 +++++++
 src/main/java/de/prob2/jupyter/commands/RenderCommand.java | 7 +++++++
 src/main/java/de/prob2/jupyter/commands/ShowCommand.java   | 7 +++++++
 .../java/de/prob2/jupyter/commands/VersionCommand.java     | 7 +++++++
 6 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java b/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java
index 64756f2..050c1df 100644
--- a/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java
+++ b/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java
@@ -20,9 +20,11 @@ import de.prob.statespace.Transition;
 import de.prob2.jupyter.ProBKernel;
 import de.prob2.jupyter.UserErrorException;
 
+import io.github.spencerpark.jupyter.kernel.ReplacementOptions;
 import io.github.spencerpark.jupyter.kernel.display.DisplayData;
 
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import se.sawano.java.text.AlphanumericComparator;
 
@@ -86,4 +88,9 @@ public final class BrowseCommand implements Command {
 		}
 		return new DisplayData(sb.toString());
 	}
+	
+	@Override
+	public @Nullable ReplacementOptions complete(final @NotNull ProBKernel kernel, final @NotNull String argString, final int at) {
+		return null;
+	}
 }
diff --git a/src/main/java/de/prob2/jupyter/commands/Command.java b/src/main/java/de/prob2/jupyter/commands/Command.java
index 460e403..5f30dd6 100644
--- a/src/main/java/de/prob2/jupyter/commands/Command.java
+++ b/src/main/java/de/prob2/jupyter/commands/Command.java
@@ -15,7 +15,5 @@ public interface Command {
 	
 	public abstract @Nullable DisplayData run(final @NotNull ProBKernel kernel, final @NotNull String argString);
 	
-	public default @Nullable ReplacementOptions complete(final @NotNull ProBKernel kernel, final @NotNull String argString, final int at) {
-		return null;
-	}
+	public abstract @Nullable ReplacementOptions complete(final @NotNull ProBKernel kernel, final @NotNull String argString, final int at);
 }
diff --git a/src/main/java/de/prob2/jupyter/commands/GroovyCommand.java b/src/main/java/de/prob2/jupyter/commands/GroovyCommand.java
index 7e5e895..3d28c1a 100644
--- a/src/main/java/de/prob2/jupyter/commands/GroovyCommand.java
+++ b/src/main/java/de/prob2/jupyter/commands/GroovyCommand.java
@@ -11,9 +11,11 @@ import de.prob.scripting.ScriptEngineProvider;
 
 import de.prob2.jupyter.ProBKernel;
 
+import io.github.spencerpark.jupyter.kernel.ReplacementOptions;
 import io.github.spencerpark.jupyter.kernel.display.DisplayData;
 
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public final class GroovyCommand implements Command {
 	private final @NotNull ScriptEngine groovyScriptEngine;
@@ -48,4 +50,9 @@ public final class GroovyCommand implements Command {
 		}
 		return new DisplayData(Objects.toString(result));
 	}
+	
+	@Override
+	public @Nullable ReplacementOptions complete(final @NotNull ProBKernel kernel, final @NotNull String argString, final int at) {
+		return null;
+	}
 }
diff --git a/src/main/java/de/prob2/jupyter/commands/RenderCommand.java b/src/main/java/de/prob2/jupyter/commands/RenderCommand.java
index 9da84ed..0965634 100644
--- a/src/main/java/de/prob2/jupyter/commands/RenderCommand.java
+++ b/src/main/java/de/prob2/jupyter/commands/RenderCommand.java
@@ -5,9 +5,11 @@ import com.google.inject.Inject;
 import de.prob2.jupyter.ProBKernel;
 import de.prob2.jupyter.UserErrorException;
 
+import io.github.spencerpark.jupyter.kernel.ReplacementOptions;
 import io.github.spencerpark.jupyter.kernel.display.DisplayData;
 
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public final class RenderCommand implements Command {
 	@Inject
@@ -40,4 +42,9 @@ public final class RenderCommand implements Command {
 		data.putData(mimeType, code);
 		return data;
 	}
+	
+	@Override
+	public @Nullable ReplacementOptions complete(final @NotNull ProBKernel kernel, final @NotNull String argString, final int at) {
+		return null;
+	}
 }
diff --git a/src/main/java/de/prob2/jupyter/commands/ShowCommand.java b/src/main/java/de/prob2/jupyter/commands/ShowCommand.java
index 9b84ad1..fd8dc29 100644
--- a/src/main/java/de/prob2/jupyter/commands/ShowCommand.java
+++ b/src/main/java/de/prob2/jupyter/commands/ShowCommand.java
@@ -12,9 +12,11 @@ import de.prob.statespace.Trace;
 import de.prob2.jupyter.ProBKernel;
 import de.prob2.jupyter.UserErrorException;
 
+import io.github.spencerpark.jupyter.kernel.ReplacementOptions;
 import io.github.spencerpark.jupyter.kernel.display.DisplayData;
 
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public final class ShowCommand implements Command {
 	private final @NotNull AnimationSelector animationSelector;
@@ -69,4 +71,9 @@ public final class ShowCommand implements Command {
 		result.putMarkdown(tableBuilder.toString());
 		return result;
 	}
+	
+	@Override
+	public @Nullable ReplacementOptions complete(final @NotNull ProBKernel kernel, final @NotNull String argString, final int at) {
+		return null;
+	}
 }
diff --git a/src/main/java/de/prob2/jupyter/commands/VersionCommand.java b/src/main/java/de/prob2/jupyter/commands/VersionCommand.java
index 82348bf..ad3d097 100644
--- a/src/main/java/de/prob2/jupyter/commands/VersionCommand.java
+++ b/src/main/java/de/prob2/jupyter/commands/VersionCommand.java
@@ -8,9 +8,11 @@ import de.prob.statespace.AnimationSelector;
 
 import de.prob2.jupyter.ProBKernel;
 
+import io.github.spencerpark.jupyter.kernel.ReplacementOptions;
 import io.github.spencerpark.jupyter.kernel.display.DisplayData;
 
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public final class VersionCommand implements Command {
 	private final @NotNull AnimationSelector animationSelector;
@@ -38,4 +40,9 @@ public final class VersionCommand implements Command {
 		this.animationSelector.getCurrentTrace().getStateSpace().execute(cmd);
 		return new DisplayData(String.format("ProB CLI: %s\nProB 2: %s (%s)", cmd.getVersion(), Main.getVersion(), Main.getGitSha()));
 	}
+	
+	@Override
+	public @Nullable ReplacementOptions complete(final @NotNull ProBKernel kernel, final @NotNull String argString, final int at) {
+		return null;
+	}
 }
-- 
GitLab