Reject @Bean method with void return type
Closes gh-31007
This commit is contained in:
parent
3c34e69cc2
commit
d3d414c3c7
|
|
@ -42,8 +42,13 @@ final class BeanMethod extends ConfigurationMethod {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate(ProblemReporter problemReporter) {
|
public void validate(ProblemReporter problemReporter) {
|
||||||
|
if ("void".equals(getMetadata().getReturnTypeName())) {
|
||||||
|
// declared as void: potential misuse of @Bean, maybe meant as init method instead?
|
||||||
|
problemReporter.error(new VoidDeclaredMethodError());
|
||||||
|
}
|
||||||
|
|
||||||
if (getMetadata().isStatic()) {
|
if (getMetadata().isStatic()) {
|
||||||
// static @Bean methods have no constraints to validate -> return immediately
|
// static @Bean methods have no further constraints to validate -> return immediately
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -71,6 +76,15 @@ final class BeanMethod extends ConfigurationMethod {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private class VoidDeclaredMethodError extends Problem {
|
||||||
|
|
||||||
|
VoidDeclaredMethodError() {
|
||||||
|
super("@Bean method '%s' must not be declared as void; change the method's return type or its annotation."
|
||||||
|
.formatted(getMetadata().getMethodName()), getResourceLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private class NonOverridableMethodError extends Problem {
|
private class NonOverridableMethodError extends Problem {
|
||||||
|
|
||||||
NonOverridableMethodError() {
|
NonOverridableMethodError() {
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -143,6 +143,12 @@ class ConfigurationClassProcessingTests {
|
||||||
initBeanFactory(ConfigWithFinalBean.class));
|
initBeanFactory(ConfigWithFinalBean.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test // gh-31007
|
||||||
|
void voidBeanMethod() {
|
||||||
|
assertThatExceptionOfType(BeanDefinitionParsingException.class).isThrownBy(() ->
|
||||||
|
initBeanFactory(ConfigWithVoidBean.class));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void simplestPossibleConfig() {
|
void simplestPossibleConfig() {
|
||||||
BeanFactory factory = initBeanFactory(SimplestPossibleConfig.class);
|
BeanFactory factory = initBeanFactory(SimplestPossibleConfig.class);
|
||||||
|
|
@ -432,6 +438,14 @@ class ConfigurationClassProcessingTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
static class ConfigWithVoidBean {
|
||||||
|
|
||||||
|
public @Bean void testBean() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
static class SimplestPossibleConfig {
|
static class SimplestPossibleConfig {
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue