summaryrefslogtreecommitdiffstats
path: root/configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java')
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java31
1 files changed, 29 insertions, 2 deletions
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java b/configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java
index bbbb8676e3f..937d04b35bd 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java
@@ -142,7 +142,19 @@ public class BuilderGenerator {
return "public Builder " + n.getName() + "(" + builderType(n) + " " + INTERNAL_PREFIX + "builder) {\n" + //
" " + n.getName() + " = " + INTERNAL_PREFIX + "builder;\n" + //
" return this;\n" + //
+ "}\n" + //
+ "/**\n" + //
+ " * Make a new builder and run the supplied function on it before adding it to the list\n" + //
+ " * @param __func lambda that modifies the given builder\n" + //
+ " * @return this builder\n" + //
+ " */\n" + //
+ "public Builder " + n.getName() + "(java.util.function.Consumer<" + builderType(n) + "> __func) {\n" + //
+ " " + builderType(n) + " __inner = new " + builderType(n) +"();\n" + //
+ " __func.accept(__inner);\n" + //
+ " " + n.getName() + " = __inner;\n" + //
+ " return this;\n" + //
"}";
+
}
private static String innerArraySetters(InnerCNode n) {
@@ -207,8 +219,7 @@ public class BuilderGenerator {
}
private static String innerMapSetters(CNode n) {
- return "public Builder " + n.getName() + "(String " + INTERNAL_PREFIX + "key, " + builderType(n) + " " + INTERNAL_PREFIX
- + "value) {\n" + //
+ String r = "public Builder " + n.getName() + "(String " + INTERNAL_PREFIX + "key, " + builderType(n) + " " + INTERNAL_PREFIX + "value) {\n" + //
" " + n.getName() + ".put(" + INTERNAL_PREFIX + "key, " + INTERNAL_PREFIX + "value);\n" + //
" return this;\n" + //
"}\n" + //
@@ -217,6 +228,22 @@ public class BuilderGenerator {
" " + n.getName() + ".putAll(" + INTERNAL_PREFIX + "values);\n" + //
" return this;\n" + //
"}";
+ if (n instanceof InnerCNode) {
+ r = r +
+ "\n\n" + //
+ "/**\n" + //
+ " * Make a new builder and run the supplied function on it before using it as the value\n" + //
+ " * @param __func lambda that modifies the given builder\n" + //
+ " * @return this builder\n" + //
+ " */\n" + //
+ "public Builder " + n.getName() + "(String __key, java.util.function.Consumer<" + builderType(n) + "> __func) {\n" + //
+ " " + builderType(n) + " __inner = new " + builderType(n) +"();\n" + //
+ " __func.accept(__inner);\n" + //
+ " " + n.getName() + ".put(__key, __inner);\n" + //
+ " return this;\n" + //
+ "}";
+ }
+ return r;
}
private static String privateLeafMapSetter(CNode n) {