Reject sealed interfaces in AopProxyUtils.completeJdkProxyInterfaces()

See gh-28745
This commit is contained in:
Sam Brannen
2022-07-11 16:58:55 +02:00
parent 9d42779826
commit 7bfcb4c753
2 changed files with 35 additions and 28 deletions

View File

@@ -109,11 +109,25 @@ class AopProxyUtilsTests {
assertThatIllegalArgumentException().isThrownBy(() -> AopProxyUtils.proxiedUserInterfaces(proxy));
}
@Test
void completeJdkProxyInterfacesFromNullInterface() {
assertThatIllegalArgumentException()
.isThrownBy(() -> AopProxyUtils.completeJdkProxyInterfaces(ITestBean.class, null, Comparable.class))
.withMessage("'userInterfaces' must not contain null values");
}
@Test
void completeJdkProxyInterfacesFromClassThatIsNotAnInterface() {
assertThatIllegalArgumentException()
.isThrownBy(() -> AopProxyUtils.completeJdkProxyInterfaces(TestBean.class))
.withMessage(TestBean.class.getName() + " must be an interface");
.withMessage(TestBean.class.getName() + " must be a non-sealed interface");
}
@Test
void completeJdkProxyInterfacesFromSealedInterface() {
assertThatIllegalArgumentException()
.isThrownBy(() -> AopProxyUtils.completeJdkProxyInterfaces(SealedInterface.class))
.withMessage(SealedInterface.class.getName() + " must be a non-sealed interface");
}
@Test
@@ -130,13 +144,6 @@ class AopProxyUtilsTests {
ITestBean.class, Comparable.class, SpringProxy.class, Advised.class, DecoratingProxy.class);
}
@Test
void completeJdkProxyInterfacesIgnoresSealedInterfaces() {
Class<?>[] jdkProxyInterfaces = AopProxyUtils.completeJdkProxyInterfaces(SealedInterface.class, Comparable.class);
assertThat(jdkProxyInterfaces).containsExactly(
Comparable.class, SpringProxy.class, Advised.class, DecoratingProxy.class);
}
@Test
void completeJdkProxyInterfacesFromSingleClassName() {
String[] jdkProxyInterfaces = AopProxyUtils.completeJdkProxyInterfaces(ITestBean.class.getName());
@@ -158,7 +165,7 @@ class AopProxyUtilsTests {
sealed interface SealedInterface {
}
static final class SealedType implements SealedInterface {
static final class SealedClass implements SealedInterface {
}
}