From 28932b0535f4e13f454b638065775b2195542e3d Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Mon, 18 Jun 2018 14:00:14 +0200
Subject: [PATCH] Allow returning null from Command.run

---
 src/main/java/de/prob2/jupyter/ProBKernel.java           | 7 ++++---
 src/main/java/de/prob2/jupyter/commands/Command.java     | 3 ++-
 src/main/java/de/prob2/jupyter/commands/TimeCommand.java | 3 ++-
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/prob2/jupyter/ProBKernel.java b/src/main/java/de/prob2/jupyter/ProBKernel.java
index 580a7cb..31ad1a0 100644
--- a/src/main/java/de/prob2/jupyter/ProBKernel.java
+++ b/src/main/java/de/prob2/jupyter/ProBKernel.java
@@ -45,6 +45,7 @@ import io.github.spencerpark.jupyter.kernel.display.DisplayData;
 import io.github.spencerpark.jupyter.kernel.display.mime.MIMEType;
 
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -168,7 +169,7 @@ public final class ProBKernel extends BaseKernel {
 		return Collections.singletonList(new LanguageInfo.Help("ProB User Manual", "https://www3.hhu.de/stups/prob/index.php/User_Manual"));
 	}
 	
-	private @NotNull DisplayData executeCommand(final @NotNull String name, final @NotNull String argString) {
+	private @Nullable DisplayData executeCommand(final @NotNull String name, final @NotNull String argString) {
 		final Command command = this.getCommands().get(name);
 		if (command == null) {
 			throw new NoSuchCommandException(name);
@@ -180,7 +181,7 @@ public final class ProBKernel extends BaseKernel {
 			throw new CommandExecutionException(name, e);
 		}
 		
-		if (result.hasDataForType(MARKDOWN_MIME_TYPE)) {
+		if (result != null && result.hasDataForType(MARKDOWN_MIME_TYPE)) {
 			// Add definitions for any used bsymb LaTeX commands to Markdown output.
 			final String markdown = (String)result.getData(MARKDOWN_MIME_TYPE);
 			final StringBuilder defs = new StringBuilder();
@@ -197,7 +198,7 @@ public final class ProBKernel extends BaseKernel {
 	}
 	
 	@Override
-	public @NotNull DisplayData eval(final String expr) {
+	public @Nullable DisplayData eval(final String expr) {
 		assert expr != null;
 		
 		final Matcher commandMatcher = COMMAND_PATTERN.matcher(expr);
diff --git a/src/main/java/de/prob2/jupyter/commands/Command.java b/src/main/java/de/prob2/jupyter/commands/Command.java
index 662e0a9..c55ed79 100644
--- a/src/main/java/de/prob2/jupyter/commands/Command.java
+++ b/src/main/java/de/prob2/jupyter/commands/Command.java
@@ -5,11 +5,12 @@ import de.prob2.jupyter.ProBKernel;
 import io.github.spencerpark.jupyter.kernel.display.DisplayData;
 
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public interface Command {
 	public abstract @NotNull String getSyntax();
 	
 	public abstract @NotNull String getShortHelp();
 	
-	public abstract @NotNull DisplayData run(final @NotNull ProBKernel kernel, final @NotNull String argString);
+	public abstract @Nullable DisplayData run(final @NotNull ProBKernel kernel, final @NotNull String argString);
 }
diff --git a/src/main/java/de/prob2/jupyter/commands/TimeCommand.java b/src/main/java/de/prob2/jupyter/commands/TimeCommand.java
index 29e38ee..e9afce8 100644
--- a/src/main/java/de/prob2/jupyter/commands/TimeCommand.java
+++ b/src/main/java/de/prob2/jupyter/commands/TimeCommand.java
@@ -7,6 +7,7 @@ import de.prob2.jupyter.ProBKernel;
 import io.github.spencerpark.jupyter.kernel.display.DisplayData;
 
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public final class TimeCommand implements Command {
 	private static final long NANOSECONDS_PER_SECOND = 1000000000L;
@@ -27,7 +28,7 @@ public final class TimeCommand implements Command {
 	}
 	
 	@Override
-	public @NotNull DisplayData run(final @NotNull ProBKernel kernel, final @NotNull String argString) {
+	public @Nullable DisplayData run(final @NotNull ProBKernel kernel, final @NotNull String argString) {
 		final long startTime = System.nanoTime();
 		final DisplayData result = kernel.eval(argString);
 		final long stopTime = System.nanoTime();
-- 
GitLab