1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
package com.lexicalscope.jewel.cli; |
16 | |
|
17 | |
import static com.lexicalscope.fluentreflection.FluentReflection.type; |
18 | |
|
19 | |
import com.lexicalscope.fluentreflection.FluentClass; |
20 | |
import com.lexicalscope.jewel.cli.specification.OptionsSpecification; |
21 | |
|
22 | |
class CliInstanceImpl<O> extends AbstractCliImpl<O> { |
23 | |
private final O options; |
24 | |
|
25 | |
public CliInstanceImpl(final O options) { |
26 | 16 | this(options, (FluentClass<O>) type(options.getClass())); |
27 | 16 | } |
28 | |
|
29 | |
public CliInstanceImpl(final O options, final FluentClass<O> type) { |
30 | 16 | super(type, createOptionSpecification(type)); |
31 | 16 | this.options = options; |
32 | 16 | } |
33 | |
|
34 | |
private static <O> OptionsSpecification<O> createOptionSpecification(final FluentClass<O> klass) { |
35 | 16 | return InstanceOptionsSpecificationParser.<O>createOptionsSpecificationImpl(klass); |
36 | |
} |
37 | |
|
38 | |
@Override protected ArgumentPresenterImpl<O> argumentPresenter( |
39 | |
final FluentClass<O> klass, |
40 | |
final OptionsSpecification<O> specification) { |
41 | 14 | return new ArgumentPresenterImpl<O>(specification, new InstanceArgumentPresentingStrategy<O>( |
42 | |
specification, |
43 | |
klass, |
44 | |
options)); |
45 | |
} |
46 | |
} |