From d0ba9604c2ef5c2d2ac1de062ea5fd03d73b5424 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Thu, 14 May 2020 18:17:28 +0200
Subject: [PATCH] Remove PositionalParameter (except as a namespace/utility
 class)

At the moment, positional parameters are the only supported kind of
parameter, so the distinction between parameters in general and
positional parameters is not necessary yet, and the current supposedly
generic Parameter class already contains some aspects specific to
positional parameters (e. g. argument splitting). It makes more sense
to merge PositionalParameter into Parameter for now, and work out a
proper common superclass/interface once support for non-positional
parameters (options/flags) is added.

The PositionalParameter class remains for now, but only as a namespace
for the specific parameter classes (PositionalParameter.RequiredSingle,
etc.) - this avoids having to update each reference to the specific
parameter classes for now. The specific parameter classes now extend
Parameter instead of PositionalParameter, but this does not affect most
usages.
---
 .../java/de/prob2/jupyter/CommandUtils.java   |  4 ++--
 .../java/de/prob2/jupyter/Parameters.java     | 10 +++++-----
 .../de/prob2/jupyter/PositionalParameter.java | 20 ++++++++++---------
 3 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/main/java/de/prob2/jupyter/CommandUtils.java b/src/main/java/de/prob2/jupyter/CommandUtils.java
