Skip to content

Commit 7938165

Browse files
committed
generate public parser class if source type is public
1 parent 52323df commit 7938165

File tree

2 files changed

+61
-54
lines changed

2 files changed

+61
-54
lines changed

core/src/main/java/net/jbock/compiler/Parser.java

Lines changed: 60 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44

55
import 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.*;
98
import static net.jbock.com.squareup.javapoet.TypeName.INT;
109
import static net.jbock.compiler.Constants.STRING;
1110
import 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
}

examples/src/test/java/net/jbock/examples/fixture/ParserTestFixture.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public JsonAssert<E> assertThat(String... args) {
128128
public E parse(String... args) {
129129
ByteArrayOutputStream baos = new ByteArrayOutputStream();
130130
PrintStream out = new PrintStream(baos);
131-
return parser.out(out).indent(2).parse(args).get();
131+
return parser.out(out).indent(2).parse(args).orElseThrow(AssertionError::new);
132132
}
133133

134134
public void assertPrints(String... expected) {

0 commit comments

Comments
 (0)