From 1e47f312102e2726d6194bf044f85df60dcb3ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Mon, 23 Jan 2023 10:55:34 +0100 Subject: [PATCH] Support code generation for Set with non-comparable elements Closes gh-29792 --- .../aot/BeanDefinitionPropertyValueCodeGenerator.java | 10 ++++++++-- .../BeanDefinitionPropertyValueCodeGeneratorTests.java | 9 ++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java index f291ffd187..c05a966b0b 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,6 +55,7 @@ import org.springframework.util.ObjectUtils; * * @author Stephane Nicoll * @author Phillip Webb + * @author Sebastien Deleuze * @since 6.0 */ class BeanDefinitionPropertyValueCodeGenerator { @@ -448,7 +449,12 @@ class BeanDefinitionPropertyValueCodeGenerator { return CodeBlock.of("new $T($L)", LinkedHashSet.class, generateCollectionOf(set, List.class, elementType)); } - set = orderForCodeConsistency(set); + try { + set = orderForCodeConsistency(set); + } + catch (ClassCastException ex) { + // If elements are not comparable, just keep the original set + } return super.generateCollectionCode(elementType, set); } diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorTests.java index ca3c512841..47b8237359 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -59,6 +59,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException * * @author Stephane Nicoll * @author Phillip Webb + * @author Sebastien Deleuze * @since 6.0 * @see BeanDefinitionPropertyValueCodeGeneratorTests */ @@ -438,6 +439,12 @@ class BeanDefinitionPropertyValueCodeGeneratorTests { }); } + @Test + void generateWhenSetOfClass() { + Set> set = Set.of(String.class, Integer.class, Long.class); + compile(set, (instance, compiler) -> assertThat(instance).isEqualTo(set)); + } + } @Nested