use of org.lanternpowered.server.inject.Flag in project LanternServer by LanternPowered.
the class OptionObjectProvider method get0.
@Nullable
protected Object get0() {
final Option option = this.injectionPoint.getAnnotation(Option.class);
if (option == null) {
throw new IllegalStateException("Missing @Option annotation.");
}
final Flag flag = this.injectionPoint.getAnnotation(Flag.class);
if (flag != null && !this.type.isSupertypeOf(Boolean.class)) {
throw new IllegalStateException("The @Flag annotation can only be used for boolean options.");
}
final List<String> arguments = Arrays.asList(option.value());
final OptionSpecBuilder builder = this.optionParser.acceptsAll(arguments, option.description());
final OptionSpec optionSpec;
if (flag != null) {
optionSpec = builder;
} else {
optionSpec = builder.withRequiredArg().withValuesConvertedBy(this.typeConverter());
}
final OptionSet optionSet = this.optionParser.parse(this.arguments);
if (flag != null) {
return optionSet.has(optionSpec);
} else {
final Object object = optionSet.valueOf(optionSpec);
if (this.injectionPoint.getType().getRawType() == boolean.class && object == null) {
return false;
} else {
return object;
}
}
}
Aggregations