Skip to content

Commit 116344e

Browse files
authored
Merge pull request #10366 from swagger-api/issue-9693
added parent if it was not assigned by parser on allOf composed model
2 parents c30a364 + 9de1f7b commit 116344e

File tree

2 files changed

+44
-17
lines changed

2 files changed

+44
-17
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1398,6 +1398,12 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
13981398
List<String> required = new ArrayList<String>();
13991399
Map<String, Property> allProperties;
14001400
List<String> allRequired;
1401+
1402+
List<Model> allComponents = composed.getAllOf();
1403+
if (allComponents.size() > 0 && composed.getParent() == null) {
1404+
rebuildComponents(composed);
1405+
}
1406+
14011407
if (supportsInheritance || supportsMixins) {
14021408
allProperties = new LinkedHashMap<String, Property>();
14031409
allRequired = new ArrayList<String>();
@@ -1534,6 +1540,30 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
15341540
return m;
15351541
}
15361542

1543+
private void rebuildComponents(ComposedModel composedModel) {
1544+
List<Model> allComponents = composedModel.getAllOf();
1545+
if (allComponents.size() >= 1) {
1546+
composedModel.setParent(allComponents.get(0));
1547+
if (allComponents.size() >= 2) {
1548+
composedModel.setChild(allComponents.get(allComponents.size() - 1));
1549+
List<RefModel> interfaces = new ArrayList();
1550+
int size = allComponents.size();
1551+
Iterator modelIterator = allComponents.subList(1, size - 1).iterator();
1552+
1553+
while(modelIterator.hasNext()) {
1554+
Model model = (Model)modelIterator.next();
1555+
if (model instanceof RefModel) {
1556+
RefModel ref = (RefModel)model;
1557+
interfaces.add(ref);
1558+
}
1559+
}
1560+
composedModel.setInterfaces(interfaces);
1561+
} else {
1562+
composedModel.setChild(new ModelImpl());
1563+
}
1564+
}
1565+
}
1566+
15371567
/**
15381568
* Recursively look for a discriminator in the interface tree
15391569
*/

modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenTest.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void propertiesInComposedModelTest() {
2626
Assert.assertEquals(composed.vars.get(0).baseName, "modelOneProp");
2727
Assert.assertEquals(composed.vars.get(1).baseName, "properties");
2828
Assert.assertEquals(composed.vars.get(2).baseName, "zones");
29-
Assert.assertNull(composed.parent);
29+
Assert.assertNotNull(composed.parent);
3030
}
3131

3232
@Test(description = "test sanitizeTag")
@@ -267,11 +267,10 @@ public void simpleCompositionTest() {
267267
final Model model = swagger.getDefinitions().get("SimpleComposition");
268268
CodegenModel composed = codegen.fromModel("SimpleComposition", model, swagger.getDefinitions());
269269

270-
Assert.assertEquals(composed.vars.size(), 3);
271-
Assert.assertEquals(composed.vars.get(0).baseName, "modelOneProp");
272-
Assert.assertEquals(composed.vars.get(1).baseName, "modelTwoProp");
273-
Assert.assertEquals(composed.vars.get(2).baseName, "simpleCompositionProp");
274-
Assert.assertNull(composed.parent);
270+
Assert.assertEquals(composed.vars.size(), 2);
271+
Assert.assertEquals(composed.vars.get(0).baseName, "modelTwoProp");
272+
Assert.assertEquals(composed.vars.get(1).baseName, "simpleCompositionProp");
273+
Assert.assertNotNull(composed.parent);
275274
}
276275

277276
@Test(description = "handle multi level composition")
@@ -282,13 +281,10 @@ public void multiCompositionTest() {
282281
final Model model = swagger.getDefinitions().get("CompositionOfSimpleComposition");
283282
CodegenModel composed = codegen.fromModel("CompositionOfSimpleComposition", model, swagger.getDefinitions());
284283

285-
Assert.assertEquals(composed.vars.size(), 5);
286-
Assert.assertEquals(composed.vars.get(0).baseName, "modelOneProp");
287-
Assert.assertEquals(composed.vars.get(1).baseName, "modelTwoProp");
288-
Assert.assertEquals(composed.vars.get(2).baseName, "simpleCompositionProp");
289-
Assert.assertEquals(composed.vars.get(3).baseName, "modelThreeProp");
290-
Assert.assertEquals(composed.vars.get(4).baseName, "compositionOfSimpleCompositionProp");
291-
Assert.assertNull(composed.parent);
284+
Assert.assertEquals(composed.vars.size(), 2);
285+
Assert.assertEquals(composed.vars.get(0).baseName, "modelThreeProp");
286+
Assert.assertEquals(composed.vars.get(1).baseName, "compositionOfSimpleCompositionProp");
287+
Assert.assertNotNull(composed.parent);
292288
}
293289

294290
@Test(description = "handle simple inheritance")
@@ -299,10 +295,11 @@ public void simpleInheritanceTest() {
299295
final Model model = swagger.getDefinitions().get("ChildOfSimpleParent");
300296
CodegenModel child = codegen.fromModel("ChildOfSimpleParent", model, swagger.getDefinitions());
301297

302-
Assert.assertEquals(child.vars.size(), 2);
303-
Assert.assertEquals(child.vars.get(0).baseName, "modelOneProp");
304-
Assert.assertEquals(child.vars.get(1).baseName, "childOfSimpleParentProp");
305-
Assert.assertEquals(child.parent, "SimpleParent");
298+
Assert.assertEquals(child.vars.size(), 3);
299+
Assert.assertEquals(child.vars.get(0).baseName, "disc");
300+
Assert.assertEquals(child.vars.get(1).baseName, "simpleParentProp");
301+
Assert.assertEquals(child.vars.get(2).baseName, "childOfSimpleParentProp");
302+
Assert.assertEquals(child.parent, "ModelOne");
306303
}
307304

308305
@Test(description = "handle multi level inheritance")

0 commit comments

Comments
 (0)