Skip to content

Commit

Permalink
refactor metadata services
Browse files Browse the repository at this point in the history
  • Loading branch information
sigpwned committed Jan 10, 2025
1 parent 4f04005 commit 447a00d
Show file tree
Hide file tree
Showing 8 changed files with 227 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,16 @@
import rapier.cli.CliFlagParameter;
import rapier.cli.CliOptionParameter;
import rapier.cli.CliPositionalParameter;
import rapier.cli.compiler.model.BindingMetadata;
import rapier.cli.compiler.model.CommandHelpMetadata;
import rapier.cli.compiler.model.FlagParameterMetadata;
import rapier.cli.compiler.model.FlagParameterHelp;
import rapier.cli.compiler.model.FlagParameterKey;
import rapier.cli.compiler.model.FlagRepresentationKey;
import rapier.cli.compiler.model.OptionParameterMetadata;
import rapier.cli.compiler.model.OptionParameterHelp;
import rapier.cli.compiler.model.OptionParameterKey;
import rapier.cli.compiler.model.OptionRepresentationKey;
import rapier.cli.compiler.model.PositionalParameterMetadata;
import rapier.cli.compiler.model.PositionalParameterHelp;
import rapier.cli.compiler.model.PositionalParameterKey;
import rapier.cli.compiler.model.PositionalRepresentationKey;
Expand Down Expand Up @@ -410,7 +412,7 @@ private boolean validatePositionalInjectionSites(
continue;
}

final BindingMetadata metadata =
final PositionalParameterMetadata metadata =
positionalMetadataService.getPositionalParameterMetadata(position);

