|
109 | 109 | import static io.swagger.codegen.v3.generators.CodegenHelper.getTypeMappings;
|
110 | 110 | import static io.swagger.codegen.v3.generators.CodegenHelper.initalizeSpecialCharacterMapping;
|
111 | 111 | import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue;
|
112 |
| -import static io.swagger.codegen.v3.utils.ModelUtils.processCodegenModels; |
113 | 112 |
|
114 | 113 | public abstract class DefaultCodegenConfig implements CodegenConfig {
|
115 | 114 | private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegenConfig.class);
|
@@ -268,11 +267,47 @@ public Map<String, Object> postProcessAllModels(Map<String, Object> processedMod
|
268 | 267 | }
|
269 | 268 | }
|
270 | 269 | if (supportsInheritance) {
|
271 |
| - processCodegenModels(allModels); |
| 270 | + for (String name : allModels.keySet()) { |
| 271 | + final CodegenModel codegenModel = allModels.get(name); |
| 272 | + fixUpParentAndInterfaces(codegenModel, allModels); |
| 273 | + } |
272 | 274 | }
|
273 | 275 | return processedModels;
|
274 | 276 | }
|
275 | 277 |
|
| 278 | + /** |
| 279 | + * Fix up all parent and interface CodegenModel references. |
| 280 | + * @param allModels |
| 281 | + */ |
| 282 | + protected void fixUpParentAndInterfaces(CodegenModel codegenModel, Map<String, CodegenModel> allModels) { |
| 283 | + if (codegenModel.parent != null) { |
| 284 | + codegenModel.parentModel = allModels.get(codegenModel.parent); |
| 285 | + } |
| 286 | + if (codegenModel.interfaces != null && !codegenModel.interfaces.isEmpty()) { |
| 287 | + codegenModel.interfaceModels = new ArrayList<CodegenModel>(codegenModel.interfaces.size()); |
| 288 | + for (String intf : codegenModel.interfaces) { |
| 289 | + CodegenModel intfModel = allModels.get(intf); |
| 290 | + if (intfModel != null) { |
| 291 | + codegenModel.interfaceModels.add(intfModel); |
| 292 | + } |
| 293 | + } |
| 294 | + } |
| 295 | + CodegenModel parent = codegenModel.parentModel; |
| 296 | + // if a discriminator exists on the parent, don't add this child to the inheritance hierarchy |
| 297 | + // TODO Determine what to do if the parent discriminator name == the grandparent discriminator name |
| 298 | + while (parent != null) { |
| 299 | + if (parent.children == null) { |
| 300 | + parent.children = new ArrayList<CodegenModel>(); |
| 301 | + } |
| 302 | + parent.children.add(codegenModel); |
| 303 | + if (parent.discriminator == null) { |
| 304 | + parent = allModels.get(parent.parent); |
| 305 | + } else { |
| 306 | + parent = null; |
| 307 | + } |
| 308 | + } |
| 309 | + } |
| 310 | + |
276 | 311 | // override with any special post-processing
|
277 | 312 | @SuppressWarnings("static-method")
|
278 | 313 | public Map<String, Object> postProcessModels(Map<String, Object> objs) {
|
|
0 commit comments