1
2
3
4
5
6
7
8
9
10
11
12
13
14 package com.lexicalscope.jewel.cli;
15
16 import static ch.lambdaj.Lambda.convert;
17 import static com.lexicalscope.fluentreflection.ReflectionMatchers.*;
18
19 import com.lexicalscope.fluentreflection.FluentClass;
20 import com.lexicalscope.jewel.cli.specification.OptionsSpecification;
21
22 class InstanceOptionsSpecificationParser<O> {
23 private final FluentClass<O> klass;
24
25 InstanceOptionsSpecificationParser(final FluentClass<O> klass) {
26 this.klass = klass;
27 }
28
29 OptionsSpecification<O> buildOptionsSpecification() {
30 return new OptionsSpecificationImpl<O>(klass,
31 convert(
32 klass.methods(isMutator().and(annotatedWith(Option.class))),
33 new ConvertSetterMethodToParsedOptionSpecification(klass)),
34 convert(
35 klass.methods(isMutator().and(annotatedWith(Unparsed.class))),
36 new ConvertUnparsedSetterMethodToUnparsedOptionSpecification(klass)));
37 }
38
39 static <O> OptionsSpecification<O> createOptionsSpecificationImpl(final FluentClass<O> klass) {
40 return new InstanceOptionsSpecificationParser<O>(klass).buildOptionsSpecification();
41 }
42 }