Skip to content

Commit 91175bd

Browse files
authored
Merge pull request #453 from RachelTucker/SA-217-fix-go-bug
SA-217: Fixed minor bug in generation of Go parsing code
2 parents a14b7a6 + 94840a1 commit 91175bd

File tree

5 files changed

+37
-2
lines changed

5 files changed

+37
-2
lines changed

ds3-autogen-go/src/main/kotlin/com/spectralogic/ds3autogen/go/generators/parser/BaseTypeParserGenerator.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ open class BaseTypeParserGenerator : TypeParserModelGenerator<TypeParser>, TypeP
9292
if (ds3Element.type.equals("array")) {
9393
val childType = toGoType(ds3Element.componentType!!)
9494

95+
// Handle if the slice is a string
96+
if (childType == "string") {
97+
return ParseChildNodeAddStringToSlice(xmlTag, modelName, paramName)
98+
}
99+
95100
// Handle if the slice is a Ds3Type defined enum
96101
if (isElementEnum(ds3Element.componentType!!, typeMap)) {
97102
return ParseChildNodeAddEnumToSlice(xmlTag, modelName, paramName, childType)

ds3-autogen-go/src/main/kotlin/com/spectralogic/ds3autogen/go/models/parser/ParseChildNodeImpls.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,23 @@ data class ParseChildNodeAddEnumToSlice(
113113
}
114114
}
115115

116+
/**
117+
* Creates the Go code for parsing a single child node as a string and adding it to a
118+
* slice. This is used when there are multiple child nodes of type string with no
119+
* encapsulating xml tag.
120+
*/
121+
data class ParseChildNodeAddStringToSlice(
122+
override val xmlTag: String,
123+
val modelName: String,
124+
val paramName: String) : ParseElement {
125+
126+
override val parsingCode: String
127+
get() {
128+
return "var str = parseString(child.Content)\n" +
129+
goIndent(3) + "$modelName.$paramName = append($modelName.$paramName, str)"
130+
}
131+
}
132+
116133
/**
117134
* Creates the Go code for parsing a single child node and adding it to a slice. This
118135
* is used when there are multiple child nodes of the same type with no encapsulating

ds3-autogen-go/src/test/java/com/spectralogic/ds3autogen/go/generators/parser/BaseTypeParserGenerator_Test.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@ public void toChildNodeTest() {
191191
DS3_TYPE_ELEMENT,
192192
LIST_ENUM_ELEMENT,
193193
COMMON_PREFIX_ELEMENT,
194-
DS3_PTR_TYPE_ELEMENT);
194+
DS3_PTR_TYPE_ELEMENT,
195+
LIST_STRING_ELEMENT);
195196

196197
final String modelName = "modelName";
197198

@@ -206,7 +207,8 @@ public void toChildNodeTest() {
206207
new ParseChildNodeAsDs3Type(DS3_TYPE_ELEMENT.getName(), modelName, DS3_TYPE_ELEMENT.getName()),
207208
new ParseChildNodeAddEnumToSlice(LIST_ENUM_ELEMENT.getName(), modelName, LIST_ENUM_ELEMENT.getName(), removePath(LIST_ENUM_ELEMENT.getComponentType())),
208209
new ParseChildNodeAsCommonPrefix(modelName, "CommonPrefixes"),
209-
new ParseChildNodeAsNullableDs3Type(DS3_PTR_TYPE_ELEMENT.getName(), modelName, DS3_PTR_TYPE_ELEMENT.getName(), removePath(DS3_PTR_TYPE_ELEMENT.getType())));
210+
new ParseChildNodeAsNullableDs3Type(DS3_PTR_TYPE_ELEMENT.getName(), modelName, DS3_PTR_TYPE_ELEMENT.getName(), removePath(DS3_PTR_TYPE_ELEMENT.getType())),
211+
new ParseChildNodeAddStringToSlice(LIST_STRING_ELEMENT.getName(), modelName, LIST_STRING_ELEMENT.getName()));
210212

211213
final ImmutableMap<String, Ds3Type> typeMape = ImmutableMap.of(
212214
ENUM_ELEMENT.getType(), new Ds3Type(ENUM_ELEMENT.getType(), "", ImmutableList.of(), ImmutableList.of(ENUM_CONSTANT)));

ds3-autogen-go/src/test/java/com/spectralogic/ds3autogen/go/models/parser/ParseChildNodeImpls_Test.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@ public void ParseChildNodeAddEnumToSliceTest() {
8888
assertThat(parseElement.getParsingCode(), is(expected));
8989
}
9090

91+
@Test
92+
public void ParseChildNodeAddStringToSliceTest() {
93+
final String expected = String.format("var str = parseString(child.Content)\n" +
94+
" %s.%s = append(%s.%s, str)", MODEL_NAME, PARAM_NAME, MODEL_NAME, PARAM_NAME);
95+
96+
final ParseElement parseElement = new ParseChildNodeAddStringToSlice(XML_TAG, MODEL_NAME, PARAM_NAME);
97+
assertThat(parseElement.getXmlTag(), is(XML_TAG));
98+
assertThat(parseElement.getParsingCode(), is(expected));
99+
}
100+
91101
@Test
92102
public void ParseChildNodeAsEnumTest() {
93103
final String expected = String.format("parseEnum(child.Content, &%s.%s, aggErr)", MODEL_NAME, PARAM_NAME);

ds3-autogen-go/src/test/java/com/spectralogic/ds3autogen/go/utils/GoModelFixturesUtil.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public class GoModelFixturesUtil {
5959
public final static Ds3Element DS3_PTR_TYPE_ELEMENT = new Ds3Element("Ds3TypePtrElement", "com.test.TestDs3PtrType", "", true);
6060
public final static Ds3Element LIST_ENUM_ELEMENT = new Ds3Element("ListEnumElement", "array", "com.test.TestEnum", false);
6161
public final static Ds3Element COMMON_PREFIX_ELEMENT = new Ds3Element("CommonPrefixes", "array", "java.lang.String", ImmutableList.of(COMMON_PREFIX_ANNOTATION), false);
62+
public final static Ds3Element LIST_STRING_ELEMENT = new Ds3Element("ListStringElement", "array", "java.lang.String", false);
6263

6364
public final static Ds3Element STR_ATTR = new Ds3Element("StringAttribute", "java.lang.String", "", ImmutableList.of(ATTR_ANNOTATION), false);
6465
public final static Ds3Element STR_PTR_ATTR = new Ds3Element("StringPtrAttribute", "java.lang.String", "", ImmutableList.of(ATTR_ANNOTATION), true);

0 commit comments

Comments
 (0)