diff --git a/src/main/java/it/cavallium/data/generator/CustomTypesConfiguration.java b/src/main/java/it/cavallium/data/generator/CustomTypesConfiguration.java index 7e66812..ef9bbe0 100644 --- a/src/main/java/it/cavallium/data/generator/CustomTypesConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/CustomTypesConfiguration.java @@ -1,7 +1,32 @@ package it.cavallium.data.generator; +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeName; + public class CustomTypesConfiguration { - public String javaClass; + private String javaClass; public String serializer; + + public void setJavaClass(String javaClass) { + this.javaClass = javaClass; + } + + public TypeName getJavaClassType() { + int indexOfGeneric; + if ((indexOfGeneric = javaClass.indexOf("<")) == -1) { + return ClassName.bestGuess(javaClass); + } else { + var rawTypesArray = javaClass.substring(indexOfGeneric + 1, javaClass.length() - 1).split(","); + var genericsResult = new TypeName[rawTypesArray.length]; + int i = 0; + for (String rawType : rawTypesArray) { + genericsResult[i] = ClassName.bestGuess(rawType); + i++; + } + var base = ClassName.bestGuess(javaClass.substring(0, indexOfGeneric)); + return ParameterizedTypeName.get(base, genericsResult); + } + } } diff --git a/src/main/java/it/cavallium/data/generator/SourcesGenerator.java b/src/main/java/it/cavallium/data/generator/SourcesGenerator.java index 554d9b7..cb51f0c 100644 --- a/src/main/java/it/cavallium/data/generator/SourcesGenerator.java +++ b/src/main/java/it/cavallium/data/generator/SourcesGenerator.java @@ -724,14 +724,14 @@ public class SourcesGenerator { .build() ); typeMustGenerateSerializer.put(key, false); - typeTypes.put(key, ClassName.bestGuess(customTypeConfiguration.javaClass)); + typeTypes.put(key, customTypeConfiguration.getJavaClassType()); typeFamily.put(key, Family.OTHER); if (nextVersionCustomTypeConfiguration.isPresent()) { - nextVersionTypeTypes.put(key, ClassName.bestGuess(nextVersionCustomTypeConfiguration.get().javaClass)); + nextVersionTypeTypes.put(key, nextVersionCustomTypeConfiguration.get().getJavaClassType()); nextVersionTypeFamily.put(key, Family.OTHER); } - var arrayClassName = ClassName.bestGuess(customTypeConfiguration.javaClass); + var arrayClassName = customTypeConfiguration.getJavaClassType(); var neededTypes = registerNeededTypes(versionConfiguration, Family.OTHER, key, @@ -2581,8 +2581,8 @@ public class SourcesGenerator { HashMap typeFamily, @Nullable HashMap nextVersionTypeTypes, @Nullable HashMap nextVersionTypeFamily, - Supplier arrayClassName, - Supplier nextArrayClassName) { + Supplier arrayClassName, + Supplier nextArrayClassName) { // Check if the nullable type is needed boolean nullableTypeNeeded = versionConfiguration.classes .values()