44
55import java .io .PrintStream ;
66
7- import static javax .lang .model .element .Modifier .PRIVATE ;
8- import static javax .lang .model .element .Modifier .STATIC ;
7+ import static javax .lang .model .element .Modifier .*;
98import static net .jbock .com .squareup .javapoet .TypeName .INT ;
109import static net .jbock .compiler .Constants .STRING ;
1110import static net .jbock .compiler .Util .optionalOf ;
@@ -59,105 +58,106 @@ static Parser create(Context context) {
5958 }
6059
6160 TypeSpec define () {
62- ParameterSpec outParam = ParameterSpec .builder (out .type , out .name ).build ();
63- ParameterSpec indentParam = ParameterSpec .builder (indent .type , indent .name ).build ();
64-
65- return TypeSpec .classBuilder (context .generatedClass )
66- .addMethod (MethodSpec .methodBuilder ("out" )
67- .addParameter (outParam )
68- .addStatement ("this.$N = $N" , out , outParam )
69- .addStatement ("return this" )
70- .returns (context .generatedClass )
71- .build ())
72- .addMethod (MethodSpec .methodBuilder ("indent" )
73- .addParameter (indentParam )
74- .addStatement ("this.$N = $N" , indent , indentParam )
75- .addStatement ("return this" )
76- .returns (context .generatedClass )
77- .build ())
61+ TypeSpec .Builder spec = TypeSpec .classBuilder (context .generatedClass );
62+ if (context .sourceType .getModifiers ().contains (PUBLIC )) {
63+ spec .addModifiers (PUBLIC );
64+ }
65+ return spec .addMethod (addPublicIfNecessary (outMethod ()))
66+ .addMethod (addPublicIfNecessary (indentMethod ()))
7867 .addType (builder .define ())
7968 .addType (helper .define ())
8069 .addType (option .define ())
8170 .addType (impl .define ())
8271 .addType (option .optionType .define ())
8372 .addField (out )
8473 .addField (indent )
85- .addMethod (createMethod ())
86- .addMethod (parseMethod ())
87- .addMethod (parseOrExitMethodConvenience ())
88- .addMethod (parseOrExitMethod ())
74+ .addMethod (addPublicIfNecessary ( createMethod () ))
75+ .addMethod (addPublicIfNecessary ( parseMethod () ))
76+ .addMethod (addPublicIfNecessary ( parseOrExitMethodConvenience () ))
77+ .addMethod (addPublicIfNecessary ( parseOrExitMethod () ))
8978 .addMethod (MethodSpec .constructorBuilder ().addModifiers (PRIVATE ).build ())
9079 .addJavadoc (javadoc ())
9180 .build ();
9281 }
9382
94- private MethodSpec parseMethod () {
83+ private MethodSpec .Builder indentMethod () {
84+ ParameterSpec indentParam = ParameterSpec .builder (indent .type , indent .name ).build ();
85+ return MethodSpec .methodBuilder ("indent" )
86+ .addParameter (indentParam )
87+ .addStatement ("this.$N = $N" , indent , indentParam )
88+ .addStatement ("return this" )
89+ .returns (context .generatedClass );
90+ }
91+
92+ private MethodSpec .Builder outMethod () {
93+ ParameterSpec outParam = ParameterSpec .builder (out .type , out .name ).build ();
94+ return MethodSpec .methodBuilder ("out" )
95+ .addParameter (outParam )
96+ .addStatement ("this.$N = $N" , out , outParam )
97+ .addStatement ("return this" )
98+ .returns (context .generatedClass );
99+ }
100+
101+ private MethodSpec .Builder parseMethod () {
95102
96103 ParameterSpec args = ParameterSpec .builder (ArrayTypeName .of (STRING ), "args" )
97104 .build ();
98- MethodSpec .Builder builder = MethodSpec .methodBuilder ("parse" );
105+ MethodSpec .Builder spec = MethodSpec .methodBuilder ("parse" );
99106
100- ParameterSpec parser = ParameterSpec .builder (this . builder .type , "parser" ).build ();
101- builder .addStatement ("$T $N = new $T($N, $N)" , parser .type , parser , parser .type , out , indent );
102- builder .addStatement ("return $N.parse($N)" , parser , args );
107+ ParameterSpec parser = ParameterSpec .builder (builder .type , "parser" ).build ();
108+ spec .addStatement ("$T $N = new $T($N, $N)" , parser .type , parser , parser .type , out , indent );
109+ spec .addStatement ("return $N.parse($N)" , parser , args );
103110
104- return builder
105- .addParameter (args )
106- .returns (optionalOf (TypeName .get (context .sourceType .asType ())))
107- .build ();
111+ return spec .addParameter (args )
112+ .returns (optionalOf (TypeName .get (context .sourceType .asType ())));
108113 }
109114
110115
111- private MethodSpec parseOrExitMethodConvenience () {
116+ private MethodSpec . Builder parseOrExitMethodConvenience () {
112117
113118 ParameterSpec args = ParameterSpec .builder (ArrayTypeName .of (STRING ), "args" )
114119 .build ();
115- MethodSpec .Builder builder = MethodSpec .methodBuilder (METHOD_NAME_PARSE_OR_EXIT );
120+ MethodSpec .Builder spec = MethodSpec .methodBuilder (METHOD_NAME_PARSE_OR_EXIT );
116121
117- builder .addStatement ("return parseOrExit($N, $L)" , args , DEFAULT_EXITCODE_ON_ERROR );
122+ spec .addStatement ("return parseOrExit($N, $L)" , args , DEFAULT_EXITCODE_ON_ERROR );
118123
119- return builder
120- .addParameter (args )
121- .returns (TypeName .get (context .sourceType .asType ()))
122- .build ();
124+ return spec .addParameter (args )
125+ .returns (TypeName .get (context .sourceType .asType ()));
123126 }
124127
125- private MethodSpec parseOrExitMethod () {
128+ private MethodSpec . Builder parseOrExitMethod () {
126129
127130 ParameterSpec args = ParameterSpec .builder (ArrayTypeName .of (STRING ), "args" )
128131 .build ();
129132 ParameterSpec statusIfError = ParameterSpec .builder (TypeName .INT , "statusIfError" )
130133 .build ();
131134 ParameterSpec result = ParameterSpec .builder (optionalOf (TypeName .get (context .sourceType .asType ())), "result" )
132135 .build ();
133- MethodSpec .Builder builder = MethodSpec .methodBuilder (METHOD_NAME_PARSE_OR_EXIT );
136+ MethodSpec .Builder spec = MethodSpec .methodBuilder (METHOD_NAME_PARSE_OR_EXIT );
134137
135- ParameterSpec parser = ParameterSpec .builder (this . builder .type , "parser" ).build ();
138+ ParameterSpec parser = ParameterSpec .builder (builder .type , "parser" ).build ();
136139
137- builder .addStatement ("$T $N = new $T($N, $N)" , parser .type , parser , parser .type , out , indent );
138- builder .addStatement ("$T $N = $N.parse($N)" , result .type , result , parser , args );
140+ spec .addStatement ("$T $N = new $T($N, $N)" , parser .type , parser , parser .type , out , indent );
141+ spec .addStatement ("$T $N = $N.parse($N)" , result .type , result , parser , args );
139142
140- builder .beginControlFlow ("if ($N.isPresent())" , result )
143+ spec .beginControlFlow ("if ($N.isPresent())" , result )
141144 .addStatement ("return $N.get()" , result )
142145 .endControlFlow ();
143146
144- builder .addStatement ("$T.exit($N)" , System .class , statusIfError );
145- builder .addStatement ("throw new $T($S)" , IllegalStateException .class , "We should never get here." );
147+ spec .addStatement ("$T.exit($N)" , System .class , statusIfError );
148+ spec .addStatement ("throw new $T($S)" , IllegalStateException .class , "We should never get here." );
146149
147- return builder
148- .addParameter (args )
150+ return spec .addParameter (args )
149151 .addParameter (statusIfError )
150- .returns (TypeName .get (context .sourceType .asType ()))
151- .build ();
152+ .returns (TypeName .get (context .sourceType .asType ()));
152153 }
153154
154155
155- private MethodSpec createMethod () {
156+ private MethodSpec . Builder createMethod () {
156157 MethodSpec .Builder builder = MethodSpec .methodBuilder ("create" );
157158 builder .addStatement ("return new $T()" , context .generatedClass );
158159 return builder .addModifiers (STATIC )
159- .returns (context .generatedClass )
160- .build ();
160+ .returns (context .generatedClass );
161161 }
162162
163163
@@ -166,4 +166,11 @@ private CodeBlock javadoc() {
166166 "@see <a href=\" https://github.com/h908714124/jbock\" >jbock on github</a>\n " ,
167167 Processor .class .getName ()).build ();
168168 }
169+
170+ private MethodSpec addPublicIfNecessary (MethodSpec .Builder spec ) {
171+ if (context .sourceType .getModifiers ().contains (PUBLIC )) {
172+ return spec .addModifiers (PUBLIC ).build ();
173+ }
174+ return spec .build ();
175+ }
169176}
0 commit comments