summaryrefslogtreecommitdiffstats
path: root/configgen
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-11-30 14:47:38 -0800
committerJon Bratseth <bratseth@oath.com>2018-11-30 14:47:38 -0800
commitcf6da96964eb010e79117a680199916d946dfc22 (patch)
tree665fb956723c3abd141d7d1b519a92fced83bf3d /configgen
parentc0513ac34d2c438e9f97e699659855029e1f06e8 (diff)
Add build() method to config builders
Diffstat (limited to 'configgen')
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java29
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/CNode.java1
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/ClassBuilder.java7
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/CodegenRuntimeException.java4
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/ConfigGenerator.java2
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/ConfiggenUtil.java4
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java3
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/DefLine.java4
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/DefParser.java2
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/DefaultValue.java1
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/InnerCNode.java10
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/JavaClassBuilder.java10
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/LeafCNode.java38
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/MakeConfig.java1
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/MakeConfigProperties.java2
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/NormalizedDefinition.java1
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/PropertyException.java2
-rw-r--r--configgen/src/main/java/com/yahoo/config/codegen/ReservedWords.java3
-rw-r--r--configgen/src/test/java/com/yahoo/config/codegen/JavaClassBuilderTest.java16
-rw-r--r--configgen/src/test/java/com/yahoo/config/codegen/NormalizedDefinitionTest.java1
-rw-r--r--configgen/src/test/resources/allfeatures.reference45
21 files changed, 119 insertions, 67 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 bf3fc2902a1..7789a2b2cfb 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/BuilderGenerator.java
@@ -21,8 +21,8 @@ import static java.util.Arrays.stream;
* @author gjoranv
* @author ollivir
*/
-
public class BuilderGenerator {
+
public static String getBuilder(InnerCNode node) {
return getDeclaration(node) + "\n" + //
indentCode(INDENTATION, getUninitializedScalars(node) + "\n\n" + //
@@ -31,7 +31,8 @@ public class BuilderGenerator {
getBuilderConstructors(node, nodeClass(node)) + "\n\n" + //
getOverrideMethod(node) + "\n\n" + //
getBuilderSetters(node) + "\n" + //
- getSpecialRootBuilderCode(node))
+ getSpecialRootBuilderCode(node) + "\n" + //
+ getBuildMethod(node) + "\n") //
+ "}";
}
@@ -45,6 +46,12 @@ public class BuilderGenerator {
return (node.getParent() == null) ? "\n" + getDispatchCode() + "\n" : "";
}
+ private static String getBuildMethod(InnerCNode node) {
+ return "public " + nodeClass(node) + " build() {\n" +
+ " return new " + nodeClass(node) + "(this);\n" +
+ "}\n";
+ }
+
private static String getDispatchCode() {
// Use full path to @Override, as users are free to define an inner node called
// 'override'. (summarymap.def does)
@@ -119,6 +126,7 @@ public class BuilderGenerator {
}
private static class BuilderSetters {
+
private static String structSetter(InnerCNode n) {
return "public Builder " + n.getName() + "(" + builderType(n) + " " + INTERNAL_PREFIX + "builder) {\n" + //
" " + n.getName() + " = " + INTERNAL_PREFIX + "builder;\n" + //
@@ -227,9 +235,9 @@ public class BuilderGenerator {
}
private static String setBuilderValueFromConfig(CNode child, CNode node) {
- final String name = child.getName();
- final boolean isArray = child.isArray;
- final boolean isMap = child.isMap;
+ String name = child.getName();
+ boolean isArray = child.isArray;
+ boolean isMap = child.isMap;
if (child instanceof FileLeaf && isArray) {
return name + "(" + userDataType(child) + ".toValues(config." + name + "()));";
@@ -255,7 +263,7 @@ public class BuilderGenerator {
}
private static String setInnerArrayBuildersFromConfig(InnerCNode innerArr, CNode node) {
- final String elemName = createUniqueSymbol(node, innerArr.getName());
+ String elemName = createUniqueSymbol(node, innerArr.getName());
return "for (" + userDataType(innerArr) + " " + elemName + " : config." + innerArr.getName() + "()) {\n" + //
" " + innerArr.getName() + "(new " + builderType(innerArr) + "(" + elemName + "));\n" + //
@@ -263,7 +271,7 @@ public class BuilderGenerator {
}
private static String setInnerMapBuildersFromConfig(InnerCNode innerMap) {
- final String entryName = INTERNAL_PREFIX + "entry";
+ String entryName = INTERNAL_PREFIX + "entry";
return "for (Map.Entry<String, " + userDataType(innerMap) + "> " + entryName + " : config." + innerMap.getName()
+ "().entrySet()) {\n" + //
" " + innerMap.getName() + "(" + entryName + ".getKey(), new " + userDataType(innerMap) + ".Builder(" + entryName
@@ -282,7 +290,7 @@ public class BuilderGenerator {
}
private static String conditionStatement(CNode child) {
- final String superior = INTERNAL_PREFIX + "superior";
+ String superior = INTERNAL_PREFIX + "superior";
if (child.isArray) {
return "if (!" + superior + "." + child.getName() + ".isEmpty())";
@@ -314,8 +322,8 @@ public class BuilderGenerator {
}
private static String getOverrideMethod(CNode node) {
- final String superior = INTERNAL_PREFIX + "superior";
- final String method = "override";
+ String superior = INTERNAL_PREFIX + "superior";
+ String method = "override";
return "private Builder " + method + "(Builder " + superior + ") {\n" + //
indentCode(INDENTATION,
@@ -348,4 +356,5 @@ public class BuilderGenerator {
return boxedDataType(node);
}
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/CNode.java b/configgen/src/main/java/com/yahoo/config/codegen/CNode.java
index 9dc7923b71b..ea88e115530 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/CNode.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/CNode.java
@@ -174,4 +174,5 @@ public abstract class CNode {
", version='" + defVersion + '\'' +
'}';
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/ClassBuilder.java b/configgen/src/main/java/com/yahoo/config/codegen/ClassBuilder.java
index 720212845b0..890be3e371b 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/ClassBuilder.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/ClassBuilder.java
@@ -2,12 +2,11 @@
package com.yahoo.config.codegen;
/**
- * @author <a href="gv@yahoo-inc.com">G. Voldengen</a>
+ * @author gjoranv
*/
public interface ClassBuilder {
- /**
- * Generate config class file(s).
- */
+ /** Generate config class file(s). */
public void createConfigClasses();
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/CodegenRuntimeException.java b/configgen/src/main/java/com/yahoo/config/codegen/CodegenRuntimeException.java
index b4ca53d02db..9b32ccf8733 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/CodegenRuntimeException.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/CodegenRuntimeException.java
@@ -4,9 +4,10 @@ package com.yahoo.config.codegen;
/**
* This exception is thrown on internal errors.
*
- * @author <a href="gv@yahoo-inc.com">G. Voldengen</a>
+ * @author gjoranv
*/
public class CodegenRuntimeException extends RuntimeException {
+
public CodegenRuntimeException(String s, Throwable cause) {
super(s, cause);
}
@@ -18,4 +19,5 @@ public class CodegenRuntimeException extends RuntimeException {
public CodegenRuntimeException(String s) {
super(s);
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/ConfigGenerator.java b/configgen/src/main/java/com/yahoo/config/codegen/ConfigGenerator.java
index 9980cf565b1..f7c6267a6bb 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/ConfigGenerator.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/ConfigGenerator.java
@@ -26,6 +26,7 @@ import static java.util.Arrays.stream;
* @author ollivir
*/
public class ConfigGenerator {
+
// TODO: don't take indent as method param - the caller should indent
public static String generateContent(String indent, InnerCNode node, boolean isOuter) {
CNode[] children = node.getChildren();
@@ -441,4 +442,5 @@ public class ConfigGenerator {
return rawType;
}
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/ConfiggenUtil.java b/configgen/src/main/java/com/yahoo/config/codegen/ConfiggenUtil.java
index 995ef419f30..3f714fdd22c 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/ConfiggenUtil.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/ConfiggenUtil.java
@@ -11,7 +11,8 @@ public class ConfiggenUtil {
/**
* Create class name from def name
- * @param defName The file name without the '.def' suffix
+ *
+ * @param defName the file name without the '.def' suffix
*/
public static String createClassName(String defName) {
String className = Arrays.stream(defName.split("-"))
@@ -41,4 +42,5 @@ public class ConfiggenUtil {
}
return true;
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java b/configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java
index 44180b3f863..e8b9353b238 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java
@@ -15,11 +15,11 @@ import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
-
/**
* This class autogenerates C++ code for the C++ config, based on a CNode tree given.
*/
public class CppClassBuilder implements ClassBuilder {
+
private final CNode root;
private final NormalizedDefinition nd;
private final File rootDir;
@@ -1126,4 +1126,5 @@ public class CppClassBuilder implements ClassBuilder {
return defaultVal;
}
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/DefLine.java b/configgen/src/main/java/com/yahoo/config/codegen/DefLine.java
index e35cfd14b5c..5d2dc2e13e8 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/DefLine.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/DefLine.java
@@ -4,9 +4,8 @@ package com.yahoo.config.codegen;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-/**
- */
public class DefLine {
+
private final static Pattern defaultPattern = Pattern.compile("^\\s*default\\s*=\\s*(\\S+)");
private final static Pattern rangePattern = Pattern.compile("^\\s*range\\s*=\\s*([\\(\\[].*?[\\)\\]])");
private final static Pattern restartPattern = Pattern.compile("^\\s*restart\\s*");
@@ -270,5 +269,6 @@ public class DefLine {
throw new IllegalArgumentException("'" + name + "' cannot start with '" + ReservedWords.INTERNAL_PREFIX + "'");
}
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/DefParser.java b/configgen/src/main/java/com/yahoo/config/codegen/DefParser.java
index 09a751bdde7..4822b0cf271 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/DefParser.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/DefParser.java
@@ -14,6 +14,7 @@ import java.util.regex.Pattern;
* @author hmusum
*/
public class DefParser {
+
public static final String DEFAULT_PACKAGE_PREFIX = "com.yahoo.";
static final Pattern commentPattern = Pattern.compile("^\\s*#+\\s*(.*?)\\s*$");
@@ -231,4 +232,5 @@ public class DefParser {
super(s, cause);
}
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/DefaultValue.java b/configgen/src/main/java/com/yahoo/config/codegen/DefaultValue.java
index 972a29f201e..07632788d86 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/DefaultValue.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/DefaultValue.java
@@ -13,7 +13,6 @@ public class DefaultValue {
// The variable type. Always set UNLESS the value is null.
private DefLine.Type type = null;
-
/**
* Null value
*/
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/InnerCNode.java b/configgen/src/main/java/com/yahoo/config/codegen/InnerCNode.java
index 1e33bfbff26..1d1510e7197 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/InnerCNode.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/InnerCNode.java
@@ -82,8 +82,7 @@ public class InnerCNode extends CNode {
* @param comment comment extracted from the .def-file.
*/
@Override
- protected void setLeaf(String name, DefLine defLine, String comment)
- throws IllegalArgumentException {
+ protected void setLeaf(String name, DefLine defLine, String comment) throws IllegalArgumentException {
if (name.indexOf('.') < 0) {
throw new IllegalArgumentException("Parameter with name '" + name +
"' cannot be a leaf node as it has already been declared as an inner node.");
@@ -92,13 +91,6 @@ public class InnerCNode extends CNode {
String childName = name.substring(name.indexOf('.') + 1);
CNode child = createOrGetChild(defLine.getType(), childName);
-/*
- System.out.println("\nAdding child name: " + name);
- System.out.println(" getName: " + child.getName());
- System.out.println(" full name: " + child.getFullName());
- System.out.println(" classname: " + child.getClassName());
- System.out.println(" full classname: " + child.getFullClassName());
-*/
restart |= defLine.getRestart();
child.setLeaf(childName, defLine, comment);
children.put(child.getName(), child);
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/JavaClassBuilder.java b/configgen/src/main/java/com/yahoo/config/codegen/JavaClassBuilder.java
index 00498094db5..e30b59b642a 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/JavaClassBuilder.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/JavaClassBuilder.java
@@ -22,6 +22,7 @@ import static com.yahoo.config.codegen.DefParser.DEFAULT_PACKAGE_PREFIX;
* @author ollivir
*/
public class JavaClassBuilder implements ClassBuilder {
+
public static final String INDENTATION = " ";
private final InnerCNode root;
@@ -141,11 +142,9 @@ public class JavaClassBuilder implements ClassBuilder {
* config class for the given node. The name will be based on the given basis
* string, but the basis itself is not a possible return value.
*
- * @param node
- * The node to find a unused symbol name for.
- * @param basis
- * The basis for the generated symbol name.
- * @return A name that is not used in the given config node.
+ * @param node the node to find a unused symbol name for.
+ * @param basis the basis for the generated symbol name.
+ * @return a name that is not used in the given config node.
*/
static String createUniqueSymbol(CNode node, String basis) {
Set<String> usedSymbols = Arrays.stream(node.getChildren()).map(CNode::getName).collect(Collectors.toSet());
@@ -167,4 +166,5 @@ public class JavaClassBuilder implements ClassBuilder {
public String javaPackage() {
return javaPackage;
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/LeafCNode.java b/configgen/src/main/java/com/yahoo/config/codegen/LeafCNode.java
index 1fff74dd194..7623987656a 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/LeafCNode.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/LeafCNode.java
@@ -10,9 +10,7 @@ public abstract class LeafCNode extends CNode {
private DefaultValue defaultValue = null;
private boolean restart = false;
- /**
- * Constructor for the leaf nodes.
- */
+ /** Constructor for the leaf nodes */
protected LeafCNode(InnerCNode parent, String name) {
super(parent, name);
}
@@ -20,26 +18,16 @@ public abstract class LeafCNode extends CNode {
public static LeafCNode newInstance(DefLine.Type type, InnerCNode parent, String name) {
try {
switch (type.name) {
- case "int":
- return new IntegerLeaf(parent, name);
- case "long":
- return new LongLeaf(parent, name);
- case "double":
- return new DoubleLeaf(parent, name);
- case "bool":
- return new BooleanLeaf(parent, name);
- case "string":
- return new StringLeaf(parent, name);
- case "reference":
- return new ReferenceLeaf(parent, name);
- case "file":
- return new FileLeaf(parent, name);
- case "path":
- return new PathLeaf(parent, name);
- case "enum":
- return new EnumLeaf(parent, name, type.enumArray);
- default:
- return null;
+ case "int": return new IntegerLeaf(parent, name);
+ case "long": return new LongLeaf(parent, name);
+ case "double": return new DoubleLeaf(parent, name);
+ case "bool": return new BooleanLeaf(parent, name);
+ case "string": return new StringLeaf(parent, name);
+ case "reference": return new ReferenceLeaf(parent, name);
+ case "file": return new FileLeaf(parent, name);
+ case "path": return new PathLeaf(parent, name);
+ case "enum": return new EnumLeaf(parent, name, type.enumArray);
+ default: return null;
}
} catch (NumberFormatException e) {
return null;
@@ -77,7 +65,7 @@ public abstract class LeafCNode extends CNode {
}
/**
- * @param defaultValue The value to check.
+ * @param defaultValue the value to check.
* @throws IllegalArgumentException if the value is illegal according to the node type.
*/
public void checkDefaultValue(DefaultValue defaultValue) throws IllegalArgumentException {
@@ -243,7 +231,7 @@ public abstract class LeafCNode extends CNode {
return "enum";
}
- /** @return This enum's legal values. */
+ /** Returns this enum's legal values. */
public String[] getLegalValues() {
return legalValues;
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/MakeConfig.java b/configgen/src/main/java/com/yahoo/config/codegen/MakeConfig.java
index ef9af1c2b11..ac6bbea617e 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/MakeConfig.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/MakeConfig.java
@@ -137,5 +137,6 @@ public class MakeConfig {
return longName.substring(lastDot + 1);
}
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/MakeConfigProperties.java b/configgen/src/main/java/com/yahoo/config/codegen/MakeConfigProperties.java
index ca10e973ba2..13807e63e53 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/MakeConfigProperties.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/MakeConfigProperties.java
@@ -9,7 +9,7 @@ import java.util.StringTokenizer;
/**
* Encapsulates data extracted from system properties.
*
- * @author <a href="gv@yahoo-inc.com">Gjoran Voldengen</a>
+ * @author gjoranv
*/
public class MakeConfigProperties {
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/NormalizedDefinition.java b/configgen/src/main/java/com/yahoo/config/codegen/NormalizedDefinition.java
index 3250fc69ae8..71f9f1ece18 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/NormalizedDefinition.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/NormalizedDefinition.java
@@ -198,4 +198,5 @@ public class NormalizedDefinition {
public String getDefMd5() {
return defMd5;
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/PropertyException.java b/configgen/src/main/java/com/yahoo/config/codegen/PropertyException.java
index ff29c63a634..1c6891e279a 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/PropertyException.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/PropertyException.java
@@ -2,7 +2,9 @@
package com.yahoo.config.codegen;
public class PropertyException extends Exception {
+
PropertyException(String s) {
super(s);
}
+
}
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/ReservedWords.java b/configgen/src/main/java/com/yahoo/config/codegen/ReservedWords.java
index 6726229269e..623028d70d8 100644
--- a/configgen/src/main/java/com/yahoo/config/codegen/ReservedWords.java
+++ b/configgen/src/main/java/com/yahoo/config/codegen/ReservedWords.java
@@ -8,9 +8,7 @@ import java.util.regex.Pattern;
* Reserved words that cannot be used as variable names in a config definition file.
*
* @author hmusum
- * @since 2009-06-24
*/
-
public class ReservedWords {
public static final String INTERNAL_PREFIX = "__";
@@ -68,5 +66,4 @@ public class ReservedWords {
return allKeyWords.get(word);
}
-
}
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 744f8c9b1a2..381d587e3c3 100644
--- a/configgen/src/test/java/com/yahoo/config/codegen/JavaClassBuilderTest.java
+++ b/configgen/src/test/java/com/yahoo/config/codegen/JavaClassBuilderTest.java
@@ -8,6 +8,7 @@ import java.io.IOException;
import java.io.StringReader;
import java.nio.file.FileSystems;
import java.nio.file.Files;
+import java.util.List;
import static com.yahoo.config.codegen.ConfiggenUtil.createClassName;
import static com.yahoo.config.codegen.JavaClassBuilder.createUniqueSymbol;
@@ -15,12 +16,14 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
/**
* @author gjoranv
* @author ollivir
*/
public class JavaClassBuilderTest {
+
private static final String TEST_DIR = "target/test-classes/";
private static final String DEF_NAME = TEST_DIR + "allfeatures.def";
private static final String REFERENCE_NAME = TEST_DIR + "allfeatures.reference";
@@ -103,14 +106,19 @@ public class JavaClassBuilderTest {
@Test
public void verify_generated_class_against_reference() throws IOException {
- final String testDefinition = String.join("\n", Files.readAllLines(FileSystems.getDefault().getPath(DEF_NAME)));
- final String referenceClass = String.join("\n", Files.readAllLines(FileSystems.getDefault().getPath(REFERENCE_NAME))) + "\n";
+ String testDefinition = String.join("\n", Files.readAllLines(FileSystems.getDefault().getPath(DEF_NAME)));
+ List<String> referenceClassLines = Files.readAllLines(FileSystems.getDefault().getPath(REFERENCE_NAME));
DefParser parser = new DefParser("allfeatures", new StringReader(testDefinition));
InnerCNode root = parser.getTree();
JavaClassBuilder builder = new JavaClassBuilder(root, parser.getNormalizedDefinition(), null, null);
- String configClass = builder.getConfigClass("AllfeaturesConfig");
+ String[] configClassLines = builder.getConfigClass("AllfeaturesConfig").split("\n");
- assertEquals(referenceClass, configClass);
+ for (int i = 0; i < referenceClassLines.size(); i++) {
+ if (configClassLines.length <= i)
+ fail("Missing lines i generated comnfig class. First missing line:\n" + referenceClassLines.get(i));
+ assertEquals("Line " + i, referenceClassLines.get(i), configClassLines[i]);
+ }
}
+
}
diff --git a/configgen/src/test/java/com/yahoo/config/codegen/NormalizedDefinitionTest.java b/configgen/src/test/java/com/yahoo/config/codegen/NormalizedDefinitionTest.java
index 0d8135e67de..cbb0d9c4082 100644
--- a/configgen/src/test/java/com/yahoo/config/codegen/NormalizedDefinitionTest.java
+++ b/configgen/src/test/java/com/yahoo/config/codegen/NormalizedDefinitionTest.java
@@ -73,4 +73,5 @@ public class NormalizedDefinitionTest {
assertNotNull(fileReader);
fileReader.close();
}
+
}
diff --git a/configgen/src/test/resources/allfeatures.reference b/configgen/src/test/resources/allfeatures.reference
index ebc21e8255c..1916e37c1cc 100644
--- a/configgen/src/test/resources/allfeatures.reference
+++ b/configgen/src/test/resources/allfeatures.reference
@@ -573,6 +573,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
public final String getDefName() { return CONFIG_DEF_NAME; }
@java.lang.Override
public final String getDefNamespace() { return CONFIG_DEF_NAMESPACE; }
+
+ public AllfeaturesConfig build() {
+ return new AllfeaturesConfig(this);
+ }
+
}
// Some random bool without a default value. These comments exist to check
@@ -1129,6 +1134,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
private Builder bar(String __value) {
return bar(Integer.valueOf(__value));
}
+
+ public Basic_struct build() {
+ return new Basic_struct(this);
+ }
+
}
// A basic struct
@@ -1203,6 +1213,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
inner1 = __builder;
return this;
}
+
+ public Struct_of_struct build() {
+ return new Struct_of_struct(this);
+ }
+
}
private final Inner0 inner0;
@@ -1281,6 +1296,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
private Builder index(String __value) {
return index(Integer.valueOf(__value));
}
+
+ public Inner0 build() {
+ return new Inner0(this);
+ }
+
}
// A struct of struct
@@ -1363,6 +1383,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
private Builder index(String __value) {
return index(Integer.valueOf(__value));
}
+
+ public Inner1 build() {
+ return new Inner1(this);
+ }
+
}
private final StringNode name;
@@ -1502,6 +1527,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
anotherArray = __builders;
return this;
}
+
+ public MyArray build() {
+ return new MyArray(this);
+ }
+
}
private final IntegerNode intVal;
@@ -1653,6 +1683,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
private Builder foo(String __value) {
return foo(Integer.valueOf(__value));
}
+
+ public AnotherArray build() {
+ return new AnotherArray(this);
+ }
+
}
private final IntegerNode foo;
@@ -1790,6 +1825,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
anotherArray = __builders;
return this;
}
+
+ public MyMap build() {
+ return new MyMap(this);
+ }
+
}
private final IntegerNode intVal;
@@ -1941,6 +1981,11 @@ public final class AllfeaturesConfig extends ConfigInstance {
private Builder foo(String __value) {
return foo(Integer.valueOf(__value));
}
+
+ public AnotherArray build() {
+ return new AnotherArray(this);
+ }
+
}
private final IntegerNode foo;