public static InitCodeNode createTree(InitCodeContext context) {
Preconditions.checkArgument(
context.initFields() != null || context.outputType() != InitCodeOutputType.FieldList,
"init field array is not set for flattened method");
InitCodeNode root = newRoot();
if (context.initFields() != null) {
for (FieldModel field : context.initFields()) {
String nameString = field.getNameAsParameter();
InitValueConfig initValueConfig = context.initValueConfigMap().get(nameString);
if (initValueConfig == null) {
root.mergeChild(InitCodeNode.createWithName(nameString, nameString));
} else {
root.mergeChild(InitCodeNode.createWithValue(nameString, initValueConfig));
}
}
}
for (String initFieldConfigString : context.initFieldConfigStrings()) {
FieldStructureParser.parse(root, initFieldConfigString, context.initValueConfigMap());
}
for (InitCodeNode node : context.additionalInitCodeNodes()) {
root.mergeChild(node);
}
root.resolveNamesAndTypes(context, context.initObjectType(), context.suggestedName(), null);
root.resolveSampleParamConfigs(context, context.sampleParamConfigMap());
return root;
}