99import net .jbock .util .AtFileError ;
1010import net .jbock .util .ParseRequest ;
1111
12+ import java .util .List ;
13+
1214import static io .jbock .javapoet .MethodSpec .methodBuilder ;
1315import static io .jbock .javapoet .ParameterSpec .builder ;
16+ import static net .jbock .common .Constants .LIST_OF_STRING ;
1417import static net .jbock .common .Constants .STRING ;
1518
1619final class ParseOrExitMethod extends HasCommandRepresentation {
@@ -33,26 +36,44 @@ final class ParseOrExitMethod extends HasCommandRepresentation {
3336
3437 MethodSpec define () {
3538
36- ParameterSpec args = builder (ArrayTypeName .of (STRING ), "args" ).build ();
39+ ParameterSpec args = parseOrExitMethodAcceptsList () ?
40+ builder (LIST_OF_STRING , "args" ).build () :
41+ builder (ArrayTypeName .of (STRING ), "args" ).build ();
3742 ParameterSpec notSuccess = builder (generatedTypes .parseResultType (), "failure" ).build ();
3843 ParameterSpec err = builder (AtFileError .class , "err" ).build ();
3944
4045 CodeBlock .Builder code = CodeBlock .builder ();
41- code .beginControlFlow ("if ($1N.length > 0 && $2S.equals($1N[0]))" , args , "--help" )
42- .add ("$T.builder().build()\n " , StandardErrorHandler .class ).indent ()
46+ if (parseOrExitMethodAcceptsList ()) {
47+ code .beginControlFlow ("if (!$1N.isEmpty() && $2S.equals($1N.get(0)))" , args , "--help" );
48+ } else {
49+ code .beginControlFlow ("if ($1N.length > 0 && $2S.equals($1N[0]))" , args , "--help" );
50+ }
51+ code .add ("$T.builder().build()\n " , StandardErrorHandler .class ).indent ()
4352 .add (".printUsageDocumentation($N());\n " , createModelMethod .get ()).unindent ()
4453 .addStatement ("$T.exit(0)" , System .class )
4554 .endControlFlow ();
4655
47- code .add ("return $T.from($N).expand()\n " , ParseRequest .class , args ).indent ()
48- .add (".mapLeft($1N -> $1N.addModel($2N()))\n " , err , createModelMethod .get ())
49- .add (".flatMap(this::$N)\n " , parseMethod .get ())
50- .add (".orElseThrow($N -> {\n " , notSuccess ).indent ()
51- .addStatement ("$T.builder().build().printErrorMessage($N)" ,
52- StandardErrorHandler .class , notSuccess )
53- .addStatement ("$T.exit(1)" , System .class )
54- .addStatement ("return new $T()" , RuntimeException .class ).unindent ()
55- .addStatement ("})" ).unindent ();
56+ if (enableAtFileExpansion ()) {
57+ code .add ("return $T.from($N).expand()\n " , ParseRequest .class , args ).indent ()
58+ .add (".mapLeft($1N -> $1N.addModel($2N()))\n " , err , createModelMethod .get ())
59+ .add (".flatMap(this::$N)\n " , parseMethod .get ())
60+ .add (".orElseThrow($N -> {\n " , notSuccess ).indent ()
61+ .addStatement ("$T.builder().build().printErrorMessage($N)" ,
62+ StandardErrorHandler .class , notSuccess )
63+ .addStatement ("$T.exit(1)" , System .class )
64+ .addStatement ("return new $T()" , RuntimeException .class ).unindent ()
65+ .addStatement ("})" ).unindent ();
66+ } else {
67+ CodeBlock pArgs = parseOrExitMethodAcceptsList () ?
68+ CodeBlock .of ("$N" , args ) :
69+ CodeBlock .of ("$T.of($N)" , List .class , args );
70+ code .add ("return parse($L).orElseThrow($N -> {\n " , pArgs , notSuccess ).indent ()
71+ .addStatement ("$T.builder().build().printErrorMessage($N)" ,
72+ StandardErrorHandler .class , notSuccess )
73+ .addStatement ("$T.exit(1)" , System .class )
74+ .addStatement ("return new $T()" , RuntimeException .class ).unindent ()
75+ .addStatement ("})" );
76+ }
5677 return methodBuilder ("parseOrExit" ).addParameter (args )
5778 .addModifiers (sourceElement ().accessModifiers ())
5879 .returns (generatedTypes .sourceElement ().typeName ())
0 commit comments