diff --git a/spring-modulith-core/src/main/java/org/springframework/modulith/core/FormattableType.java b/spring-modulith-core/src/main/java/org/springframework/modulith/core/FormattableType.java index 47baca8d3..718ca2ae3 100644 --- a/spring-modulith-core/src/main/java/org/springframework/modulith/core/FormattableType.java +++ b/spring-modulith-core/src/main/java/org/springframework/modulith/core/FormattableType.java @@ -152,7 +152,7 @@ public static FormattableType of(ResolvableType type) { .toList(); return resolved != null - ? CACHE.computeIfAbsent(type.toString(), __ -> new FormattableType(resolved.getName(), generics)) + ? CACHE.computeIfAbsent(type.toString(), __ -> new FormattableType(resolved.getTypeName(), generics)) : WILDCARD; } diff --git a/spring-modulith-core/src/test/java/org/springframework/modulith/core/FormattableTypeUnitTests.java b/spring-modulith-core/src/test/java/org/springframework/modulith/core/FormattableTypeUnitTests.java index 71d476fec..8795d86e3 100644 --- a/spring-modulith-core/src/test/java/org/springframework/modulith/core/FormattableTypeUnitTests.java +++ b/spring-modulith-core/src/test/java/org/springframework/modulith/core/FormattableTypeUnitTests.java @@ -128,6 +128,32 @@ void rendersDeclaredGenerics() throws Exception { assertThat(type.getAbbreviatedFullName()).isEqualTo("j.u.List>"); } + @Test // GH-1901 + void handlesArrayTypesFromResolvableType() throws Exception { + + var method = Sample.class.getMethod("arrays", Integer[].class, byte[].class, Integer[][].class, List.class); + + assertThat(FormattableType.of(ResolvableType.forMethodParameter(method, 0)).getAbbreviatedFullName()) + .isEqualTo("j.l.Integer[]"); + assertThat(FormattableType.of(ResolvableType.forMethodParameter(method, 1)).getAbbreviatedFullName()) + .isEqualTo("byte[]"); + assertThat(FormattableType.of(ResolvableType.forMethodParameter(method, 2)).getFullName()) + .isEqualTo("java.lang.Integer[][]"); + assertThat(FormattableType.of(ResolvableType.forMethodParameter(method, 3)).getAbbreviatedFullName()) + .isEqualTo("j.u.List"); + } + + @Test // GH-1901 + void rendersArrayTypesConsistentlyIndependentOfLookupOrder() { + + var fromResolvableType = FormattableType.of(ResolvableType.forClass(Sample[].class)); + var fromClass = FormattableType.of(Sample[].class); + + assertThat(fromClass.getFullName()) + .isEqualTo(fromResolvableType.getFullName()) + .isEqualTo("org.springframework.modulith.core.FormattableTypeUnitTests.Sample[]"); + } + interface Sample { List wildcarded(List parameterized); @@ -135,5 +161,7 @@ interface Sample { void classWildcard(Class type); List> genericReturnType(); + + void arrays(Integer[] integers, byte[] bytes, Integer[][] matrix, List list); } }