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 <[email protected]>
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