private void buildOptions(RoundEnvironment roundEnv, IFactory factory, Map<Element, OptionSpec.Builder> options) { Set<? extends Element> explicitOptions = roundEnv.getElementsAnnotatedWith(Option.class); for (Element element : explicitOptions) { if (options.containsKey(element)) { continue; } TypedMember typedMember = extractTypedMember(element, "@Option"); if (typedMember != null) { OptionSpec.Builder builder = OptionSpec.builder(typedMember, factory); builder.completionCandidates(extractCompletionCandidates(element, element.getAnnotationMirrors())); builder.converters(extractConverters(element, element.getAnnotationMirrors())); options.put(element, builder); } } }
builder.converters(extractConverters(variable, variable.getAnnotationMirrors())); options.put(variable, builder); } else if (!isMixin) {
@Test public void testOptionConvertersOverridesRegisteredTypeConverter() { CommandSpec spec = CommandSpec.create(); spec.addOption(OptionSpec.builder("-c", "--count").paramLabel("COUNT").arity("1").type(int.class).description("number of times to execute").build()); spec.addOption(OptionSpec.builder("-s", "--sql").paramLabel("SQLTYPE").type(int.class).converters( new CommandLineTypeConversionTest.SqlTypeConverter()).description("sql type converter").build()); CommandLine commandLine = new CommandLine(spec); commandLine.parse("-c", "33", "-s", "BLOB"); assertEquals(Integer.valueOf(33), spec.optionsMap().get("-c").getValue()); assertEquals(Integer.valueOf(Types.BLOB), spec.optionsMap().get("-s").getValue()); } @Test
.setter(setter) .getter(getter) .converters(converter) .initialValue("ABC") .showDefaultValue(Visibility.NEVER) assertSame(getter, builder.getter()); assertSame(setter, builder.setter()); assertSame(converter, builder.converters()[0]); assertEquals("ABC", builder.initialValue()); assertEquals(Visibility.NEVER, builder.showDefaultValue());
static OptionSpec extractOptionSpec(TypedMember member, IFactory factory) { Option option = member.getAnnotation(Option.class); OptionSpec.Builder builder = OptionSpec.builder(option.names()); initCommon(builder, member); builder.order(option.order()); builder.help(option.help()); builder.usageHelp(option.usageHelp()); builder.versionHelp(option.versionHelp()); builder.showDefaultValue(option.showDefaultValue()); if (!NoCompletionCandidates.class.equals(option.completionCandidates())) { builder.completionCandidates(DefaultFactory.createCompletionCandidates(factory, option.completionCandidates())); } builder.arity(Range.optionArity(member)); builder.required(option.required()); builder.interactive(option.interactive()); Class<?>[] elementTypes = inferTypes(member.getType(), option.type(), member.getGenericType()); builder.auxiliaryTypes(elementTypes); builder.paramLabel(inferLabel(option.paramLabel(), member.name(), member.getType(), elementTypes)); builder.hideParamSyntax(option.hideParamSyntax()); builder.description(option.description()); builder.descriptionKey(option.descriptionKey()); builder.splitRegex(option.split()); builder.hidden(option.hidden()); builder.defaultValue(option.defaultValue()); builder.converters(DefaultFactory.createConverter(factory, option.converter())); return builder.build(); } static PositionalParamSpec extractPositionalParamSpec(TypedMember member, IFactory factory) {
@Test public void testOptionConvertersOverridesRegisteredTypeConverter() { CommandSpec spec = CommandSpec.create(); spec.addOption(OptionSpec.builder("-c", "--count").paramLabel("COUNT").arity("1").type(int.class).description("number of times to execute").build()); spec.addOption(OptionSpec.builder("-s", "--sql").paramLabel("SQLTYPE").type(int.class).converters( new CommandLineTypeConversionTest.SqlTypeConverter()).description("sql type converter").build()); CommandLine commandLine = new CommandLine(spec); commandLine.parse("-c", "33", "-s", "BLOB"); assertEquals(Integer.valueOf(33), spec.optionsMap().get("-c").getValue()); assertEquals(Integer.valueOf(Types.BLOB), spec.optionsMap().get("-s").getValue()); } @Test
.setter(setter) .getter(getter) .converters(converter) .initialValue("ABC") .showDefaultValue(Visibility.NEVER) assertSame(getter, builder.getter()); assertSame(setter, builder.setter()); assertSame(converter, builder.converters()[0]); assertEquals("ABC", builder.initialValue()); assertEquals(Visibility.NEVER, builder.showDefaultValue());