You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/09/28 10:00:34 UTC

[shardingsphere] branch master updated: Fix override argument interceptors (#12761)

This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new fa2e494  Fix override argument interceptors (#12761)
fa2e494 is described below

commit fa2e494d369e9ef98931946459c32cf2abeb1bcf
Author: Dachuan J <46...@users.noreply.github.com>
AuthorDate: Tue Sep 28 18:00:00 2021 +0800

    Fix override argument interceptors (#12761)
---
 .../transformer/ShardingSphereTransformer.java        | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
index 7c76621..7d617b3 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
@@ -27,6 +27,7 @@ import net.bytebuddy.dynamic.DynamicType.Builder;
 import net.bytebuddy.implementation.FieldAccessor;
 import net.bytebuddy.implementation.MethodDelegation;
 import net.bytebuddy.implementation.SuperMethodCall;
+import net.bytebuddy.implementation.bind.annotation.Morph;
 import net.bytebuddy.jar.asm.Opcodes;
 import net.bytebuddy.matcher.ElementMatchers;
 import net.bytebuddy.utility.JavaModule;
@@ -34,6 +35,7 @@ import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
 import org.apache.shardingsphere.agent.api.advice.ClassStaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.api.advice.ConstructorAdvice;
 import org.apache.shardingsphere.agent.api.advice.InstanceMethodAroundAdvice;
+import org.apache.shardingsphere.agent.api.advice.OverrideArgsInvoker;
 import org.apache.shardingsphere.agent.api.point.ClassStaticMethodPoint;
 import org.apache.shardingsphere.agent.api.point.ConstructorPoint;
 import org.apache.shardingsphere.agent.api.point.InstanceMethodPoint;
@@ -125,8 +127,13 @@ public final class ShardingSphereTransformer implements Transformer {
         Builder<?> result = builder;
         for (ShardingSphereTransformationPoint<?> each : classStaticMethodAdvicePoints) {
             try {
-                result = result.method(ElementMatchers.is(each.getDescription()))
-                        .intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
+                if (each.getInterceptor() instanceof ClassStaticMethodInterceptorArgsOverride || each.getInterceptor() instanceof ComposeClassStaticMethodInterceptorArgsOverride) {
+                    result = result.method(ElementMatchers.is(each.getDescription()))
+                            .intercept(MethodDelegation.withDefaultConfiguration().withBinders(Morph.Binder.install(OverrideArgsInvoker.class)).to(each.getInterceptor()));
+                } else {
+                    result = result.method(ElementMatchers.is(each.getDescription()))
+                            .intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
+                }
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
@@ -178,7 +185,13 @@ public final class ShardingSphereTransformer implements Transformer {
         Builder<?> result = builder;
         for (ShardingSphereTransformationPoint<?> each : instanceMethodAdviceComposePoints) {
             try {
-                result = result.method(ElementMatchers.is(each.getDescription())).intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
+                if (each.getInterceptor() instanceof InstanceMethodInterceptorArgsOverride || each.getInterceptor() instanceof ComposeInstanceMethodInterceptorArgsOverride) {
+                    result = result.method(ElementMatchers.is(each.getDescription()))
+                            .intercept(MethodDelegation.withDefaultConfiguration().withBinders(Morph.Binder.install(OverrideArgsInvoker.class)).to(each.getInterceptor()));
+                } else {
+                    result = result.method(ElementMatchers.is(each.getDescription()))
+                            .intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
+                }
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON