diff options
author | Arne H Juul <arnej@yahooinc.com> | 2021-12-09 14:30:07 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2021-12-09 14:30:07 +0000 |
commit | bd081410b1c6b0e54a4f0c45dd4fcfc0bffd8d21 (patch) | |
tree | 952b54ed95d438f1f0b4f93fb5b33190b2c3cce9 /configgen | |
parent | 450f9af0a88db88bffd3ac014ebd1e7266f82322 (diff) |
add more convenience functions
* accept lambdas for struct members and map values also
Diffstat (limited to 'configgen')
3 files changed, 86 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) { diff --git a/configgen/src/test/java/com/yahoo/config/codegen/JavaClassBuilderTest.java b/configgen/src/test/java/com/yahoo/config/codegen/JavaClassBuilderTest.java index f9b36974e15..cce2d66b5f0 100644 --- a/configgen/src/test/java/com/yahoo/config/codegen/JavaClassBuilderTest.java +++ b/configgen/src/test/java/com/yahoo/config/codegen/JavaClassBuilderTest.java @@ -116,6 +116,7 @@ public class JavaClassBuilderTest { JavaClassBuilder builder = new JavaClassBuilder(root, parser.getNormalizedDefinition(), null, null); String[] configClassLines = builder.getConfigClass("AllfeaturesConfig").split("\n"); + for (var line : configClassLines) { System.out.println(line); } for (int i = 0; i < referenceClassLines.size(); i++) { if (configClassLines.length <= i) fail("Missing lines i generated config class. First missing line:\n" + referenceClassLines.get(i)); diff --git a/configgen/src/test/resources/allfeatures.reference b/configgen/src/test/resources/allfeatures.reference index 08d8aa122c9..7698ea6727c 100644 --- a/configgen/src/test/resources/allfeatures.reference +++ b/configgen/src/test/resources/allfeatures.reference @@ -565,11 +565,33 @@ public final class AllfeaturesConfig extends ConfigInstance { basic_struct = __builder; return this; } + /** + * Make a new builder and run the supplied function on it before adding it to the list + * @param __func lambda that modifies the given builder + * @return this builder + */ + public Builder basic_struct(java.util.function.Consumer<Basic_struct.Builder> __func) { + Basic_struct.Builder __inner = new Basic_struct.Builder(); + __func.accept(__inner); + basic_struct = __inner; + return this; + } public Builder struct_of_struct(Struct_of_struct.Builder __builder) { struct_of_struct = __builder; return this; } + /** + * Make a new builder and run the supplied function on it before adding it to the list + * @param __func lambda that modifies the given builder + * @return this builder + */ + public Builder struct_of_struct(java.util.function.Consumer<Struct_of_struct.Builder> __func) { + Struct_of_struct.Builder __inner = new Struct_of_struct.Builder(); + __func.accept(__inner); + struct_of_struct = __inner; + return this; + } /** * Add the given builder to this builder's list of MyArray builders @@ -613,6 +635,18 @@ public final class AllfeaturesConfig extends ConfigInstance { return this; } + /** + * Make a new builder and run the supplied function on it before using it as the value + * @param __func lambda that modifies the given builder + * @return this builder + */ + public Builder myMap(String __key, java.util.function.Consumer<MyMap.Builder> __func) { + MyMap.Builder __inner = new MyMap.Builder(); + __func.accept(__inner); + myMap.put(__key, __inner); + return this; + } + private boolean _applyOnRestart = false; @java.lang.Override @@ -1317,11 +1351,33 @@ public final class AllfeaturesConfig extends ConfigInstance { inner0 = __builder; return this; } + /** + * Make a new builder and run the supplied function on it before adding it to the list + * @param __func lambda that modifies the given builder + * @return this builder + */ + public Builder inner0(java.util.function.Consumer<Inner0.Builder> __func) { + Inner0.Builder __inner = new Inner0.Builder(); + __func.accept(__inner); + inner0 = __inner; + return this; + } public Builder inner1(Inner1.Builder __builder) { inner1 = __builder; return this; } + /** + * Make a new builder and run the supplied function on it before adding it to the list + * @param __func lambda that modifies the given builder + * @return this builder + */ + public Builder inner1(java.util.function.Consumer<Inner1.Builder> __func) { + Inner1.Builder __inner = new Inner1.Builder(); + __func.accept(__inner); + inner1 = __inner; + return this; + } public Struct_of_struct build() { return new Struct_of_struct(this); |