Skip to content

Commit a7d8935

Browse files
author
h908714124
committed
generate toString
1 parent 9749212 commit a7d8935

4 files changed

Lines changed: 24 additions & 2 deletions

File tree

compiler/src/main/java/net/jbock/writing/ImplClass.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222

2323
import java.util.ArrayList;
2424
import java.util.List;
25+
import java.util.StringJoiner;
2526
import java.util.function.Supplier;
2627

2728
import static java.util.stream.Collectors.toList;
2829
import static javax.lang.model.element.Modifier.FINAL;
2930
import static javax.lang.model.element.Modifier.PRIVATE;
31+
import static javax.lang.model.element.Modifier.PUBLIC;
3032
import static javax.lang.model.element.Modifier.STATIC;
3133
import static net.jbock.common.Constants.EITHERS;
3234
import static net.jbock.common.Constants.STRING;
@@ -55,6 +57,7 @@ TypeSpec define() {
5557
}
5658
return spec.addModifiers(PRIVATE, STATIC, FINAL)
5759
.addMethod(constructor())
60+
.addMethod(generateToString())
5861
.addFields(allMappings().stream()
5962
.map(Mapping::field)
6063
.collect(toList()))
@@ -101,6 +104,24 @@ private MethodSpec constructor() {
101104
.build();
102105
}
103106

107+
private MethodSpec generateToString() {
108+
MethodSpec.Builder spec = MethodSpec.methodBuilder("toString").addModifiers(PUBLIC);
109+
spec.addAnnotation(Override.class);
110+
ParameterSpec joiner = ParameterSpec.builder(StringJoiner.class, "joiner").build();
111+
spec.addStatement("$T $N = new $T($S, $S, $S)", StringJoiner.class, joiner, StringJoiner.class,
112+
", ", "{", "}");
113+
for (int i = 0; i < namedOptions().size(); i++) {
114+
Mapping<Option> m = namedOptions().get(i);
115+
spec.addStatement("$N.add($S + $N)", joiner, m.field().name + ": ", m.field());
116+
}
117+
for (int i = 0; i < positionalParameters().size(); i++) {
118+
Mapping<Parameter> m = positionalParameters().get(i);
119+
spec.addStatement("$N.add($S + $N)", joiner, m.field().name + ": ", m.field());
120+
}
121+
spec.addStatement("return $N.toString()", joiner);
122+
return spec.returns(String.class).build();
123+
}
124+
104125
private CodeBlock convertExpressionOption(Mapping<Option> m, int i) {
105126
List<CodeBlock> code = new ArrayList<>();
106127
code.add(CodeBlock.of("$N.option($T.$N)", result(),

gradle/wrapper/gradle-wrapper.jar

346 Bytes
Binary file not shown.

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

gradlew

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)