Avoid ambiguous call with BeanInstanceSupplier#withGenerator
Previously, BeanInstanceSupplier had three variants of the `withGenerator` callback, one with a bi function, one with a function, and with a supplier. This could lead to compilation failure when the target type has a method with the same name and a number of arguments that match another variant. It turns out the supplier-based variant is only used a shortcut. This commit deprecates it and update ghe code generation to use the function instead. Closes gh-29278
This commit is contained in:
parent
1edc0d8002
commit
1b09ef5051
|
@ -172,7 +172,9 @@ public final class BeanInstanceSupplier<T> extends AutowiredElementResolver impl
|
||||||
* {@code generator} supplier to instantiate the underlying bean.
|
* {@code generator} supplier to instantiate the underlying bean.
|
||||||
* @param generator a {@link ThrowingSupplier} to instantiate the underlying bean
|
* @param generator a {@link ThrowingSupplier} to instantiate the underlying bean
|
||||||
* @return a new {@link BeanInstanceSupplier} instance with the specified generator
|
* @return a new {@link BeanInstanceSupplier} instance with the specified generator
|
||||||
|
* @deprecated in favor of {@link #withGenerator(ThrowingFunction)}
|
||||||
*/
|
*/
|
||||||
|
@Deprecated(since = "6.0.11", forRemoval = true)
|
||||||
public BeanInstanceSupplier<T> withGenerator(ThrowingSupplier<T> generator) {
|
public BeanInstanceSupplier<T> withGenerator(ThrowingSupplier<T> generator) {
|
||||||
Assert.notNull(generator, "'generator' must not be null");
|
Assert.notNull(generator, "'generator' must not be null");
|
||||||
return new BeanInstanceSupplier<>(this.lookup,
|
return new BeanInstanceSupplier<>(this.lookup,
|
||||||
|
|
|
@ -220,7 +220,8 @@ class InstanceSupplierCodeGenerator {
|
||||||
CodeBlock.Builder code = CodeBlock.builder();
|
CodeBlock.Builder code = CodeBlock.builder();
|
||||||
code.add("$T.<$T>forFactoryMethod($T.class, $S)", BeanInstanceSupplier.class,
|
code.add("$T.<$T>forFactoryMethod($T.class, $S)", BeanInstanceSupplier.class,
|
||||||
suppliedType, declaringClass, factoryMethod.getName());
|
suppliedType, declaringClass, factoryMethod.getName());
|
||||||
code.add(".withGenerator($T::$L)", declaringClass, factoryMethod.getName());
|
code.add(".withGenerator(($L) -> $T.$L())", REGISTERED_BEAN_PARAMETER_NAME,
|
||||||
|
declaringClass, factoryMethod.getName());
|
||||||
return code.build();
|
return code.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -186,6 +186,8 @@ class BeanInstanceSupplierTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@Deprecated
|
||||||
|
@SuppressWarnings("removal")
|
||||||
void withGeneratorWhenSupplierIsNullThrowsException() {
|
void withGeneratorWhenSupplierIsNullThrowsException() {
|
||||||
BeanInstanceSupplier<Object> resolver = BeanInstanceSupplier
|
BeanInstanceSupplier<Object> resolver = BeanInstanceSupplier
|
||||||
.forConstructor();
|
.forConstructor();
|
||||||
|
@ -245,6 +247,8 @@ class BeanInstanceSupplierTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@Deprecated
|
||||||
|
@SuppressWarnings("removal")
|
||||||
void getWithGeneratorCallsSupplier() throws Exception {
|
void getWithGeneratorCallsSupplier() throws Exception {
|
||||||
BeanRegistrar registrar = new BeanRegistrar(SingleArgConstructor.class);
|
BeanRegistrar registrar = new BeanRegistrar(SingleArgConstructor.class);
|
||||||
this.beanFactory.registerSingleton("one", "1");
|
this.beanFactory.registerSingleton("one", "1");
|
||||||
|
|
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -223,7 +223,7 @@ class InstanceSupplierCodeGeneratorTests {
|
||||||
assertThat(bean).isInstanceOf(Integer.class);
|
assertThat(bean).isInstanceOf(Integer.class);
|
||||||
assertThat(bean).isEqualTo(42);
|
assertThat(bean).isEqualTo(42);
|
||||||
assertThat(compiled.getSourceFile())
|
assertThat(compiled.getSourceFile())
|
||||||
.contains("SimpleConfiguration::integerBean");
|
.contains("(registeredBean) -> SimpleConfiguration.integerBean()");
|
||||||
});
|
});
|
||||||
assertThat(getReflectionHints().getTypeHint(SimpleConfiguration.class))
|
assertThat(getReflectionHints().getTypeHint(SimpleConfiguration.class))
|
||||||
.satisfies(hasMethodWithMode(ExecutableMode.INTROSPECT));
|
.satisfies(hasMethodWithMode(ExecutableMode.INTROSPECT));
|
||||||
|
|
Loading…
Reference in New Issue