You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/12/19 08:36:55 UTC
[shardingsphere] branch master updated: Refactor MethodAdvisorBuildEngine (#22967)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 6b97102e1e7 Refactor MethodAdvisorBuildEngine (#22967)
6b97102e1e7 is described below
commit 6b97102e1e7941de2938fbe49c8f440d65ce38b8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Dec 19 16:36:48 2022 +0800
Refactor MethodAdvisorBuildEngine (#22967)
---
.../agent/config/advisor/AdvisorConfiguration.java | 6 +--
.../agent/core/plugin/executor/AdviceExecutor.java | 12 +++++
.../executor/type/ConstructorAdviceExecutor.java | 11 ++++
.../type/InstanceMethodAdviceExecutor.java | 9 ++++
.../executor/type/StaticMethodAdviceExecutor.java | 9 ++++
.../swapper/YamlAdvisorConfigurationSwapper.java | 6 +--
.../agent/core/transformer/AgentTransformer.java | 7 +--
.../build/MethodAdvisorBuildEngine.java | 62 +++++++++++++++++-----
.../build/builder/MethodAdvisorBuilder.java | 57 --------------------
.../builder/type/ConstructorAdvisorBuilder.java | 61 ---------------------
.../builder/type/InstanceMethodAdvisorBuilder.java | 59 --------------------
.../builder/type/StaticMethodAdvisorBuilder.java | 59 --------------------
.../core/transformer/AgentTransformerTest.java | 10 ++--
.../base/BaseLoggingAdvisorDefinitionService.java | 2 +-
.../adviser/impl/CommandExecutorTaskAdviser.java | 2 +-
.../adviser/impl/JDBCExecutorCallbackAdviser.java | 2 +-
.../adviser/impl/SQLParserEngineAdviser.java | 2 +-
17 files changed, 103 insertions(+), 273 deletions(-)
diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/AdvisorConfiguration.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/AdvisorConfiguration.java
index a8e5cc2abe9..633842810e7 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/AdvisorConfiguration.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/AdvisorConfiguration.java
@@ -32,9 +32,5 @@ public final class AdvisorConfiguration {
private final String targetClassName;
- private final Collection<MethodAdvisorConfiguration> constructorAdvisors = new LinkedList<>();
-
- private final Collection<MethodAdvisorConfiguration> instanceMethodAdvisors = new LinkedList<>();
-
- private final Collection<MethodAdvisorConfiguration> staticMethodAdvisors = new LinkedList<>();
+ private final Collection<MethodAdvisorConfiguration> advisors = new LinkedList<>();
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/AdviceExecutor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/AdviceExecutor.java
index abe76d2c60d..e8574f80306 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/AdviceExecutor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/AdviceExecutor.java
@@ -17,8 +17,20 @@
package org.apache.shardingsphere.agent.core.plugin.executor;
+import net.bytebuddy.dynamic.DynamicType.Builder;
+import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
+
/**
* Advice executor.
*/
public interface AdviceExecutor {
+
+ /**
+ * Create method advisor builder.
+ *
+ * @param builder original builder
+ * @param methodAdvisor method advisor
+ * @return created builder
+ */
+ Builder<?> create(Builder<?> builder, MethodAdvisor methodAdvisor);
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/ConstructorAdviceExecutor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/ConstructorAdviceExecutor.java
index 12290794e2c..9315aac723c 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/ConstructorAdviceExecutor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/ConstructorAdviceExecutor.java
@@ -18,15 +18,20 @@
package org.apache.shardingsphere.agent.core.plugin.executor.type;
import lombok.RequiredArgsConstructor;
+import net.bytebuddy.dynamic.DynamicType.Builder;
+import net.bytebuddy.implementation.MethodDelegation;
+import net.bytebuddy.implementation.SuperMethodCall;
import net.bytebuddy.implementation.bind.annotation.AllArguments;
import net.bytebuddy.implementation.bind.annotation.RuntimeType;
import net.bytebuddy.implementation.bind.annotation.This;
+import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.advice.TargetAdviceObject;
import org.apache.shardingsphere.agent.advice.type.ConstructorAdvice;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory.Logger;
import org.apache.shardingsphere.agent.core.plugin.PluginContext;
import org.apache.shardingsphere.agent.core.plugin.executor.AdviceExecutor;
+import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
import java.util.Collection;
@@ -61,4 +66,10 @@ public final class ConstructorAdviceExecutor implements AdviceExecutor {
LOGGER.error("Constructor advice execution error. class: {}", target.getClass().getTypeName(), throwable);
}
}
+
+ @Override
+ public Builder<?> create(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
+ return builder.constructor(ElementMatchers.is(methodAdvisor.getPointcut()))
+ .intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor())));
+ }
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/InstanceMethodAdviceExecutor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/InstanceMethodAdviceExecutor.java
index 8e82d443ecb..328ef8e5d41 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/InstanceMethodAdviceExecutor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/InstanceMethodAdviceExecutor.java
@@ -19,17 +19,21 @@ package org.apache.shardingsphere.agent.core.plugin.executor.type;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
+import net.bytebuddy.dynamic.DynamicType.Builder;
+import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.implementation.bind.annotation.AllArguments;
import net.bytebuddy.implementation.bind.annotation.Origin;
import net.bytebuddy.implementation.bind.annotation.RuntimeType;
import net.bytebuddy.implementation.bind.annotation.SuperCall;
import net.bytebuddy.implementation.bind.annotation.This;
+import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.advice.MethodInvocationResult;
import org.apache.shardingsphere.agent.advice.TargetAdviceObject;
import org.apache.shardingsphere.agent.advice.type.InstanceMethodAdvice;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
import org.apache.shardingsphere.agent.core.plugin.PluginContext;
import org.apache.shardingsphere.agent.core.plugin.executor.AdviceExecutor;
+import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
import java.lang.reflect.Method;
import java.util.Collection;
@@ -116,4 +120,9 @@ public final class InstanceMethodAdviceExecutor implements AdviceExecutor {
LOGGER.error("Failed to execute the post-method of method `{}` in class `{}`.", method.getName(), target.getClass(), ex);
}
}
+
+ @Override
+ public Builder<?> create(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
+ return builder.method(ElementMatchers.is(methodAdvisor.getPointcut())).intercept(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor()));
+ }
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/StaticMethodAdviceExecutor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/StaticMethodAdviceExecutor.java
index 6b508b2586a..cb0a0191482 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/StaticMethodAdviceExecutor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/StaticMethodAdviceExecutor.java
@@ -19,15 +19,19 @@ package org.apache.shardingsphere.agent.core.plugin.executor.type;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
+import net.bytebuddy.dynamic.DynamicType.Builder;
+import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.implementation.bind.annotation.AllArguments;
import net.bytebuddy.implementation.bind.annotation.Origin;
import net.bytebuddy.implementation.bind.annotation.RuntimeType;
import net.bytebuddy.implementation.bind.annotation.SuperCall;
+import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.advice.MethodInvocationResult;
import org.apache.shardingsphere.agent.advice.type.StaticMethodAdvice;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
import org.apache.shardingsphere.agent.core.plugin.PluginContext;
import org.apache.shardingsphere.agent.core.plugin.executor.AdviceExecutor;
+import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
import java.lang.reflect.Method;
import java.util.Collection;
@@ -114,4 +118,9 @@ public final class StaticMethodAdviceExecutor implements AdviceExecutor {
LOGGER.error("Failed to execute the post-method of method `{}` in class `{}`.", method.getName(), klass, ex);
}
}
+
+ @Override
+ public Builder<?> create(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
+ return builder.method(ElementMatchers.is(methodAdvisor.getPointcut())).intercept(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor()));
+ }
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/yaml/swapper/YamlAdvisorConfigurationSwapper.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/yaml/swapper/YamlAdvisorConfigurationSwapper.java
index bb605d83df8..793628c0921 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/yaml/swapper/YamlAdvisorConfigurationSwapper.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/yaml/swapper/YamlAdvisorConfigurationSwapper.java
@@ -40,15 +40,15 @@ public final class YamlAdvisorConfigurationSwapper {
AdvisorConfiguration result = AdvisorConfigurationRegistryFactory.getRegistry(type).getAdvisorConfiguration(yamlAdvisorConfig.getTarget());
String[] constructPointcuts = yamlAdvisorConfig.getPointcuts().stream().filter(each -> "construct".equals(each.getType())).map(YamlPointcutConfiguration::getName).toArray(String[]::new);
if (constructPointcuts.length > 0) {
- result.getConstructorAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.isConstructor(), yamlAdvisorConfig.getAdvice()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.isConstructor(), yamlAdvisorConfig.getAdvice()));
}
String[] instanceMethodPointcuts = yamlAdvisorConfig.getPointcuts().stream().filter(each -> "instance".equals(each.getType())).map(YamlPointcutConfiguration::getName).toArray(String[]::new);
if (instanceMethodPointcuts.length > 0) {
- result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.namedOneOf(instanceMethodPointcuts), yamlAdvisorConfig.getAdvice()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.namedOneOf(instanceMethodPointcuts), yamlAdvisorConfig.getAdvice()));
}
String[] staticMethodPointcuts = yamlAdvisorConfig.getPointcuts().stream().filter(each -> "static".equals(each.getType())).map(YamlPointcutConfiguration::getName).toArray(String[]::new);
if (staticMethodPointcuts.length > 0) {
- result.getStaticMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.namedOneOf(staticMethodPointcuts), yamlAdvisorConfig.getAdvice()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.namedOneOf(staticMethodPointcuts), yamlAdvisorConfig.getAdvice()));
}
return result;
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
index 988e56119ff..16969430a64 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
@@ -30,9 +30,6 @@ import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration;
import org.apache.shardingsphere.agent.core.plugin.PluginJar;
import org.apache.shardingsphere.agent.core.transformer.build.MethodAdvisorBuildEngine;
import org.apache.shardingsphere.agent.core.transformer.build.advise.AdviceFactory;
-import org.apache.shardingsphere.agent.core.transformer.build.builder.type.ConstructorAdvisorBuilder;
-import org.apache.shardingsphere.agent.core.transformer.build.builder.type.InstanceMethodAdvisorBuilder;
-import org.apache.shardingsphere.agent.core.transformer.build.builder.type.StaticMethodAdvisorBuilder;
import java.util.Collection;
import java.util.Map;
@@ -62,9 +59,7 @@ public final class AgentTransformer implements Transformer {
Builder<?> result = builder.defineField(EXTRA_DATA, Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE).implement(TargetAdviceObject.class).intercept(FieldAccessor.ofField(EXTRA_DATA));
AdvisorConfiguration advisorConfig = advisorConfigs.get(typeDescription.getTypeName());
AdviceFactory adviceFactory = new AdviceFactory(classLoader, pluginConfigs, pluginJars, isEnhancedForProxy);
- result = new MethodAdvisorBuildEngine(advisorConfig.getConstructorAdvisors(), typeDescription).create(result, new ConstructorAdvisorBuilder(adviceFactory));
- result = new MethodAdvisorBuildEngine(advisorConfig.getInstanceMethodAdvisors(), typeDescription).create(result, new InstanceMethodAdvisorBuilder(adviceFactory));
- result = new MethodAdvisorBuildEngine(advisorConfig.getStaticMethodAdvisors(), typeDescription).create(result, new StaticMethodAdvisorBuilder(adviceFactory));
+ result = new MethodAdvisorBuildEngine(adviceFactory, advisorConfig.getAdvisors(), typeDescription).create(result);
return result;
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/MethodAdvisorBuildEngine.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/MethodAdvisorBuildEngine.java
index f623e080e5d..21b37a225e4 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/MethodAdvisorBuildEngine.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/MethodAdvisorBuildEngine.java
@@ -21,14 +21,19 @@ import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription.InDefinedShape;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType.Builder;
+import org.apache.shardingsphere.agent.advice.type.ConstructorAdvice;
+import org.apache.shardingsphere.agent.advice.type.InstanceMethodAdvice;
+import org.apache.shardingsphere.agent.advice.type.StaticMethodAdvice;
import org.apache.shardingsphere.agent.config.advisor.MethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
+import org.apache.shardingsphere.agent.core.plugin.executor.type.ConstructorAdviceExecutor;
+import org.apache.shardingsphere.agent.core.plugin.executor.type.InstanceMethodAdviceExecutor;
+import org.apache.shardingsphere.agent.core.plugin.executor.type.StaticMethodAdviceExecutor;
import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
-import org.apache.shardingsphere.agent.core.transformer.build.builder.MethodAdvisorBuilder;
+import org.apache.shardingsphere.agent.core.transformer.build.advise.AdviceFactory;
import java.util.Collection;
-import java.util.List;
-import java.util.Objects;
+import java.util.LinkedList;
import java.util.stream.Collectors;
/**
@@ -39,6 +44,8 @@ public final class MethodAdvisorBuildEngine {
private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(MethodAdvisorBuildEngine.class);
+ private final AdviceFactory adviceFactory;
+
private final Collection<MethodAdvisorConfiguration> advisorConfigs;
private final TypeDescription typePointcut;
@@ -47,16 +54,13 @@ public final class MethodAdvisorBuildEngine {
* Create method advisor builder.
*
* @param builder original builder
- * @param methodAdvisorBuilder method advisor builder
* @return created builder
*/
- public Builder<?> create(final Builder<?> builder, final MethodAdvisorBuilder methodAdvisorBuilder) {
+ public Builder<?> create(final Builder<?> builder) {
Builder<?> result = builder;
- Collection<MethodAdvisor> matchedAdvisor = typePointcut.getDeclaredMethods().stream()
- .filter(methodAdvisorBuilder::isMatchedMethod).map(each -> findMatchedAdvisor(each, methodAdvisorBuilder)).filter(Objects::nonNull).collect(Collectors.toList());
- for (MethodAdvisor each : matchedAdvisor) {
+ for (MethodAdvisor each : getMatchedMethodAdvisors()) {
try {
- result = methodAdvisorBuilder.create(result, each);
+ result = each.getAdviceExecutor().create(result, each);
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
@@ -66,11 +70,41 @@ public final class MethodAdvisorBuildEngine {
return result;
}
- private MethodAdvisor findMatchedAdvisor(final InDefinedShape methodDescription, final MethodAdvisorBuilder methodAdvisorBuilder) {
- List<MethodAdvisorConfiguration> matchedAdvisorConfigs = advisorConfigs.stream().filter(each -> each.getPointcut().matches(methodDescription)).collect(Collectors.toList());
- if (matchedAdvisorConfigs.isEmpty()) {
- return null;
+ private Collection<MethodAdvisor> getMatchedMethodAdvisors() {
+ Collection<MethodAdvisor> result = new LinkedList<>();
+ for (InDefinedShape each : typePointcut.getDeclaredMethods()) {
+ result.addAll(getMatchedMethodAdvisors(each));
+ }
+ return result;
+ }
+
+ private Collection<MethodAdvisor> getMatchedMethodAdvisors(final InDefinedShape methodDescription) {
+ Collection<MethodAdvisor> result = new LinkedList<>();
+ if (isConstructor(methodDescription)) {
+ Collection<ConstructorAdvice> advices = advisorConfigs.stream()
+ .filter(each -> each.getPointcut().matches(methodDescription)).map(each -> (ConstructorAdvice) adviceFactory.getAdvice(each.getAdviceClassName())).collect(Collectors.toList());
+ result.add(new MethodAdvisor(methodDescription, new ConstructorAdviceExecutor(advices)));
+ } else if (isStaticMethod(methodDescription)) {
+ Collection<StaticMethodAdvice> advices = advisorConfigs.stream()
+ .filter(each -> each.getPointcut().matches(methodDescription)).map(each -> (StaticMethodAdvice) adviceFactory.getAdvice(each.getAdviceClassName())).collect(Collectors.toList());
+ result.add(new MethodAdvisor(methodDescription, new StaticMethodAdviceExecutor(advices)));
+ } else if (isMethod(methodDescription)) {
+ Collection<InstanceMethodAdvice> advices = advisorConfigs.stream()
+ .filter(each -> each.getPointcut().matches(methodDescription)).map(each -> (InstanceMethodAdvice) adviceFactory.getAdvice(each.getAdviceClassName())).collect(Collectors.toList());
+ result.add(new MethodAdvisor(methodDescription, new InstanceMethodAdviceExecutor(advices)));
}
- return methodAdvisorBuilder.getMethodAdvisor(methodDescription, matchedAdvisorConfigs);
+ return result;
+ }
+
+ private boolean isConstructor(final InDefinedShape methodDescription) {
+ return methodDescription.isConstructor();
+ }
+
+ private boolean isStaticMethod(final InDefinedShape methodDescription) {
+ return methodDescription.isStatic() && isMethod(methodDescription);
+ }
+
+ private boolean isMethod(final InDefinedShape methodDescription) {
+ return !(methodDescription.isAbstract() || methodDescription.isSynthetic());
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/MethodAdvisorBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/MethodAdvisorBuilder.java
deleted file mode 100644
index 8fe3aabc829..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/MethodAdvisorBuilder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.agent.core.transformer.build.builder;
-
-import net.bytebuddy.description.method.MethodDescription.InDefinedShape;
-import net.bytebuddy.dynamic.DynamicType.Builder;
-import org.apache.shardingsphere.agent.config.advisor.MethodAdvisorConfiguration;
-import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
-
-import java.util.List;
-
-/**
- * Method advisor builder.
- */
-public interface MethodAdvisorBuilder {
-
- /**
- * Create method advisor builder.
- *
- * @param builder original builder
- * @param methodAdvisor method advisor
- * @return created builder
- */
- Builder<?> create(Builder<?> builder, MethodAdvisor methodAdvisor);
-
- /**
- * Judge whether method matched.
- *
- * @param methodDescription method description
- * @return matched or not
- */
- boolean isMatchedMethod(InDefinedShape methodDescription);
-
- /**
- * Get method advisor.
- *
- * @param methodDescription method description
- * @param advisorConfigs advisor configurations
- * @return got method advisor
- */
- MethodAdvisor getMethodAdvisor(InDefinedShape methodDescription, List<MethodAdvisorConfiguration> advisorConfigs);
-}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/ConstructorAdvisorBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/ConstructorAdvisorBuilder.java
deleted file mode 100644
index 5d310246f2f..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/ConstructorAdvisorBuilder.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.agent.core.transformer.build.builder.type;
-
-import lombok.RequiredArgsConstructor;
-import net.bytebuddy.description.method.MethodDescription.InDefinedShape;
-import net.bytebuddy.dynamic.DynamicType.Builder;
-import net.bytebuddy.implementation.MethodDelegation;
-import net.bytebuddy.implementation.SuperMethodCall;
-import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.advice.type.ConstructorAdvice;
-import org.apache.shardingsphere.agent.config.advisor.MethodAdvisorConfiguration;
-import org.apache.shardingsphere.agent.core.plugin.executor.type.ConstructorAdviceExecutor;
-import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
-import org.apache.shardingsphere.agent.core.transformer.build.advise.AdviceFactory;
-import org.apache.shardingsphere.agent.core.transformer.build.builder.MethodAdvisorBuilder;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Constructor advisor builder.
- */
-@RequiredArgsConstructor
-public final class ConstructorAdvisorBuilder implements MethodAdvisorBuilder {
-
- private final AdviceFactory adviceFactory;
-
- @Override
- public Builder<?> create(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
- return builder.constructor(ElementMatchers.is(methodAdvisor.getPointcut()))
- .intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor())));
- }
-
- @Override
- public boolean isMatchedMethod(final InDefinedShape methodDescription) {
- return methodDescription.isConstructor();
- }
-
- @Override
- public MethodAdvisor getMethodAdvisor(final InDefinedShape methodDescription, final List<MethodAdvisorConfiguration> advisorConfigs) {
- Collection<ConstructorAdvice> advices = advisorConfigs.stream().map(each -> (ConstructorAdvice) adviceFactory.getAdvice(each.getAdviceClassName())).collect(Collectors.toList());
- return new MethodAdvisor(methodDescription, new ConstructorAdviceExecutor(advices));
- }
-}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/InstanceMethodAdvisorBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/InstanceMethodAdvisorBuilder.java
deleted file mode 100644
index e849b25e18b..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/InstanceMethodAdvisorBuilder.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.agent.core.transformer.build.builder.type;
-
-import lombok.RequiredArgsConstructor;
-import net.bytebuddy.description.method.MethodDescription.InDefinedShape;
-import net.bytebuddy.dynamic.DynamicType.Builder;
-import net.bytebuddy.implementation.MethodDelegation;
-import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.config.advisor.MethodAdvisorConfiguration;
-import org.apache.shardingsphere.agent.advice.type.InstanceMethodAdvice;
-import org.apache.shardingsphere.agent.core.plugin.executor.type.InstanceMethodAdviceExecutor;
-import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
-import org.apache.shardingsphere.agent.core.transformer.build.advise.AdviceFactory;
-import org.apache.shardingsphere.agent.core.transformer.build.builder.MethodAdvisorBuilder;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Instance method advisor builder.
- */
-@RequiredArgsConstructor
-public final class InstanceMethodAdvisorBuilder implements MethodAdvisorBuilder {
-
- private final AdviceFactory adviceFactory;
-
- @Override
- public Builder<?> create(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
- return builder.method(ElementMatchers.is(methodAdvisor.getPointcut())).intercept(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor()));
- }
-
- @Override
- public boolean isMatchedMethod(final InDefinedShape methodDescription) {
- return !(methodDescription.isAbstract() || methodDescription.isSynthetic());
- }
-
- @Override
- public MethodAdvisor getMethodAdvisor(final InDefinedShape methodDescription, final List<MethodAdvisorConfiguration> advisorConfigs) {
- Collection<InstanceMethodAdvice> advices = advisorConfigs.stream().map(each -> (InstanceMethodAdvice) adviceFactory.getAdvice(each.getAdviceClassName())).collect(Collectors.toList());
- return new MethodAdvisor(methodDescription, new InstanceMethodAdviceExecutor(advices));
- }
-}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/StaticMethodAdvisorBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/StaticMethodAdvisorBuilder.java
deleted file mode 100644
index 2f7271da7ed..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/builder/type/StaticMethodAdvisorBuilder.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.agent.core.transformer.build.builder.type;
-
-import lombok.RequiredArgsConstructor;
-import net.bytebuddy.description.method.MethodDescription.InDefinedShape;
-import net.bytebuddy.dynamic.DynamicType.Builder;
-import net.bytebuddy.implementation.MethodDelegation;
-import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.advice.type.StaticMethodAdvice;
-import org.apache.shardingsphere.agent.config.advisor.MethodAdvisorConfiguration;
-import org.apache.shardingsphere.agent.core.plugin.executor.type.StaticMethodAdviceExecutor;
-import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
-import org.apache.shardingsphere.agent.core.transformer.build.advise.AdviceFactory;
-import org.apache.shardingsphere.agent.core.transformer.build.builder.MethodAdvisorBuilder;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Static method advisor builder.
- */
-@RequiredArgsConstructor
-public final class StaticMethodAdvisorBuilder implements MethodAdvisorBuilder {
-
- private final AdviceFactory adviceFactory;
-
- @Override
- public Builder<?> create(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
- return builder.method(ElementMatchers.is(methodAdvisor.getPointcut())).intercept(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor()));
- }
-
- @Override
- public boolean isMatchedMethod(final InDefinedShape methodDescription) {
- return methodDescription.isStatic() && !(methodDescription.isAbstract() || methodDescription.isSynthetic());
- }
-
- @Override
- public MethodAdvisor getMethodAdvisor(final InDefinedShape methodDescription, final List<MethodAdvisorConfiguration> advisorConfigs) {
- Collection<StaticMethodAdvice> advices = advisorConfigs.stream().map(each -> (StaticMethodAdvice) adviceFactory.getAdvice(each.getAdviceClassName())).collect(Collectors.toList());
- return new MethodAdvisor(methodDescription, new StaticMethodAdviceExecutor(advices));
- }
-}
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
index 202b3a6a225..94bc6ce2497 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
@@ -76,16 +76,16 @@ public final class AgentTransformerTest {
private static AdvisorConfiguration createAdvisorConfiguration() {
AdvisorConfiguration result = new AdvisorConfiguration("org.apache.shardingsphere.agent.core.mock.material.Material");
- result.getConstructorAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.takesArguments(1), MockConstructorAdvice.class.getTypeName()));
- result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named("mock"), MockInstanceMethodAdvice.class.getTypeName()));
- result.getStaticMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named("staticMock"), MockStaticMethodAdvice.class.getTypeName()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.isConstructor().and(ElementMatchers.takesArguments(1)), MockConstructorAdvice.class.getTypeName()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named("mock"), MockInstanceMethodAdvice.class.getTypeName()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named("staticMock"), MockStaticMethodAdvice.class.getTypeName()));
return result;
}
private static AdvisorConfiguration createAdvisorConfigurationInTwice() {
AdvisorConfiguration result = new AdvisorConfiguration("org.apache.shardingsphere.agent.core.mock.material.RepeatedAdviceMaterial");
- result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named("mock"), MockInstanceMethodAdvice.class.getTypeName()));
- result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named("mock"), MockInstanceMethodRepeatedAdvice.class.getTypeName()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named("mock"), MockInstanceMethodAdvice.class.getTypeName()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named("mock"), MockInstanceMethodRepeatedAdvice.class.getTypeName()));
return result;
}
diff --git a/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/BaseLoggingAdvisorDefinitionService.java b/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/BaseLoggingAdvisorDefinitionService.java
index 7da53d133ad..12b638bd35b 100644
--- a/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/BaseLoggingAdvisorDefinitionService.java
+++ b/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/BaseLoggingAdvisorDefinitionService.java
@@ -51,7 +51,7 @@ public final class BaseLoggingAdvisorDefinitionService implements AdvisorDefinit
private Collection<AdvisorConfiguration> getAdvisorConfigurations() {
Collection<AdvisorConfiguration> result = new LinkedList<>();
AdvisorConfiguration advisorConfig = AdvisorConfigurationRegistryFactory.getRegistry(getType()).getAdvisorConfiguration(SCHEMA_METADATA_LOADER_CLASS);
- advisorConfig.getStaticMethodAdvisors().add(
+ advisorConfig.getAdvisors().add(
new MethodAdvisorConfiguration(ElementMatchers.named(SCHEMA_METADATA_LOADER_METHOD_NAME).and(ElementMatchers.takesArguments(4)), SCHEMA_METADATA_LOADER_ADVICE_CLASS));
result.add(advisorConfig);
return result;
diff --git a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/CommandExecutorTaskAdviser.java b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/CommandExecutorTaskAdviser.java
index 5c6cb5c37be..dde9826486f 100644
--- a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/CommandExecutorTaskAdviser.java
+++ b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/CommandExecutorTaskAdviser.java
@@ -40,7 +40,7 @@ public final class CommandExecutorTaskAdviser implements TracingAdviser {
@Override
public AdvisorConfiguration getAdvisorConfiguration(final Class<? extends InstanceMethodAdvice> adviceClass) {
AdvisorConfiguration result = AdvisorConfigurationRegistryFactory.getRegistry(type).getAdvisorConfiguration(TARGET_CLASS);
- result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named(TARGET_METHOD), adviceClass.getName()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named(TARGET_METHOD), adviceClass.getName()));
return result;
}
}
diff --git a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/JDBCExecutorCallbackAdviser.java b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/JDBCExecutorCallbackAdviser.java
index 3c4fab233f8..fe276d62d17 100644
--- a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/JDBCExecutorCallbackAdviser.java
+++ b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/JDBCExecutorCallbackAdviser.java
@@ -42,7 +42,7 @@ public final class JDBCExecutorCallbackAdviser implements TracingAdviser {
@Override
public AdvisorConfiguration getAdvisorConfiguration(final Class<? extends InstanceMethodAdvice> adviceClass) {
AdvisorConfiguration result = AdvisorConfigurationRegistryFactory.getRegistry(type).getAdvisorConfiguration(TARGET_CLASS);
- result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(
+ result.getAdvisors().add(new MethodAdvisorConfiguration(
ElementMatchers.named(TARGET_METHOD).and(ElementMatchers.takesArgument(0, ElementMatchers.named(TARGET_METHOD_FIRST_PARAM))), adviceClass.getName()));
return result;
}
diff --git a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/SQLParserEngineAdviser.java b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/SQLParserEngineAdviser.java
index a253857b7f8..3c7d3687b19 100644
--- a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/SQLParserEngineAdviser.java
+++ b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/SQLParserEngineAdviser.java
@@ -40,7 +40,7 @@ public final class SQLParserEngineAdviser implements TracingAdviser {
@Override
public AdvisorConfiguration getAdvisorConfiguration(final Class<? extends InstanceMethodAdvice> adviceClass) {
AdvisorConfiguration result = AdvisorConfigurationRegistryFactory.getRegistry(type).getAdvisorConfiguration(TARGET_CLASS);
- result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named(TARGET_METHOD), adviceClass.getName()));
+ result.getAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.named(TARGET_METHOD), adviceClass.getName()));
return result;
}
}