private void buildParameters(RoundEnvironment roundEnv, IFactory factory, Map<Element, PositionalParamSpec.Builder> parameters) { Set<? extends Element> explicitParameters = roundEnv.getElementsAnnotatedWith(Parameters.class); for (Element element : explicitParameters) { if (parameters.containsKey(element)) { continue; } TypedMember typedMember = extractTypedMember(element, "@Parameters"); if (typedMember != null) { PositionalParamSpec.Builder builder = PositionalParamSpec.builder(typedMember, factory); builder.completionCandidates(extractCompletionCandidates(element, element.getAnnotationMirrors())); builder.converters(extractConverters(element, element.getAnnotationMirrors())); parameters.put(element, builder); } } }
@Test public void testAddCandidatesForArgsFollowingObject() throws Exception { Method m = AutoComplete.class.getDeclaredMethod("addCandidatesForArgsFollowing", Object.class, List.class); m.setAccessible(true); List<String> candidates = new ArrayList<String>(); m.invoke(null, null, candidates); assertTrue("null Object adds no candidates", candidates.isEmpty()); m.invoke(null, new Object(), candidates); assertTrue("non-PicocliModelObject Object adds no candidates", candidates.isEmpty()); List<String> completions = Arrays.asList("x", "y", "z"); PositionalParamSpec positional = PositionalParamSpec.builder().completionCandidates(completions).build(); m.invoke(null, positional, candidates); assertEquals("PositionalParamSpec adds completion candidates", completions, candidates); }
TypedMember typedMember = new TypedMember(variable, position); PositionalParamSpec.Builder builder = PositionalParamSpec.builder(typedMember, factory); builder.completionCandidates(extractCompletionCandidates(variable, variable.getAnnotationMirrors())); builder.converters(extractConverters(variable, variable.getAnnotationMirrors())); parameters.put(variable, builder);
static PositionalParamSpec extractPositionalParamSpec(TypedMember member, IFactory factory) { PositionalParamSpec.Builder builder = PositionalParamSpec.builder(); initCommon(builder, member); Range arity = Range.parameterArity(member); builder.arity(arity); builder.index(Range.parameterIndex(member)); builder.capacity(Range.parameterCapacity(member)); builder.required(arity.min > 0); Parameters parameters = member.getAnnotation(Parameters.class); builder.interactive(parameters.interactive()); Class<?>[] elementTypes = inferTypes(member.getType(), parameters.type(), member.getGenericType()); builder.auxiliaryTypes(elementTypes); builder.paramLabel(inferLabel(parameters.paramLabel(), member.name(), member.getType(), elementTypes)); builder.hideParamSyntax(parameters.hideParamSyntax()); builder.description(parameters.description()); builder.descriptionKey(parameters.descriptionKey()); builder.splitRegex(parameters.split()); builder.hidden(parameters.hidden()); builder.defaultValue(parameters.defaultValue()); builder.converters(DefaultFactory.createConverter(factory, parameters.converter())); builder.showDefaultValue(parameters.showDefaultValue()); if (!NoCompletionCandidates.class.equals(parameters.completionCandidates())) { builder.completionCandidates(DefaultFactory.createCompletionCandidates(factory, parameters.completionCandidates())); } return builder.build(); } static PositionalParamSpec extractUnannotatedPositionalParamSpec(TypedMember member, IFactory factory) {
@Test public void testAddCandidatesForArgsFollowingObject() throws Exception { Method m = AutoComplete.class.getDeclaredMethod("addCandidatesForArgsFollowing", Object.class, List.class); m.setAccessible(true); List<String> candidates = new ArrayList<String>(); m.invoke(null, null, candidates); assertTrue("null Object adds no candidates", candidates.isEmpty()); m.invoke(null, new Object(), candidates); assertTrue("non-PicocliModelObject Object adds no candidates", candidates.isEmpty()); List<String> completions = Arrays.asList("x", "y", "z"); PositionalParamSpec positional = PositionalParamSpec.builder().completionCandidates(completions).build(); m.invoke(null, positional, candidates); assertEquals("PositionalParamSpec adds completion candidates", completions, candidates); }
@Test public void testCompletionCandidatesValues_forPositionalParamSpec() { CommandSpec spec = CommandSpec.create(); spec.add(PositionalParamSpec.builder().completionCandidates(Arrays.asList("x", "y", "z")).build()); assertEquals(Arrays.asList("x", "y", "z"), extract(spec.positionalParameters().get(0).completionCandidates())); } private static Map<String, String> createLongMap() {
@Test public void testArgSpecBuilderCompletionCandidates() { List<String> candidates = Arrays.asList("a", "b"); PositionalParamSpec.Builder positional = PositionalParamSpec.builder() .completionCandidates(candidates); assertEquals(candidates, positional.completionCandidates()); } }
@Test public void testArgSpecBuilderCompletionCandidates() { List<String> candidates = Arrays.asList("a", "b"); PositionalParamSpec.Builder positional = PositionalParamSpec.builder() .completionCandidates(candidates); assertEquals(candidates, positional.completionCandidates()); }
@Test public void testCompletionCandidatesValues_forPositionalParamSpec() { CommandSpec spec = CommandSpec.create(); spec.add(PositionalParamSpec.builder().completionCandidates(Arrays.asList("x", "y", "z")).build()); assertEquals(Arrays.asList("x", "y", "z"), extract(spec.positionalParameters().get(0).completionCandidates())); } private static Map<String, String> createLongMap() {