final boolean parameterIsRequired = metadata.isRequired();
Expand Down Expand Up @@ -566,7 +568,7 @@ private SortedMap<PositionalParameterKey, List<DaggerInjectionSite>> extractPosi
private PositionalParameterMetadataService createPositionalParameterMetadataService(
Map<PositionalParameterKey, List<DaggerInjectionSite>> positionalInjectionSites) {
boolean valid = true;
final Map<PositionalParameterKey, BindingMetadata> metadataByPositionalParameter =
final Map<PositionalParameterKey, PositionalParameterMetadata> metadataByPositionalParameter =
new HashMap<>();
for (Map.Entry<PositionalParameterKey, List<DaggerInjectionSite>> entry : positionalInjectionSites
.entrySet()) {
Expand Down Expand Up @@ -628,7 +630,7 @@ private PositionalParameterMetadataService createPositionalParameterMetadataServ
helps.isEmpty() ? Optional.empty() : Optional.of(helps.get(0));

metadataByPositionalParameter.put(pk,
new BindingMetadata(required, listy,
new PositionalParameterMetadata(required, listy,
maybeHelp.map(PositionalParameterHelp::getName).orElse(null),
maybeHelp.flatMap(PositionalParameterHelp::getDescription).orElse(null)));
}
Expand Down Expand Up @@ -666,7 +668,8 @@ private SortedMap<OptionParameterKey, List<DaggerInjectionSite>> extractOptionPa
private OptionParameterMetadataService createOptionParameterMetadataService(
Map<OptionParameterKey, List<DaggerInjectionSite>> optionInjectionSites) {
boolean valid = true;
final Map<OptionParameterKey, BindingMetadata> metadataByOptionParameter = new HashMap<>();
final Map<OptionParameterKey, OptionParameterMetadata> metadataByOptionParameter =
new HashMap<>();
for (Map.Entry<OptionParameterKey, List<DaggerInjectionSite>> entry : optionInjectionSites
.entrySet()) {
final OptionParameterKey pk = entry.getKey();
Expand Down Expand Up @@ -731,7 +734,7 @@ private OptionParameterMetadataService createOptionParameterMetadataService(
helps.isEmpty() ? Optional.empty() : Optional.of(helps.get(0));

metadataByOptionParameter.put(pk,
new BindingMetadata(required, listy,
new OptionParameterMetadata(required, listy,
maybeHelp.map(OptionParameterHelp::getValueName).orElse(null),
maybeHelp.flatMap(OptionParameterHelp::getDescription).orElse(null)));
}
Expand Down Expand Up @@ -773,7 +776,7 @@ private SortedMap<FlagParameterKey, List<DaggerInjectionSite>> extractFlagParame
private FlagParameterMetadataService createFlagParameterMetadataService(
Map<FlagParameterKey, List<DaggerInjectionSite>> flagInjectionSites) {
boolean valid = true;
final Map<FlagParameterKey, BindingMetadata> metadataByFlagParameter = new HashMap<>();
final Map<FlagParameterKey, FlagParameterMetadata> metadataByFlagParameter = new HashMap<>();
for (Map.Entry<FlagParameterKey, List<DaggerInjectionSite>> entry : flagInjectionSites
.entrySet()) {
final FlagParameterKey pk = entry.getKey();
Expand Down Expand Up @@ -843,7 +846,7 @@ private FlagParameterMetadataService createFlagParameterMetadataService(
final Optional<FlagParameterHelp> maybeHelp =
helps.isEmpty() ? Optional.empty() : Optional.of(helps.get(0));

metadataByFlagParameter.put(pk, new BindingMetadata(required, listy, null,
metadataByFlagParameter.put(pk, new FlagParameterMetadata(required, listy,
maybeHelp.flatMap(FlagParameterHelp::getDescription).orElse(null)));
}

Expand Down Expand Up @@ -969,7 +972,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
out.println(" // Positional parameters");
for (PositionalParameterKey ppk : positionalRepresentationsByParameter.keySet()) {
final int position = ppk.getPosition();
final BindingMetadata metadata =
final PositionalParameterMetadata metadata =
positionalMetadataService.getPositionalParameterMetadata(position);
final boolean parameterIsRequired = metadata.isRequired();
final boolean parameterIsList = metadata.isList();
Expand All @@ -983,7 +986,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
for (OptionParameterKey opk : optionRepresentationsByParameter.keySet()) {
final Character optionShortName = opk.getShortName().orElse(null);
final String optionLongName = opk.getLongName().orElse(null);
final BindingMetadata metadata =
final OptionParameterMetadata metadata =
optionMetadataService.getOptionParameterMetadata(optionShortName, optionLongName);
final boolean parameterIsRequired = metadata.isRequired();
final boolean parameterIsList = metadata.isList();
Expand All @@ -999,7 +1002,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
final String flagPositiveLongName = fpk.getPositiveLongName().orElse(null);
final Character flagNegativeShortName = fpk.getNegativeShortName().orElse(null);
final String flagNegativeLongName = fpk.getNegativeLongName().orElse(null);
final BindingMetadata metadata =
final FlagParameterMetadata metadata =
flagMetadataService.getFlagParameterMetadata(flagPositiveShortName,
flagPositiveLongName, flagNegativeShortName, flagNegativeLongName);
final boolean parameterIsRequired = metadata.isRequired();
Expand Down Expand Up @@ -1062,7 +1065,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
out.println(" // Initialize positional parameters");
for (PositionalParameterKey ppk : positionalRepresentationsByParameter.keySet()) {
final int position = ppk.getPosition();
final BindingMetadata metadata =
final PositionalParameterMetadata metadata =
positionalMetadataService.getPositionalParameterMetadata(position);
final boolean parameterIsRequired = metadata.isRequired();
final boolean parameterIsList = metadata.isList();
Expand All @@ -1075,7 +1078,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
for (OptionParameterKey opk : optionRepresentationsByParameter.keySet()) {
final Character optionShortName = opk.getShortName().orElse(null);
final String optionLongName = opk.getLongName().orElse(null);
final BindingMetadata metadata =
final OptionParameterMetadata metadata =
optionMetadataService.getOptionParameterMetadata(optionShortName, optionLongName);
final boolean parameterIsRequired = metadata.isRequired();
final boolean parameterIsList = metadata.isList();
Expand All @@ -1090,7 +1093,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
final String flagPositiveLongName = fpk.getPositiveLongName().orElse(null);
final Character flagNegativeShortName = fpk.getNegativeShortName().orElse(null);
final String flagNegativeLongName = fpk.getNegativeLongName().orElse(null);
final BindingMetadata metadata =
final FlagParameterMetadata metadata =
flagMetadataService.getFlagParameterMetadata(flagPositiveShortName,
flagPositiveLongName, flagNegativeShortName, flagNegativeLongName);
final boolean parameterIsRequired = metadata.isRequired();
Expand Down Expand Up @@ -1169,7 +1172,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
for (Map.Entry<PositionalParameterKey, ? extends Collection<PositionalRepresentationKey>> e : positionalRepresentationsByParameter
.entrySet()) {
final PositionalParameterKey parameter = e.getKey();
final BindingMetadata metadata =
final PositionalParameterMetadata metadata =
positionalMetadataService.getPositionalParameterMetadata(parameter.getPosition());
final Collection<PositionalRepresentationKey> representations = e.getValue();
final int position = parameter.getPosition();
Expand All @@ -1189,7 +1192,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
final OptionParameterKey parameter = e.getKey();
final Character optionShortName = parameter.getShortName().orElse(null);
final String optionLongName = parameter.getLongName().orElse(null);
final BindingMetadata metadata =
final OptionParameterMetadata metadata =
optionMetadataService.getOptionParameterMetadata(optionShortName, optionLongName);
final Collection<OptionRepresentationKey> representations = e.getValue();
final boolean parameterIsRequired = metadata.isRequired();
Expand All @@ -1210,7 +1213,7 @@ private String generateModuleSource(String packageName, String moduleClassName,
final String flagPositiveLongName = parameter.getPositiveLongName().orElse(null);
final Character flagNegativeShortName = parameter.getNegativeShortName().orElse(null);
final String flagNegativeLongName = parameter.getNegativeLongName().orElse(null);
final BindingMetadata metadata =
final FlagParameterMetadata metadata =
flagMetadataService.getFlagParameterMetadata(flagPositiveShortName,
flagPositiveLongName, flagNegativeShortName, flagNegativeLongName);
final Collection<FlagRepresentationKey> representations = e.getValue();
Expand Down Expand Up @@ -2317,12 +2320,12 @@ private void emitStandardHelpMessageMethod(PrintWriter out, CommandHelpMetadata
final FlagParameterMetadataService flagMetadataService0 = flagMetadataService;
flagMetadataService = new FlagParameterMetadataService() {
@Override
public BindingMetadata getFlagParameterMetadata(Character shortPositiveName,
public FlagParameterMetadata getFlagParameterMetadata(Character shortPositiveName,
String positiveLongName, Character negativeShortName, String negativeLongName) {
final FlagParameterKey key = new FlagParameterKey(shortPositiveName, positiveLongName,
negativeShortName, negativeLongName);
if (key.equals(standardHelpFlagParameterKey))
return new BindingMetadata(false, false, "help", "Print this help message and exit");
return new FlagParameterMetadata(false, false, "Print this help message and exit");
return flagMetadataService0.getFlagParameterMetadata(shortPositiveName, positiveLongName,
negativeShortName, negativeLongName);
}
Expand All @@ -2335,12 +2338,12 @@ public BindingMetadata getFlagParameterMetadata(Character shortPositiveName,
final FlagParameterMetadataService flagMetadataService0 = flagMetadataService;
flagMetadataService = new FlagParameterMetadataService() {
@Override
public BindingMetadata getFlagParameterMetadata(Character shortPositiveName,
public FlagParameterMetadata getFlagParameterMetadata(Character shortPositiveName,
String positiveLongName, Character negativeShortName, String negativeLongName) {
final FlagParameterKey key = new FlagParameterKey(shortPositiveName, positiveLongName,
negativeShortName, negativeLongName);
if (key.equals(standardHelpFlagParameterKey))
return new BindingMetadata(false, false, "version", "Print a version message and exit");
return new FlagParameterMetadata(false, false, "Print a version message and exit");
return flagMetadataService0.getFlagParameterMetadata(shortPositiveName, positiveLongName,
negativeShortName, negativeLongName);
}
Expand Down Expand Up @@ -2407,7 +2410,7 @@ public BindingMetadata getFlagParameterMetadata(Character shortPositiveName,
Math.max(HELP_MESSAGE_MAX_WIDTH - maxNameLength - lineIndentLength - borderWidth, 20);

for (PositionalParameterKey parameter : positionalParameters) {
final BindingMetadata metadata =
final PositionalParameterMetadata metadata =
positionalMetadataService.getPositionalParameterMetadata(parameter.getPosition());
final String name = metadata.getHelpName().orElse("PARAMETER");
final String description = metadata.getHelpDescription().orElse("");
Expand Down Expand Up @@ -2452,7 +2455,7 @@ public BindingMetadata getFlagParameterMetadata(Character shortPositiveName,
Math.max(HELP_MESSAGE_MAX_WIDTH - maxNameLength - lineIndentLength - borderWidth, 20);

for (OptionParameterKey parameter : optionParameters) {
final BindingMetadata metadata = optionMetadataService.getOptionParameterMetadata(
final OptionParameterMetadata metadata = optionMetadataService.getOptionParameterMetadata(
parameter.getShortName().orElse(null), parameter.getLongName().orElse(null));
final String name = optionParameterUserFacingString(parameter.getShortName().orElse(null),
parameter.getLongName().orElse(null));
Expand Down Expand Up @@ -2499,7 +2502,7 @@ public BindingMetadata getFlagParameterMetadata(Character shortPositiveName,
Math.max(HELP_MESSAGE_MAX_WIDTH - maxNameLength - lineIndentLength - borderWidth, 20);

for (FlagParameterKey parameter : flagParameters) {
final BindingMetadata metadata = flagMetadataService.getFlagParameterMetadata(
final FlagParameterMetadata metadata = flagMetadataService.getFlagParameterMetadata(
parameter.getPositiveShortName().orElse(null),
parameter.getPositiveLongName().orElse(null),
parameter.getNegativeShortName().orElse(null),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
*/
package rapier.cli.compiler;

import rapier.cli.compiler.model.BindingMetadata;
import rapier.cli.compiler.model.FlagParameterMetadata;

public interface FlagParameterMetadataService {
public BindingMetadata getFlagParameterMetadata(Character shortPositiveName,
public FlagParameterMetadata getFlagParameterMetadata(Character shortPositiveName,
String positiveLongName, Character negativeShortName, String negativeLongName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
*/
package rapier.cli.compiler;

import rapier.cli.compiler.model.BindingMetadata;
import rapier.cli.compiler.model.OptionParameterMetadata;

public interface OptionParameterMetadataService {
public BindingMetadata getOptionParameterMetadata(Character shortName, String longName);
public OptionParameterMetadata getOptionParameterMetadata(Character shortName, String longName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
*/
package rapier.cli.compiler;

import rapier.cli.compiler.model.BindingMetadata;
import rapier.cli.compiler.model.PositionalParameterMetadata;

public interface PositionalParameterMetadataService {
public BindingMetadata getPositionalParameterMetadata(int position);
public PositionalParameterMetadata getPositionalParameterMetadata(int position);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/*-
* =================================LICENSE_START==================================
* rapier-processor-cli
* ====================================SECTION=====================================
* Copyright (C) 2024 - 2025 Andy Boothe
* ====================================SECTION=====================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ==================================LICENSE_END===================================
*/
package rapier.cli.compiler.model;

import java.util.Objects;
import java.util.Optional;

public class FlagParameterMetadata {
private final boolean required;

/**
* For positional bindings, this indicates whether the binding is a varargs "bucket." For named
* and flag bindings, this indicates whether the binding is a list of values.
*/
private final boolean list;

/**
* The description of the parameter for use in the help message
*/
private final String helpDescription;

public FlagParameterMetadata(boolean required, boolean list, String helpDescription) {
this.required = required;
this.list = list;
this.helpDescription = helpDescription;
}

public boolean isRequired() {
return required;
}

public boolean isList() {
return list;
}

public Optional<String> getHelpDescription() {
return Optional.ofNullable(helpDescription);
}

@Override
public int hashCode() {
return Objects.hash(helpDescription, list, required);
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
FlagParameterMetadata other = (FlagParameterMetadata) obj;
return Objects.equals(helpDescription, other.helpDescription) && list == other.list
&& required == other.required;
}

@Override
public String toString() {
return "BindingMetadata [required=" + required + ", list=" + list + ", helpDescription="
+ helpDescription + "]";
}
}
Loading

0 comments on commit 447a00d

Please sign in to comment.