diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 0bd0c08cccc..c26fbde63fc 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -2,32 +2,6 @@ package io.swagger.codegen; import com.google.common.base.Function; import com.google.common.collect.Lists; - -import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Set; -import java.util.TreeSet; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.annotation.Nullable; - import io.swagger.codegen.examples.ExampleGenerator; import io.swagger.models.ArrayModel; import io.swagger.models.ComposedModel; @@ -71,7 +45,29 @@ import io.swagger.models.properties.RefProperty; import io.swagger.models.properties.StringProperty; import io.swagger.models.properties.UUIDProperty; import io.swagger.util.Json; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class DefaultCodegen { protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class); @@ -2609,7 +2605,11 @@ public class DefaultCodegen { } addImport(m, cp.baseType); - addImport(m, cp.complexType); + CodegenProperty innerCp = cp; + while(innerCp != null) { + addImport(m, innerCp.complexType); + innerCp = innerCp.items; + } vars.add(cp); // if required, add to the list "requiredVars" diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java index d69b2361db1..12784d6e92c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java @@ -1,5 +1,6 @@ package io.swagger.codegen.java; +import com.google.common.collect.Sets; import io.swagger.codegen.CodegenModel; import io.swagger.codegen.CodegenParameter; import io.swagger.codegen.CodegenProperty; @@ -12,13 +13,12 @@ import io.swagger.models.parameters.QueryParameter; import io.swagger.models.properties.ArrayProperty; import io.swagger.models.properties.ByteArrayProperty; import io.swagger.models.properties.DateTimeProperty; +import io.swagger.models.properties.DecimalProperty; import io.swagger.models.properties.IntegerProperty; import io.swagger.models.properties.LongProperty; import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.RefProperty; import io.swagger.models.properties.StringProperty; - -import com.google.common.collect.Sets; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -458,6 +458,21 @@ public class JavaModelTest { Assert.assertNull(cm.allowableValues); } + @Test(description = "types used by inner properties should be imported") + public void mapWithAnListOfBigDecimalTest() { + final CodegenModel cm1 = new JavaClientCodegen().fromModel("sample", new ModelImpl() + .description("model with Map>") + .property("map", new MapProperty().additionalProperties(new ArrayProperty(new DecimalProperty())))); + Assert.assertEquals(cm1.vars.get(0).datatype, "Map>"); + Assert.assertTrue(cm1.imports.contains("BigDecimal")); + + final CodegenModel cm2 = new JavaClientCodegen().fromModel("sample", new ModelImpl() + .description("model with Map>>") + .property("map", new MapProperty().additionalProperties(new MapProperty().additionalProperties(new ArrayProperty(new DecimalProperty()))))); + Assert.assertEquals(cm2.vars.get(0).datatype, "Map>>"); + Assert.assertTrue(cm2.imports.contains("BigDecimal")); + } + @DataProvider(name = "modelNames") public static Object[][] primeNumbers() { return new Object[][] {