summaryrefslogtreecommitdiffstats
path: root/configgen
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2021-12-09 14:30:07 +0000
committerArne H Juul <arnej@yahooinc.com>2021-12-09 14:30:07 +0000
commitbd081410b1c6b0e54a4f0c45dd4fcfc0bffd8d21 (patch)
tree952b54ed95d438f1f0b4f93fb5b33190b2c3cce9 /configgen
parent450f9af0a88db88bffd3ac014ebd1e7266f82322 (diff)
add more convenience functions
* accept lambdas for struct members and map values also
Diffstat (limited to 'configgen')
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java31
-rw-r--r--configgen/src/test/java/com/yahoo/config/codegen/JavaClassBuilderTest.java1
-rw-r--r--configgen/src/test/resources/allfeatures.reference56
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);