Merge branch '7.0.x'

This commit is contained in:
Sébastien Deleuze
2026-09-30 10:47:10 +02:00
3 changed files with 69 additions and 1 deletions
@@ -128,7 +128,7 @@ abstract class CoroutinesUtils {
for (KFunction<?> candidate : KClasses.getDeclaredMemberFunctions(superClass)) {
if (candidate.getName().equals(function.getName()) && candidate.isSuspend() &&
hasSameParameterTypes(function, candidate, superType) &&
candidate.getReturnType().getClassifier() != valueKClass) {
!valueKClass.equals(candidate.getReturnType().getClassifier())) {
return true;
}
}
@@ -282,6 +282,28 @@ class CglibAopProxyKotlinTests {
assertThat(proxy.returnValue()).isEqualTo(ValueClass("bar"))
}
@Test
suspend fun proxiedSuspendedInvocationValueClassOverridingValueClass() {
val proxyFactory = ProxyFactory(ValueClassOverridingValueClassBean())
proxyFactory.isProxyTargetClass = true
proxyFactory.addAdvice(MethodInterceptor {
ValueClass("bar")
})
val proxy = proxyFactory.proxy as ValueClassOverridingValueClassBean
assertThat(proxy.returnValue()).isEqualTo(ValueClass("bar"))
}
@Test
suspend fun proxiedSuspendedInvocationValueClassOverridingValueClassProceed() {
val proxyFactory = ProxyFactory(ValueClassOverridingValueClassBean())
proxyFactory.isProxyTargetClass = true
proxyFactory.addAdvice(MethodInterceptor {
it.proceed()
})
val proxy = proxyFactory.proxy as ValueClassOverridingValueClassBean
assertThat(proxy.returnValue()).isEqualTo(ValueClass("foo"))
}
@Test
suspend fun proxiedSuspendedInvocationValueClassOverridingGeneric() {
val proxyFactory = ProxyFactory(ValueClassOverridingGenericBean())
@@ -473,6 +495,17 @@ class CglibAopProxyKotlinTests {
}
}
interface ValueClassBean {
suspend fun returnValue(): ValueClass
}
open class ValueClassOverridingValueClassBean : ValueClassBean {
override suspend fun returnValue(): ValueClass {
delay(10.milliseconds)
return ValueClass("foo")
}
}
interface GenericBean<T> {
suspend fun returnValue(): T
}
@@ -252,6 +252,26 @@ class JdkDynamicAopProxyKotlinTests {
assertThat(proxy.returnValue()).isEqualTo(ValueClass("bar"))
}
@Test
suspend fun proxiedSuspendedInvocationValueClassOverridingValueClass() {
val proxyFactory = ProxyFactory(ValueClassOverridingValueClassBeanImpl())
proxyFactory.addAdvice(MethodInterceptor {
ValueClass("bar")
})
val proxy = proxyFactory.proxy as ValueClassOverridingValueClassBean
assertThat(proxy.returnValue()).isEqualTo(ValueClass("bar"))
}
@Test
suspend fun proxiedSuspendedInvocationValueClassOverridingValueClassProceed() {
val proxyFactory = ProxyFactory(ValueClassOverridingValueClassBeanImpl())
proxyFactory.addAdvice(MethodInterceptor {
it.proceed()
})
val proxy = proxyFactory.proxy as ValueClassOverridingValueClassBean
assertThat(proxy.returnValue()).isEqualTo(ValueClass("foo"))
}
@Test
suspend fun proxiedSuspendedInvocationValueClassOverridingGeneric() {
val proxyFactory = ProxyFactory(ValueClassOverridingGenericBeanImpl())
@@ -421,6 +441,21 @@ class JdkDynamicAopProxyKotlinTests {
}
}
interface ValueClassBean {
suspend fun returnValue(): ValueClass
}
interface ValueClassOverridingValueClassBean : ValueClassBean {
override suspend fun returnValue(): ValueClass
}
class ValueClassOverridingValueClassBeanImpl : ValueClassOverridingValueClassBean {
override suspend fun returnValue(): ValueClass {
delay(10.milliseconds)
return ValueClass("foo")
}
}
interface GenericBean<T> {
suspend fun returnValue(): T
}