diff --git a/codegen/class-model/src/main/java/io/helidon/codegen/classmodel/ConcreteType.java b/codegen/class-model/src/main/java/io/helidon/codegen/classmodel/ConcreteType.java index 64b6e4fcc4e..1c3bfe7ce18 100644 --- a/codegen/class-model/src/main/java/io/helidon/codegen/classmodel/ConcreteType.java +++ b/codegen/class-model/src/main/java/io/helidon/codegen/classmodel/ConcreteType.java @@ -74,9 +74,6 @@ void writeComponent(ModelWriter writer, Set declaredTokens, ImportOrgani } writer.write(">"); } - if (isArray()) { - writer.write("[]"); - } } @Override diff --git a/common/types/src/main/java/io/helidon/common/types/TypeNameSupport.java b/common/types/src/main/java/io/helidon/common/types/TypeNameSupport.java index 3ce9495bc51..c6b5d61d5a3 100644 --- a/common/types/src/main/java/io/helidon/common/types/TypeNameSupport.java +++ b/common/types/src/main/java/io/helidon/common/types/TypeNameSupport.java @@ -136,19 +136,19 @@ static TypeName genericTypeName(TypeName instance) { static String fqName(TypeName instance) { String name = calcName(instance, "."); StringBuilder nameBuilder = new StringBuilder(instance.wildcard() ? "?" : name); - if (instance.array()) { - nameBuilder.append("[]"); - } - Optional maybeComponentType = instance.componentType(); - while (maybeComponentType.isPresent()) { - TypeName typeName = maybeComponentType.get(); - if (typeName.array()) { - nameBuilder.append("[]"); - maybeComponentType = typeName.componentType(); - } else { - break; - } - } +// if (instance.array()) { +// nameBuilder.append("[]"); +// } +// Optional maybeComponentType = instance.componentType(); +// while (maybeComponentType.isPresent()) { +// TypeName typeName = maybeComponentType.get(); +// if (typeName.array()) { +// nameBuilder.append("[]"); +// maybeComponentType = typeName.componentType(); +// } else { +// break; +// } +// } return nameBuilder.toString(); } @@ -368,21 +368,6 @@ private static String resolveClassName(TypeName instance) { nameBuilder.append(">"); } - if (instance.array()) { - nameBuilder.append("[]"); - } - - Optional maybeComponentType = instance.componentType(); - while (maybeComponentType.isPresent()) { - TypeName typeName = maybeComponentType.get(); - if (typeName.array()) { - nameBuilder.append("[]"); - maybeComponentType = typeName.componentType(); - } else { - break; - } - } - return nameBuilder.toString(); } @@ -418,6 +403,7 @@ static class Decorator implements Prototype.BuilderDecorator target) { fixWildcards(target); + addArrayBracketsToTheName(target); } private void fixWildcards(TypeName.BuilderBase target) { @@ -446,5 +432,30 @@ private void fixWildcards(TypeName.BuilderBase target) { target.generic(true); } } + + private void addArrayBracketsToTheName(TypeName.BuilderBase target) { + target.className() + //Strip all [] from the class name + .map(name -> name.replaceAll("\\[]", "")) + //Add the right amount of [] based on the component types + .map(name -> addArrayBrackets(target, name)) + //Add [] if this type name is an array + .map(name -> target.array() ? name + "[]" : name) + .ifPresent(target::className); + } + + private String addArrayBrackets(TypeName.BuilderBase target, String name) { + Optional componentType = target.componentType(); + while (componentType.isPresent()) { + TypeName current = componentType.get(); + if (current.array()) { + name += "[]"; + componentType = current.componentType(); + } else { + break; + } + } + return name; + } } } diff --git a/json/codegen/src/main/java/io/helidon/json/codegen/JsonConverterGenerator.java b/json/codegen/src/main/java/io/helidon/json/codegen/JsonConverterGenerator.java index 0259d9c1700..0aaebbed623 100644 --- a/json/codegen/src/main/java/io/helidon/json/codegen/JsonConverterGenerator.java +++ b/json/codegen/src/main/java/io/helidon/json/codegen/JsonConverterGenerator.java @@ -527,11 +527,7 @@ private static void valueWritingMethod(JsonProperty property, } private static String ensureUpperStart(TypeName typeName) { - String str = typeName.className().replaceAll("\\[]", "Array"); - if (typeName.array()) { - str += "Array"; - } - return ensureUpperStart(str); + return ensureUpperStart(typeName.className().replaceAll("\\[]", "Array")); } private static String ensureUpperStart(String str) { diff --git a/json/tests/src/main/java/io/helidon/json/tests/RecordWithArray.java b/json/tests/src/main/java/io/helidon/json/tests/RecordWithArray.java index 956bab13163..116feb6f191 100644 --- a/json/tests/src/main/java/io/helidon/json/tests/RecordWithArray.java +++ b/json/tests/src/main/java/io/helidon/json/tests/RecordWithArray.java @@ -3,6 +3,6 @@ import io.helidon.json.binding.Json; @Json.Entity -//public record RecordWithArray(Integer[] intArray, Integer[][] intArray2) { -public record RecordWithArray(Integer[] intArray) { +public record RecordWithArray(Integer[] intArray, Integer[][] intArray2) { +//public record RecordWithArray(Integer[] intArray) { }