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 this(options, (FluentClass<O>) type(options.getClass()));
27 }
28
29 public CliInstanceImpl(final O options, final FluentClass<O> type) {
30 super(type, createOptionSpecification(type));
31 this.options = options;
32 }
33
34 private static <O> OptionsSpecification<O> createOptionSpecification(final FluentClass<O> klass) {
35 return InstanceOptionsSpecificationParser.<O>createOptionsSpecificationImpl(klass);
36 }
37
38 @Override protected ArgumentPresenterImpl<O> argumentPresenter(
39 final FluentClass<O> klass,
40 final OptionsSpecification<O> specification) {
41 return new ArgumentPresenterImpl<O>(specification, new InstanceArgumentPresentingStrategy<O>(
42 specification,
43 klass,
44 options));
45 }
46 }