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

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.
parent 5e18f994
Branches
Tags
No related merge requests found
...@@ -103,7 +103,7 @@ public final class CommandUtils { ...@@ -103,7 +103,7 @@ public final class CommandUtils {
} }
for (int i = 0; i < parameters.getPositionalParameters().size();) { 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()) { if (remainingArgs.isEmpty()) {
break; break;
} }
...@@ -131,7 +131,7 @@ public final class CommandUtils { ...@@ -131,7 +131,7 @@ public final class CommandUtils {
final ParsedArguments parsed = new ParsedArguments(Collections.emptyMap()); final ParsedArguments parsed = new ParsedArguments(Collections.emptyMap());
for (final PositionalParameter<?> param : parameters.getPositionalParameters()) { for (final Parameter<?> param : parameters.getPositionalParameters()) {
validateSplitParameter(parsed, split.getArguments(), param); validateSplitParameter(parsed, split.getArguments(), param);
} }
......
...@@ -10,17 +10,17 @@ import org.jetbrains.annotations.Nullable; ...@@ -10,17 +10,17 @@ import org.jetbrains.annotations.Nullable;
public final class Parameters { public final class Parameters {
public static final @NotNull Parameters NONE = new Parameters(Collections.emptyList()); 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; 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(); super();
this.positionalParameters = positionalParameters; this.positionalParameters = positionalParameters;
boolean seenOptional = false; boolean seenOptional = false;
boolean seenOnlyLast = 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 isOptional = param instanceof PositionalParameter.OptionalSingle || param instanceof PositionalParameter.OptionalRemainder;
final boolean isOnlyLast = param instanceof PositionalParameter.RequiredRemainder || param instanceof PositionalParameter.OptionalRemainder; final boolean isOnlyLast = param instanceof PositionalParameter.RequiredRemainder || param instanceof PositionalParameter.OptionalRemainder;
if (seenOnlyLast) { if (seenOnlyLast) {
...@@ -36,11 +36,11 @@ public final class Parameters { ...@@ -36,11 +36,11 @@ public final class Parameters {
this.bodyParam = bodyParam; this.bodyParam = bodyParam;
} }
public Parameters(final @NotNull List<PositionalParameter<?>> positionalParameters) { public Parameters(final @NotNull List<Parameter<?>> positionalParameters) {
this(positionalParameters, null); this(positionalParameters, null);
} }
public @NotNull List<PositionalParameter<?>> getPositionalParameters() { public @NotNull List<Parameter<?>> getPositionalParameters() {
return this.positionalParameters; return this.positionalParameters;
} }
......
...@@ -5,44 +5,46 @@ import java.util.Optional; ...@@ -5,44 +5,46 @@ import java.util.Optional;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class PositionalParameter<T> extends Parameter<T> { public final class PositionalParameter {
public static final class RequiredSingle extends PositionalParameter<@NotNull String> { public static final class RequiredSingle extends Parameter<@NotNull String> {
public RequiredSingle(final @NotNull String identifier) { public RequiredSingle(final @NotNull String identifier) {
super(identifier, false, Parameter.Splitter.REGULAR, Parameter.Validator.EXACTLY_ONE); 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) { public OptionalSingle(final @NotNull String identifier) {
super(identifier, false, Parameter.Splitter.REGULAR, Parameter.Validator.ZERO_OR_ONE); 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) { public RequiredMultiple(final @NotNull String identifier) {
super(identifier, true, Parameter.Splitter.REGULAR, Parameter.Validator.ONE_OR_MORE); 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) { public OptionalMultiple(final @NotNull String identifier) {
super(identifier, true, Parameter.Splitter.REGULAR, Parameter.Validator.ZERO_OR_MORE); 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) { public RequiredRemainder(final @NotNull String identifier) {
super(identifier, false, Parameter.Splitter.REMAINDER, Parameter.Validator.EXACTLY_ONE); 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) { public OptionalRemainder(final @NotNull String identifier) {
super(identifier, false, Parameter.Splitter.REMAINDER, Parameter.Validator.ZERO_OR_ONE); 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) { private PositionalParameter() {
super(identifier, repeating, splitter, validator); super();
throw new AssertionError("Utility class");
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment