Search in sources :

Example 1 with Option

use of org.lanternpowered.server.inject.Option 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;
        }
    }
}
Also used : OptionSpec(joptsimple.OptionSpec) OptionSpecBuilder(joptsimple.OptionSpecBuilder) Option(org.lanternpowered.server.inject.Option) OptionSet(joptsimple.OptionSet) Flag(org.lanternpowered.server.inject.Flag) Nullable(javax.annotation.Nullable)

Aggregations

Nullable (javax.annotation.Nullable)1 OptionSet (joptsimple.OptionSet)1 OptionSpec (joptsimple.OptionSpec)1 OptionSpecBuilder (joptsimple.OptionSpecBuilder)1 Flag (org.lanternpowered.server.inject.Flag)1 Option (org.lanternpowered.server.inject.Option)1