diff --git a/application-graph/src/main/java/ru/tinkoff/kora/application/graph/ApplicationGraphDraw.java b/application-graph/src/main/java/ru/tinkoff/kora/application/graph/ApplicationGraphDraw.java index a11692556..c9ec198cf 100644 --- a/application-graph/src/main/java/ru/tinkoff/kora/application/graph/ApplicationGraphDraw.java +++ b/application-graph/src/main/java/ru/tinkoff/kora/application/graph/ApplicationGraphDraw.java @@ -25,11 +25,12 @@ public Node addNode0(Type type, Class[] tags, Graph.Factory Node addNode0(Type type, Class[] tags, Graph.Factory factory, List>> interceptors, Node... dependencies) { + public Node addNode0(Type type, Class[] tags, Graph.Factory factory, List>> interceptors, Node... dependencies) { var dependenciesList = new ArrayList>(); for (var dependency : dependencies) { dependenciesList.add((NodeImpl) dependency); } + @SuppressWarnings("unchecked") var interceptorsList = new ArrayList>>(); for (var interceptor : interceptors) { interceptorsList.add((NodeImpl>) interceptor); diff --git a/kora-app-annotation-processor/src/main/java/ru/tinkoff/kora/kora/app/annotation/processor/ServiceTypesHelper.java b/kora-app-annotation-processor/src/main/java/ru/tinkoff/kora/kora/app/annotation/processor/ServiceTypesHelper.java index c72e06ceb..4f6a85de6 100644 --- a/kora-app-annotation-processor/src/main/java/ru/tinkoff/kora/kora/app/annotation/processor/ServiceTypesHelper.java +++ b/kora-app-annotation-processor/src/main/java/ru/tinkoff/kora/kora/app/annotation/processor/ServiceTypesHelper.java @@ -70,15 +70,7 @@ public boolean isInterceptable(TypeMirror interceptedType, TypeMirror targetType if (this.types.isSameType(interceptedType, targetType)) { return true; } else if (this.types.isAssignable(targetType, interceptedType)) { - // Check if is AopProxy - var typeMirrorElement = types.asElement(targetType); - var annotation = AnnotationUtils.findAnnotation(typeMirrorElement, CommonClassNames.aopProxy); - if (annotation != null) { - var interceptedTypeElement = types.asElement(interceptedType); - var aopProxyName = NameUtils.generatedType(interceptedTypeElement, "_AopProxy"); - var expectedAopProxyCanonicalName = elements.getPackageOf(interceptedTypeElement).toString() + "." + aopProxyName; - return expectedAopProxyCanonicalName.equals(typeMirrorElement.toString()); - } + return true; } return false; diff --git a/kora-app-symbol-processor/src/main/kotlin/ru/tinkoff/kora/kora/app/ksp/ServiceTypesHelper.kt b/kora-app-symbol-processor/src/main/kotlin/ru/tinkoff/kora/kora/app/ksp/ServiceTypesHelper.kt index 3f5a05cfa..26de59363 100644 --- a/kora-app-symbol-processor/src/main/kotlin/ru/tinkoff/kora/kora/app/ksp/ServiceTypesHelper.kt +++ b/kora-app-symbol-processor/src/main/kotlin/ru/tinkoff/kora/kora/app/ksp/ServiceTypesHelper.kt @@ -93,13 +93,7 @@ class ServiceTypesHelper(val resolver: Resolver) { if (targetType == interceptedType.makeNotNullable()) { return true } else if (interceptedType.isAssignableFrom(targetType)) { - val aopProxyAnnotation = targetType.declaration.findAnnotation(CommonClassNames.aopProxy) - val proxyDeclaration = interceptedType.declaration - if (aopProxyAnnotation != null && proxyDeclaration.parentDeclaration != null) { - val aopProxyName = proxyDeclaration.getOuterClassesAsPrefix() + proxyDeclaration.simpleName.asString() + "__AopProxy" - val aopProxyCanonical = proxyDeclaration.packageName.asString() + "." + aopProxyName - return aopProxyCanonical == targetType.declaration.qualifiedName!!.asString() - } + return true } return false diff --git a/kora-app-symbol-processor/src/test/kotlin/ru/tinkoff/kora/kora/app/ksp/GraphInterceptorTests.kt b/kora-app-symbol-processor/src/test/kotlin/ru/tinkoff/kora/kora/app/ksp/GraphInterceptorTests.kt index d0c817151..a5581f778 100644 --- a/kora-app-symbol-processor/src/test/kotlin/ru/tinkoff/kora/kora/app/ksp/GraphInterceptorTests.kt +++ b/kora-app-symbol-processor/src/test/kotlin/ru/tinkoff/kora/kora/app/ksp/GraphInterceptorTests.kt @@ -4,7 +4,7 @@ import org.assertj.core.api.Assertions import org.junit.jupiter.api.Test import ru.tinkoff.kora.application.graph.internal.NodeImpl -class GraphInterceptorTests :AbstractKoraAppProcessorTest() { +class GraphInterceptorTests : AbstractKoraAppProcessorTest() { @Test fun interceptor() { @@ -106,4 +106,37 @@ class GraphInterceptorTests :AbstractKoraAppProcessorTest() { draw.init() Assertions.assertThat((draw.nodes[1] as NodeImpl<*>).interceptors).hasSize(1) } + + @Test + fun interceptorForInterface() { + val draw = compile( + """ + import ru.tinkoff.kora.application.graph.GraphInterceptor + + @KoraApp + interface ExampleApplication { + + interface TestInterface + + class TestClass : TestInterface + + class TestRoot + + class TestInterceptor : GraphInterceptor { + override fun init(value: TestInterface) = value + + override fun release(value: TestInterface) = value + } + + @Root + fun root(testClass: TestClass) = TestRoot() + + fun interceptor(): TestInterceptor = TestInterceptor() + } + """.trimIndent(), + ) + Assertions.assertThat(draw.nodes).hasSize(3) + draw.init() + Assertions.assertThat((draw.nodes[1] as NodeImpl<*>).interceptors).hasSize(1) + } }