From 24d7700cd02c034a2f7733b36087f6fe3f2993c4 Mon Sep 17 00:00:00 2001 From: Sodala Date: Mon, 17 Jul 2017 13:10:54 +0200 Subject: [PATCH] fix npe :Unboxing of '(count < numVars) ? true : null' produce npe (#5917) * fix npe :Unboxing of '(count < numVars) ? true : null' may produce 'java.lang.NullPointerException * add test to cover reconcileInlineEnums method. --- .../languages/CSharpClientCodegen.java | 2 +- .../codegen/csharp/CsharpModelEnumTest.java | 75 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CsharpModelEnumTest.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 6a0cc7fa055..bf8adcad205 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -555,7 +555,7 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { int count = 0, numVars = codegenProperties.size(); for(CodegenProperty codegenProperty : codegenProperties) { count += 1; - codegenProperty.hasMore = (count < numVars) ? true : null; + codegenProperty.hasMore = count < numVars; } codegenModel.vars = codegenProperties; } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CsharpModelEnumTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CsharpModelEnumTest.java new file mode 100644 index 00000000000..8a8b0a726b1 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CsharpModelEnumTest.java @@ -0,0 +1,75 @@ +package io.swagger.codegen.csharp; + + +import io.swagger.codegen.CodegenModel; +import io.swagger.codegen.CodegenProperty; +import io.swagger.codegen.DefaultCodegen; +import io.swagger.codegen.languages.CSharpClientCodegen; +import io.swagger.models.ComposedModel; +import io.swagger.models.Model; +import io.swagger.models.ModelImpl; +import io.swagger.models.RefModel; +import io.swagger.models.properties.Property; +import io.swagger.models.properties.StringProperty; +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class CsharpModelEnumTest { + @Test(description = "not override identical parent enums") + public void overrideEnumTest() { + final StringProperty identicalEnumProperty = new StringProperty(); + identicalEnumProperty.setEnum(Arrays.asList("VALUE1", "VALUE2", "VALUE3")); + + final StringProperty subEnumProperty = new StringProperty(); + subEnumProperty.setEnum(Arrays.asList("SUB1", "SUB2", "SUB3")); + + // Add one enum property to the parent + final Map parentProperties = new HashMap(); + parentProperties.put("sharedThing", identicalEnumProperty); + + // Add TWO enums to the subType model; one of which is identical to the one in parent class + final Map subProperties = new HashMap(); + subProperties.put("sharedThing", identicalEnumProperty); + subProperties.put("unsharedThing", identicalEnumProperty); + + final ModelImpl parentModel = new ModelImpl() + .description("parentModel"); + parentModel.setProperties(parentProperties); + parentModel.name("parentModel"); + + final ModelImpl subModel = new ModelImpl() + .description("subModel"); + subModel.setProperties(subProperties); + subModel.name("subModel"); + + final ComposedModel model = new ComposedModel() + .parent(new RefModel(parentModel.getName())) + .child(subModel) + .interfaces(new ArrayList()); + + final DefaultCodegen codegen = new CSharpClientCodegen(); + final Map allModels = new HashMap<>(); + allModels.put("ParentModel", parentModel); + allModels.put("SubModel", subModel); + + final CodegenModel cm = codegen.fromModel("sample", model, allModels); + + Assert.assertEquals(cm.name, "sample"); + Assert.assertEquals(cm.classname, "Sample"); + Assert.assertEquals(cm.parent, "ParentModel"); + Assert.assertTrue(cm.imports.contains("ParentModel")); + + // Assert that only the unshared/uninherited enum remains + Assert.assertEquals(cm.vars.size(), 1); + final CodegenProperty enumVar = cm.vars.get(0); + Assert.assertEquals(enumVar.baseName, "unsharedThing"); + Assert.assertEquals(enumVar.datatype, "string"); + Assert.assertEquals(enumVar.datatypeWithEnum, "UnsharedThingEnum"); + Assert.assertTrue(enumVar.isEnum); + } +}