index 4fe551c..0d341be 100644
--- a/src/main/java/de/prob2/jupyter/CommandUtils.java
+++ b/src/main/java/de/prob2/jupyter/CommandUtils.java
@@ -103,7 +103,7 @@ public final class CommandUtils {
 		}
 		
 		for (int i = 0; i < parameters.getPositionalParameters().size();) {
-			final PositionalParameter<?> param = parameters.getPositionalParameters().get(i);
+			final Parameter<?> param = parameters.getPositionalParameters().get(i);
 			if (remainingArgs.isEmpty()) {
 				break;
 			}
@@ -131,7 +131,7 @@ public final class CommandUtils {
 		
 		final ParsedArguments parsed = new ParsedArguments(Collections.emptyMap());
 		
-		for (final PositionalParameter<?> param : parameters.getPositionalParameters()) {
+		for (final Parameter<?> param : parameters.getPositionalParameters()) {
 			validateSplitParameter(parsed, split.getArguments(), param);
 		}
 		
diff --git a/src/main/java/de/prob2/jupyter/Parameters.java b/src/main/java/de/prob2/jupyter/Parameters.java
index d004b35..e61339b 100644
--- a/src/main/java/de/prob2/jupyter/Parameters.java
+++ b/src/main/java/de/prob2/jupyter/Parameters.java
@@ -10,17 +10,17 @@ import org.jetbrains.annotations.Nullable;
 public final class Parameters {
 	public static final @NotNull Parameters NONE = new Parameters(Collections.emptyList());
 	
-	private final @NotNull List<PositionalParameter<?>> positionalParameters;
+	private final @NotNull List<Parameter<?>> positionalParameters;
 	private final @Nullable PositionalParameter.RequiredRemainder bodyParam;
 	
-	public Parameters(final @NotNull List<PositionalParameter<?>> positionalParameters, final @Nullable PositionalParameter.RequiredRemainder bodyParam) {
+	public Parameters(final @NotNull List<Parameter<?>> positionalParameters, final @Nullable PositionalParameter.RequiredRemainder bodyParam) {
 		super();
 		
 		this.positionalParameters = positionalParameters;
 		
 		boolean seenOptional = false;
 		boolean seenOnlyLast = false;
-		for (final PositionalParameter<?> param : positionalParameters) {
+		for (final Parameter<?> param : positionalParameters) {
 			final boolean isOptional = param instanceof PositionalParameter.OptionalSingle || param instanceof PositionalParameter.OptionalRemainder;
 			final boolean isOnlyLast = param instanceof PositionalParameter.RequiredRemainder || param instanceof PositionalParameter.OptionalRemainder;
 			if (seenOnlyLast) {
@@ -36,11 +36,11 @@ public final class Parameters {
 		this.bodyParam = bodyParam;
 	}
 	
-	public Parameters(final @NotNull List<PositionalParameter<?>> positionalParameters) {
+	public Parameters(final @NotNull List<Parameter<?>> positionalParameters) {
 		this(positionalParameters, null);
 	}
 	
-	public @NotNull List<PositionalParameter<?>> getPositionalParameters() {
+	public @NotNull List<Parameter<?>> getPositionalParameters() {
 		return this.positionalParameters;
 	}
 	
diff --git a/src/main/java/de/prob2/jupyter/PositionalParameter.java b/src/main/java/de/prob2/jupyter/PositionalParameter.java
index f6f927c..51fc846 100644
--- a/src/main/java/de/prob2/jupyter/PositionalParameter.java
+++ b/src/main/java/de/prob2/jupyter/PositionalParameter.java
@@ -5,44 +5,46 @@ import java.util.Optional;
 
 import org.jetbrains.annotations.NotNull;
 
-public class PositionalParameter<T> extends Parameter<T> {
-	public static final class RequiredSingle extends PositionalParameter<@NotNull String> {
+public final class PositionalParameter {
+	public static final class RequiredSingle extends Parameter<@NotNull String> {
 		public RequiredSingle(final @NotNull String identifier) {
 			super(identifier, false, Parameter.Splitter.REGULAR, Parameter.Validator.EXACTLY_ONE);
 		}
 	}
 	
-	public static final class OptionalSingle extends PositionalParameter<@NotNull Optional<String>> {
+	public static final class OptionalSingle extends Parameter<@NotNull Optional<String>> {
 		public OptionalSingle(final @NotNull String identifier) {
 			super(identifier, false, Parameter.Splitter.REGULAR, Parameter.Validator.ZERO_OR_ONE);
 		}
 	}
 	
-	public static final class RequiredMultiple extends PositionalParameter<@NotNull List<@NotNull String>> {
+	public static final class RequiredMultiple extends Parameter<@NotNull List<@NotNull String>> {
 		public RequiredMultiple(final @NotNull String identifier) {
 			super(identifier, true, Parameter.Splitter.REGULAR, Parameter.Validator.ONE_OR_MORE);
 		}
 	}
 	
-	public static final class OptionalMultiple extends PositionalParameter<@NotNull List<@NotNull String>> {
+	public static final class OptionalMultiple extends Parameter<@NotNull List<@NotNull String>> {
 		public OptionalMultiple(final @NotNull String identifier) {
 			super(identifier, true, Parameter.Splitter.REGULAR, Parameter.Validator.ZERO_OR_MORE);
 		}
 	}
 	
-	public static final class RequiredRemainder extends PositionalParameter<@NotNull String> {
+	public static final class RequiredRemainder extends Parameter<@NotNull String> {
 		public RequiredRemainder(final @NotNull String identifier) {
 			super(identifier, false, Parameter.Splitter.REMAINDER, Parameter.Validator.EXACTLY_ONE);
 		}
 	}
 	
-	public static final class OptionalRemainder extends PositionalParameter<@NotNull Optional<String>> {
+	public static final class OptionalRemainder extends Parameter<@NotNull Optional<String>> {
 		public OptionalRemainder(final @NotNull String identifier) {
 			super(identifier, false, Parameter.Splitter.REMAINDER, Parameter.Validator.ZERO_OR_ONE);
 		}
 	}
 	
-	public PositionalParameter(final @NotNull String identifier, final boolean repeating, final @NotNull Parameter.Splitter splitter, final @NotNull Parameter.Validator<T> validator) {
-		super(identifier, repeating, splitter, validator);
+	private PositionalParameter() {
+		super();
+		
+		throw new AssertionError("Utility class");
 	}
 }
-- 
GitLab