You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/12/13 17:06:07 UTC
[shardingsphere] branch master updated: Refactor packages of agent-core (#22859)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 5c7ee9a59ab Refactor packages of agent-core (#22859)
5c7ee9a59ab is described below
commit 5c7ee9a59ab00e4d8424787893d94e587ded80a6
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Dec 14 01:05:51 2022 +0800
Refactor packages of agent-core (#22859)
* Refactor packages of agent-core
* Remove useless AgentServiceProviderNotFoundException
* Refactor AgentClassLoader
* Refactor AgentClassLoader
* For code format
* Clean codes
* Remove useless PluginLoader
* clean code
---
.../agent/bootstrap/ShardingSphereAgent.java | 10 +-
.../{common => classloader}/AgentClassLoader.java | 85 +++++++-------
.../agent/core/config/path/AgentPathBuilder.java | 1 -
.../AgentServiceProviderNotFoundException.java | 30 -----
.../agent/core/logging/LoggerFactory.java | 2 +-
.../listener => logging}/LoggingListener.java | 3 +-
.../agent/core/plugin/AdviceInstanceLoader.java | 6 +-
.../agent/core/plugin/AgentPluginLoader.java | 37 ++++--
.../core/plugin/PluginBootServiceManager.java | 2 +-
.../agent/core/plugin/PluginLoader.java | 50 ---------
.../composed/ComposedConstructorAdvice.java} | 6 +-
.../ComposedInstanceMethodAroundAdvice.java} | 6 +-
.../ComposedStaticMethodAroundAdvice.java} | 6 +-
.../compose/ComposedConstructorInterceptor.java | 4 +-
.../ComposedInstanceMethodAroundInterceptor.java | 4 +-
...posedInstanceMethodInterceptorArgsOverride.java | 4 +-
.../ComposedStaticMethodAroundInterceptor.java | 4 +-
...omposedStaticMethodInterceptorArgsOverride.java | 4 +-
.../AgentTransformationPoint.java} | 6 +-
.../AgentTransformer.java} | 125 ++++++++++-----------
.../interceptor/ConstructorInterceptorTest.java | 2 +-
.../AgentTransformerTest.java} | 12 +-
.../advice/ComposedConstructorAdviceTest.java} | 9 +-
.../ComposedStaticMethodAroundAdviceTest.java} | 9 +-
24 files changed, 186 insertions(+), 241 deletions(-)
diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
index aa2f61d744f..af2448eddf0 100644
--- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
+++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
@@ -25,9 +25,9 @@ import net.bytebuddy.dynamic.scaffold.TypeValidation;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.config.AgentConfiguration;
import org.apache.shardingsphere.agent.config.PluginConfiguration;
-import org.apache.shardingsphere.agent.core.bytebuddy.listener.LoggingListener;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.ShardingSphereTransformer;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.logging.LoggingListener;
+import org.apache.shardingsphere.agent.core.transformer.AgentTransformer;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
import org.apache.shardingsphere.agent.core.config.loader.AgentConfigurationLoader;
import org.apache.shardingsphere.agent.core.config.registry.AgentConfigurationRegistry;
import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
@@ -72,13 +72,13 @@ public final class ShardingSphereAgent {
.ignore(ElementMatchers.isSynthetic())
.or(ElementMatchers.nameStartsWith("org.apache.shardingsphere.agent."));
agentBuilder.type(pluginLoader.typeMatcher())
- .transform(new ShardingSphereTransformer(pluginLoader))
+ .transform(new AgentTransformer(pluginLoader))
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.with(new LoggingListener()).installOn(instrumentation);
}
private static void setupPluginBootService(final Map<String, PluginConfiguration> pluginConfigs) {
- PluginBootServiceManager.startAllServices(pluginConfigs, AgentClassLoader.getDefaultPluginClassloader(), true);
+ PluginBootServiceManager.startAllServices(pluginConfigs, AgentClassLoader.getClassLoader(), true);
Runtime.getRuntime().addShutdownHook(new Thread(PluginBootServiceManager::closeAllServices));
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentClassLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
similarity index 58%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentClassLoader.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
index 1b2609caa98..4f8b6d8240c 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentClassLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.common;
+package org.apache.shardingsphere.agent.core.classloader;
import com.google.common.io.ByteStreams;
import lombok.Getter;
@@ -29,7 +29,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedList;
-import java.util.Objects;
+import java.util.Optional;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.Manifest;
@@ -45,7 +45,7 @@ public final class AgentClassLoader extends ClassLoader {
}
@Getter
- private static volatile AgentClassLoader defaultPluginClassloader;
+ private static volatile AgentClassLoader classLoader;
private final Collection<PluginJar> pluginJars;
@@ -55,15 +55,15 @@ public final class AgentClassLoader extends ClassLoader {
}
/**
- * Initialize default plugin class loader.
+ * Initialize agent class loader.
*
* @param pluginJars plugin jars
*/
- public static void initDefaultPluginClassLoader(final Collection<PluginJar> pluginJars) {
- if (null == defaultPluginClassloader) {
+ public static void init(final Collection<PluginJar> pluginJars) {
+ if (null == classLoader) {
synchronized (AgentClassLoader.class) {
- if (null == defaultPluginClassloader) {
- defaultPluginClassloader = new AgentClassLoader(AgentPluginLoader.class.getClassLoader(), pluginJars);
+ if (null == classLoader) {
+ classLoader = new AgentClassLoader(AgentPluginLoader.class.getClassLoader(), pluginJars);
}
}
}
@@ -71,35 +71,38 @@ public final class AgentClassLoader extends ClassLoader {
@Override
protected Class<?> findClass(final String name) throws ClassNotFoundException {
- String path = classNameToPath(name);
+ String path = convertClassNameToPath(name);
for (PluginJar each : pluginJars) {
ZipEntry entry = each.getJarFile().getEntry(path);
- if (Objects.isNull(entry)) {
+ if (null == entry) {
continue;
}
try {
- int index = name.lastIndexOf('.');
- if (index != -1) {
- String packageName = name.substring(0, index);
- definePackageInternal(packageName, each.getJarFile().getManifest());
- }
- byte[] data = ByteStreams.toByteArray(each.getJarFile().getInputStream(entry));
- return defineClass(name, data, 0, data.length);
+ definePackage(name, each);
+ return defineClass(name, each, entry);
} catch (final IOException ex) {
- throw new ClassNotFoundException(String.format("Class name is %s not found", name));
+ throw new ClassNotFoundException(name);
}
}
- throw new ClassNotFoundException(String.format("Class name is %s not found", name));
+ throw new ClassNotFoundException(name);
}
- private String classNameToPath(final String className) {
+ private String convertClassNameToPath(final String className) {
return String.join("", className.replace(".", "/"), ".class");
}
- private void definePackageInternal(final String packageName, final Manifest manifest) {
- if (null != getPackage(packageName)) {
+ private void definePackage(final String className, final PluginJar pluginJar) throws IOException {
+ int index = className.lastIndexOf('.');
+ if (-1 == index) {
return;
}
+ String packageName = className.substring(0, index);
+ if (null == getPackage(packageName)) {
+ definePackage(packageName, pluginJar.getJarFile().getManifest());
+ }
+ }
+
+ private void definePackage(final String packageName, final Manifest manifest) {
Attributes attributes = manifest.getMainAttributes();
String specTitle = attributes.getValue(Attributes.Name.SPECIFICATION_TITLE);
String specVersion = attributes.getValue(Attributes.Name.SPECIFICATION_VERSION);
@@ -110,32 +113,34 @@ public final class AgentClassLoader extends ClassLoader {
definePackage(packageName, specTitle, specVersion, specVendor, implTitle, implVersion, implVendor, null);
}
+ private Class<?> defineClass(final String name, final PluginJar each, final ZipEntry entry) throws IOException {
+ byte[] data = ByteStreams.toByteArray(each.getJarFile().getInputStream(entry));
+ return defineClass(name, data, 0, data.length);
+ }
+
@Override
protected Enumeration<URL> findResources(final String name) {
- Collection<URL> resources = new LinkedList<>();
+ Collection<URL> result = new LinkedList<>();
for (PluginJar each : pluginJars) {
- JarEntry entry = each.getJarFile().getJarEntry(name);
- if (Objects.nonNull(entry)) {
- try {
- resources.add(new URL(String.format("jar:file:%s!/%s", each.getSourcePath().getAbsolutePath(), name)));
- } catch (final MalformedURLException ignored) {
- }
- }
+ findResource(name, each).ifPresent(result::add);
}
- return Collections.enumeration(resources);
+ return Collections.enumeration(result);
}
@Override
protected URL findResource(final String name) {
- for (PluginJar each : pluginJars) {
- JarEntry entry = each.getJarFile().getJarEntry(name);
- if (Objects.nonNull(entry)) {
- try {
- return new URL(String.format("jar:file:%s!/%s", each.getSourcePath().getAbsolutePath(), name));
- } catch (final MalformedURLException ignored) {
- }
- }
+ return pluginJars.stream().map(each -> findResource(name, each)).filter(Optional::isPresent).findFirst().map(Optional::get).orElse(null);
+ }
+
+ private Optional<URL> findResource(final String name, final PluginJar pluginJar) {
+ JarEntry entry = pluginJar.getJarFile().getJarEntry(name);
+ if (null == entry) {
+ return Optional.empty();
+ }
+ try {
+ return Optional.of(new URL(String.format("jar:file:%s!/%s", pluginJar.getSourcePath().getAbsolutePath(), name)));
+ } catch (final MalformedURLException ignored) {
}
- return null;
+ return Optional.empty();
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/config/path/AgentPathBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/config/path/AgentPathBuilder.java
index b22aad808b2..3ba6355827a 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/config/path/AgentPathBuilder.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/config/path/AgentPathBuilder.java
@@ -82,5 +82,4 @@ public final class AgentPathBuilder {
private static File buildAgentConfigPath() {
return new File(String.join("/", agentPath.getPath(), "conf"));
}
-
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java
deleted file mode 100644
index 5e2c93d93ed..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java
+++ /dev/null
@@ -1,30 +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.exception;
-
-/**
- * Agent service provider not found exception.
- */
-public final class AgentServiceProviderNotFoundException extends RuntimeException {
-
- private static final long serialVersionUID = -3730257541332863235L;
-
- public AgentServiceProviderNotFoundException(final Class<?> clazz, final String type) {
- super(String.format("No implementation class load from SPI `%s` with type `%s`.", clazz.getName(), type));
- }
-}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
index 10fa5234379..c61f4c48edf 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.agent.core.logging;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
import org.apache.shardingsphere.agent.core.plugin.PluginJar;
import java.io.File;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/listener/LoggingListener.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggingListener.java
similarity index 94%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/listener/LoggingListener.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggingListener.java
index eff91fed646..c7edc7ab3fc 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/listener/LoggingListener.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggingListener.java
@@ -15,13 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.listener;
+package org.apache.shardingsphere.agent.core.logging;
import net.bytebuddy.agent.builder.AgentBuilder.Listener;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.utility.JavaModule;
-import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
/**
* Logging listener for ByteBuddy lifecycle.
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AdviceInstanceLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AdviceInstanceLoader.java
index 8f533690d16..ca50a918f34 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AdviceInstanceLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AdviceInstanceLoader.java
@@ -21,7 +21,7 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import org.apache.shardingsphere.agent.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
import org.apache.shardingsphere.agent.core.config.registry.AgentConfigurationRegistry;
import java.util.HashMap;
@@ -49,7 +49,7 @@ public final class AdviceInstanceLoader {
*
* @param <T> expected type
* @param className class name
- * @param classLoader classloader
+ * @param classLoader class loader
* @param isEnhancedForProxy is enhanced for proxy
* @return the type reference
*/
@@ -68,7 +68,7 @@ public final class AdviceInstanceLoader {
INIT_INSTANCE_LOCK.lock();
adviceInstance = ADVICE_INSTANCE_CACHE.get(className);
if (Objects.isNull(adviceInstance)) {
- adviceInstance = Class.forName(className, true, AgentClassLoader.getDefaultPluginClassloader()).getDeclaredConstructor().newInstance();
+ adviceInstance = Class.forName(className, true, AgentClassLoader.getClassLoader()).getDeclaredConstructor().newInstance();
ADVICE_INSTANCE_CACHE.put(className, adviceInstance);
}
return (T) adviceInstance;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
index b9eedfbc365..eb66b0519be 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
@@ -25,10 +25,11 @@ import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatcher.Junction;
import org.apache.shardingsphere.agent.advisor.ClassAdvisor;
import org.apache.shardingsphere.agent.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
import org.apache.shardingsphere.agent.core.config.path.AgentPathBuilder;
import org.apache.shardingsphere.agent.core.config.registry.AgentConfigurationRegistry;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
+import org.apache.shardingsphere.agent.core.logging.LoggerFactory.Logger;
import org.apache.shardingsphere.agent.core.spi.PluginServiceLoader;
import org.apache.shardingsphere.agent.spi.AdvisorDefinitionService;
@@ -48,9 +49,9 @@ import java.util.stream.Collectors;
/**
* Agent plugin loader.
*/
-public final class AgentPluginLoader implements PluginLoader {
+public final class AgentPluginLoader {
- private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(AgentPluginLoader.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(AgentPluginLoader.class);
private final Collection<PluginJar> pluginJars = new LinkedList<>();
@@ -67,8 +68,8 @@ public final class AgentPluginLoader implements PluginLoader {
*/
public void load() throws IOException {
loadPluginJars();
- AgentClassLoader.initDefaultPluginClassLoader(pluginJars);
- advisors = loadAdvisors(AgentClassLoader.getDefaultPluginClassloader());
+ AgentClassLoader.init(pluginJars);
+ advisors = loadAdvisors(AgentClassLoader.getClassLoader());
}
private void loadPluginJars() throws IOException {
@@ -112,16 +113,19 @@ public final class AgentPluginLoader implements PluginLoader {
public ElementMatcher<? super TypeDescription> typeMatcher() {
return new Junction<TypeDescription>() {
+ @SuppressWarnings("NullableProblems")
@Override
public boolean matches(final TypeDescription target) {
return advisors.containsKey(target.getTypeName());
}
+ @SuppressWarnings("NullableProblems")
@Override
public <U extends TypeDescription> Junction<U> and(final ElementMatcher<? super U> other) {
return null;
}
+ @SuppressWarnings("NullableProblems")
@Override
public <U extends TypeDescription> Junction<U> or(final ElementMatcher<? super U> other) {
return null;
@@ -129,17 +133,34 @@ public final class AgentPluginLoader implements PluginLoader {
};
}
- @Override
+ /**
+ * To detect the type whether or not exists.
+ *
+ * @param typeDescription type description
+ * @return contains when it is true
+ */
public boolean containsType(final TypeDescription typeDescription) {
return advisors.containsKey(typeDescription.getTypeName());
}
- @Override
+ /**
+ * Load plugin advisor by type description.
+ *
+ * @param typeDescription type description
+ * @return plugin advisor
+ */
public ClassAdvisor loadPluginAdvisor(final TypeDescription typeDescription) {
return advisors.getOrDefault(typeDescription.getTypeName(), new ClassAdvisor(""));
}
- @Override
+ /**
+ * To get or create instance of the advice class. Create new one and caching when it is not exist.
+ *
+ * @param adviceClassName class name of advice
+ * @param classLoader class loader
+ * @param <T> advice type
+ * @return instance
+ */
public <T> T getOrCreateInstance(final String adviceClassName, final ClassLoader classLoader) {
return AdviceInstanceLoader.loadAdviceInstance(adviceClassName, classLoader, isEnhancedForProxy);
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
index ad8290690a3..48c89fc77c7 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
@@ -40,7 +40,7 @@ public final class PluginBootServiceManager {
* Start all services.
*
* @param pluginConfigMap plugin configuration map
- * @param classLoader classLoader
+ * @param classLoader class loader
* @param isEnhancedForProxy is enhanced for proxy
*/
public static void startAllServices(final Map<String, PluginConfiguration> pluginConfigMap, final ClassLoader classLoader, final boolean isEnhancedForProxy) {
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java
deleted file mode 100644
index 76f3f9fd333..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java
+++ /dev/null
@@ -1,50 +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.plugin;
-
-import net.bytebuddy.description.type.TypeDescription;
-import org.apache.shardingsphere.agent.advisor.ClassAdvisor;
-
-public interface PluginLoader {
-
- /**
- * To detect the type whether or not exists.
- *
- * @param typeDescription type description
- * @return contains when it is true
- */
- boolean containsType(TypeDescription typeDescription);
-
- /**
- * Load plugin advisor by type description.
- *
- * @param typeDescription type description
- * @return plugin advisor
- */
- ClassAdvisor loadPluginAdvisor(TypeDescription typeDescription);
-
- /**
- * To get or create instance of the advice class. Create new one and caching when it is not exist.
- *
- * @param adviceClassName class name of advice
- * @param classLoader classloader
- * @param <T> advice type
- * @return instance
- */
- <T> T getOrCreateInstance(String adviceClassName, ClassLoader classLoader);
-}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdvice.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedConstructorAdvice.java
similarity index 87%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdvice.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedConstructorAdvice.java
index d0590fd9810..ad408a991ad 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdvice.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedConstructorAdvice.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.plugin.advice.composed;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
@@ -24,10 +24,10 @@ import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
import java.util.Collection;
/**
- * Compose Constructor advice.
+ * Composed Constructor advice.
*/
@RequiredArgsConstructor
-public final class ComposeConstructorAdvice implements ConstructorAdvice {
+public final class ComposedConstructorAdvice implements ConstructorAdvice {
private final Collection<ConstructorAdvice> advices;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeInstanceMethodAroundAdvice.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedInstanceMethodAroundAdvice.java
similarity index 90%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeInstanceMethodAroundAdvice.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedInstanceMethodAroundAdvice.java
index 8425111e621..c97b9bc088d 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeInstanceMethodAroundAdvice.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedInstanceMethodAroundAdvice.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.plugin.advice.composed;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
@@ -26,10 +26,10 @@ import java.lang.reflect.Method;
import java.util.Collection;
/**
- * Compose instance method around advice.
+ * Composed instance method around advice.
*/
@RequiredArgsConstructor
-public final class ComposeInstanceMethodAroundAdvice implements InstanceMethodAroundAdvice {
+public final class ComposedInstanceMethodAroundAdvice implements InstanceMethodAroundAdvice {
private final Collection<InstanceMethodAroundAdvice> advices;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdvice.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedStaticMethodAroundAdvice.java
similarity index 89%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdvice.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedStaticMethodAroundAdvice.java
index 4b095c615dd..b05bf169510 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdvice.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedStaticMethodAroundAdvice.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.plugin.advice.composed;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
@@ -25,10 +25,10 @@ import java.lang.reflect.Method;
import java.util.Collection;
/**
- * Compose class static method around advice.
+ * Composed class static method around advice.
*/
@RequiredArgsConstructor
-public final class ComposeStaticMethodAroundAdvice implements StaticMethodAroundAdvice {
+public final class ComposedStaticMethodAroundAdvice implements StaticMethodAroundAdvice {
private final Collection<StaticMethodAroundAdvice> advices;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedConstructorInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedConstructorInterceptor.java
index 2f69015e3ae..f253b03638a 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedConstructorInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedConstructorInterceptor.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeConstructorAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedConstructorAdvice;
import org.apache.shardingsphere.agent.core.plugin.interceptor.ConstructorInterceptor;
import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
public final class ComposedConstructorInterceptor extends ConstructorInterceptor {
public ComposedConstructorInterceptor(final Collection<ConstructorAdvice> constructorAdvices) {
- super(new ComposeConstructorAdvice(constructorAdvices));
+ super(new ComposedConstructorAdvice(constructorAdvices));
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodAroundInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodAroundInterceptor.java
index 82ed76f92cd..e11e91ff5ad 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodAroundInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodAroundInterceptor.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeInstanceMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedInstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodAroundInterceptor;
import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
public final class ComposedInstanceMethodAroundInterceptor extends InstanceMethodAroundInterceptor {
public ComposedInstanceMethodAroundInterceptor(final Collection<InstanceMethodAroundAdvice> instanceMethodAroundAdvices) {
- super(new ComposeInstanceMethodAroundAdvice(instanceMethodAroundAdvices));
+ super(new ComposedInstanceMethodAroundAdvice(instanceMethodAroundAdvices));
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodInterceptorArgsOverride.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodInterceptorArgsOverride.java
index 0f9def6fb0c..823306de4a9 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodInterceptorArgsOverride.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodInterceptorArgsOverride.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeInstanceMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedInstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodInterceptorArgsOverride;
import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
public class ComposedInstanceMethodInterceptorArgsOverride extends InstanceMethodInterceptorArgsOverride {
public ComposedInstanceMethodInterceptorArgsOverride(final Collection<InstanceMethodAroundAdvice> instanceMethodAroundAdvices) {
- super(new ComposeInstanceMethodAroundAdvice(instanceMethodAroundAdvices));
+ super(new ComposedInstanceMethodAroundAdvice(instanceMethodAroundAdvices));
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodAroundInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodAroundInterceptor.java
index e4ffa430ae9..dc5e24e13a2 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodAroundInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodAroundInterceptor.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeStaticMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedStaticMethodAroundAdvice;
import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodAroundInterceptor;
import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
public final class ComposedStaticMethodAroundInterceptor extends StaticMethodAroundInterceptor {
public ComposedStaticMethodAroundInterceptor(final Collection<StaticMethodAroundAdvice> instanceMethodAroundAdvices) {
- super(new ComposeStaticMethodAroundAdvice(instanceMethodAroundAdvices));
+ super(new ComposedStaticMethodAroundAdvice(instanceMethodAroundAdvices));
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodInterceptorArgsOverride.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodInterceptorArgsOverride.java
index 42823a58389..1f9003afb38 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodInterceptorArgsOverride.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodInterceptorArgsOverride.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeStaticMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedStaticMethodAroundAdvice;
import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodInterceptorArgsOverride;
import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
public final class ComposedStaticMethodInterceptorArgsOverride extends StaticMethodInterceptorArgsOverride {
public ComposedStaticMethodInterceptorArgsOverride(final Collection<StaticMethodAroundAdvice> instanceMethodAroundAdvices) {
- super(new ComposeStaticMethodAroundAdvice(instanceMethodAroundAdvices));
+ super(new ComposedStaticMethodAroundAdvice(instanceMethodAroundAdvices));
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformationPoint.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformationPoint.java
similarity index 87%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformationPoint.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformationPoint.java
index 8fd4c412cfe..9ae4eb0c2e9 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformationPoint.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformationPoint.java
@@ -15,18 +15,18 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer;
+package org.apache.shardingsphere.agent.core.transformer;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
/**
- * ShardingSphere transformer point.
+ * Agent transformer point.
*/
@RequiredArgsConstructor
@Getter
-public class ShardingSphereTransformationPoint<T> {
+public final class AgentTransformationPoint<T> {
private final MethodDescription description;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
similarity index 66%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
index 44994b88f3a..4a6e2a9242e 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer;
+package org.apache.shardingsphere.agent.core.transformer;
import lombok.RequiredArgsConstructor;
import net.bytebuddy.agent.builder.AgentBuilder.Transformer;
@@ -30,27 +30,27 @@ import net.bytebuddy.implementation.bind.annotation.Morph;
import net.bytebuddy.jar.asm.Opcodes;
import net.bytebuddy.matcher.ElementMatchers;
import net.bytebuddy.utility.JavaModule;
+import org.apache.shardingsphere.agent.advisor.ClassAdvisor;
+import org.apache.shardingsphere.agent.advisor.ConstructorAdvisor;
+import org.apache.shardingsphere.agent.advisor.InstanceMethodAdvisor;
import org.apache.shardingsphere.agent.advisor.StaticMethodAdvisor;
+import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
+import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
+import org.apache.shardingsphere.agent.core.plugin.OverrideArgsInvoker;
import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
-import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.plugin.OverrideArgsInvoker;
-import org.apache.shardingsphere.agent.advisor.ConstructorAdvisor;
-import org.apache.shardingsphere.agent.advisor.InstanceMethodAdvisor;
-import org.apache.shardingsphere.agent.advisor.ClassAdvisor;
-import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
-import org.apache.shardingsphere.agent.core.plugin.PluginLoader;
-import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodAroundInterceptor;
-import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodInterceptorArgsOverride;
+import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
import org.apache.shardingsphere.agent.core.plugin.interceptor.ConstructorInterceptor;
import org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodAroundInterceptor;
import org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodInterceptorArgsOverride;
-import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedStaticMethodAroundInterceptor;
-import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedStaticMethodInterceptorArgsOverride;
+import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodAroundInterceptor;
+import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodInterceptorArgsOverride;
import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedConstructorInterceptor;
import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedInstanceMethodAroundInterceptor;
import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedInstanceMethodInterceptorArgsOverride;
+import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedStaticMethodAroundInterceptor;
+import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedStaticMethodInterceptorArgsOverride;
import java.util.Collection;
import java.util.LinkedList;
@@ -59,24 +59,25 @@ import java.util.Objects;
import java.util.stream.Collectors;
/**
- * ShardingSphere transformer.
+ * Agent transformer.
*/
@RequiredArgsConstructor
-public final class ShardingSphereTransformer implements Transformer {
+public final class AgentTransformer implements Transformer {
- private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(ShardingSphereTransformer.class);
+ private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(AgentTransformer.class);
private static final String EXTRA_DATA = "_$EXTRA_DATA$_";
- private final PluginLoader pluginLoader;
+ private final AgentPluginLoader agentPluginLoader;
+ @SuppressWarnings("NullableProblems")
@Override
public Builder<?> transform(final Builder<?> builder, final TypeDescription typeDescription, final ClassLoader classLoader, final JavaModule module) {
- if (!pluginLoader.containsType(typeDescription)) {
+ if (!agentPluginLoader.containsType(typeDescription)) {
return builder;
}
Builder<?> result = builder.defineField(EXTRA_DATA, Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE).implement(TargetAdviceObject.class).intercept(FieldAccessor.ofField(EXTRA_DATA));
- ClassAdvisor classAdvisor = pluginLoader.loadPluginAdvisor(typeDescription);
+ ClassAdvisor classAdvisor = agentPluginLoader.loadPluginAdvisor(typeDescription);
result = interceptConstructor(typeDescription, classAdvisor.getConstructorAdvisors(), result, classLoader);
result = interceptStaticMethod(typeDescription, classAdvisor.getStaticMethodAdvisors(), result, classLoader);
result = interceptInstanceMethod(typeDescription, classAdvisor.getInstanceMethodAdvisors(), result, classLoader);
@@ -85,71 +86,70 @@ public final class ShardingSphereTransformer implements Transformer {
private Builder<?> interceptConstructor(final TypeDescription description,
final Collection<ConstructorAdvisor> constructorAdvisors, final Builder<?> builder, final ClassLoader classLoader) {
- Collection<ShardingSphereTransformationPoint<? extends ConstructorInterceptor>> constructorAdviceComposePoints = description.getDeclaredMethods().stream()
+ Collection<AgentTransformationPoint<? extends ConstructorInterceptor>> constructorAdviceComposePoints = description.getDeclaredMethods().stream()
.filter(MethodDescription::isConstructor)
.map(each -> getMatchedTransformationPoint(constructorAdvisors, each, classLoader))
.filter(Objects::nonNull)
.collect(Collectors.toList());
Builder<?> result = builder;
- for (ShardingSphereTransformationPoint<? extends ConstructorInterceptor> each : constructorAdviceComposePoints) {
+ for (AgentTransformationPoint<? extends ConstructorInterceptor> each : constructorAdviceComposePoints) {
try {
result = result.constructor(ElementMatchers.is(each.getDescription()))
.intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor())));
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
- LOGGER.error("Failed to load advice class: {}", description.getTypeName(), ex);
+ LOGGER.error("Failed to load advice class: {}.", description.getTypeName(), ex);
}
}
return result;
}
- private ShardingSphereTransformationPoint<? extends ConstructorInterceptor> getMatchedTransformationPoint(final Collection<ConstructorAdvisor> constructorAdvisors,
- final InDefinedShape methodDescription, final ClassLoader classLoader) {
+ private AgentTransformationPoint<? extends ConstructorInterceptor> getMatchedTransformationPoint(final Collection<ConstructorAdvisor> constructorAdvisors,
+ final InDefinedShape methodDescription, final ClassLoader classLoader) {
List<ConstructorAdvisor> matchedConstructorAdvisors = constructorAdvisors
.stream().filter(each -> each.getPointcut().matches(methodDescription)).collect(Collectors.toList());
if (matchedConstructorAdvisors.isEmpty()) {
return null;
}
if (1 == matchedConstructorAdvisors.size()) {
- return new ShardingSphereTransformationPoint<>(
- methodDescription, new ConstructorInterceptor(pluginLoader.getOrCreateInstance(matchedConstructorAdvisors.get(0).getAdviceClassName(), classLoader)));
+ return new AgentTransformationPoint<>(
+ methodDescription, new ConstructorInterceptor(agentPluginLoader.getOrCreateInstance(matchedConstructorAdvisors.get(0).getAdviceClassName(), classLoader)));
}
Collection<ConstructorAdvice> constructorAdvices = matchedConstructorAdvisors.stream()
.map(ConstructorAdvisor::getAdviceClassName)
- .map(each -> (ConstructorAdvice) pluginLoader.getOrCreateInstance(each, classLoader))
+ .map(each -> (ConstructorAdvice) agentPluginLoader.getOrCreateInstance(each, classLoader))
.collect(Collectors.toList());
- return new ShardingSphereTransformationPoint<>(methodDescription, new ComposedConstructorInterceptor(constructorAdvices));
+ return new AgentTransformationPoint<>(methodDescription, new ComposedConstructorInterceptor(constructorAdvices));
}
private Builder<?> interceptStaticMethod(final TypeDescription description, final Collection<StaticMethodAdvisor> staticMethodAdvisors,
final Builder<?> builder, final ClassLoader classLoader) {
- Collection<ShardingSphereTransformationPoint<?>> staticMethodAdvicePoints = description.getDeclaredMethods().stream()
+ Collection<AgentTransformationPoint<?>> staticMethodAdvicePoints = description.getDeclaredMethods().stream()
.filter(each -> each.isStatic() && !(each.isAbstract() || each.isSynthetic()))
.map(each -> getMatchedStaticMethodPoint(staticMethodAdvisors, each, classLoader))
.filter(Objects::nonNull)
.collect(Collectors.toList());
Builder<?> result = builder;
- for (ShardingSphereTransformationPoint<?> each : staticMethodAdvicePoints) {
+ for (AgentTransformationPoint<?> each : staticMethodAdvicePoints) {
try {
- if (each.getInterceptor() instanceof StaticMethodInterceptorArgsOverride || each.getInterceptor() instanceof ComposedStaticMethodInterceptorArgsOverride) {
+ if (each.getInterceptor() instanceof StaticMethodInterceptorArgsOverride) {
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()));
+ result = result.method(ElementMatchers.is(each.getDescription())).intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
}
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
- LOGGER.error("Failed to load advice class: {}", description.getTypeName(), ex);
+ LOGGER.error("Failed to load advice class: {}.", description.getTypeName(), ex);
}
}
return result;
}
- private ShardingSphereTransformationPoint<?> getMatchedStaticMethodPoint(final Collection<StaticMethodAdvisor> staticMethodAdvisors,
- final InDefinedShape methodDescription, final ClassLoader classLoader) {
+ private AgentTransformationPoint<?> getMatchedStaticMethodPoint(final Collection<StaticMethodAdvisor> staticMethodAdvisors,
+ final InDefinedShape methodDescription, final ClassLoader classLoader) {
List<StaticMethodAdvisor> matchedAdvisors = staticMethodAdvisors.stream().filter(each -> each.getPointcut().matches(methodDescription)).collect(Collectors.toList());
if (matchedAdvisors.isEmpty()) {
return null;
@@ -160,16 +160,16 @@ public final class ShardingSphereTransformer implements Transformer {
return getComposedStaticMethodPoint(methodDescription, matchedAdvisors, classLoader);
}
- private ShardingSphereTransformationPoint<?> getSingleStaticMethodPoint(final InDefinedShape methodDescription,
- final StaticMethodAdvisor staticMethodAdvisor, final ClassLoader classLoader) {
- StaticMethodAroundAdvice staticMethodAroundAdvice = pluginLoader.getOrCreateInstance(staticMethodAdvisor.getAdviceClassName(), classLoader);
+ private AgentTransformationPoint<?> getSingleStaticMethodPoint(final InDefinedShape methodDescription,
+ final StaticMethodAdvisor staticMethodAdvisor, final ClassLoader classLoader) {
+ StaticMethodAroundAdvice staticMethodAroundAdvice = agentPluginLoader.getOrCreateInstance(staticMethodAdvisor.getAdviceClassName(), classLoader);
return staticMethodAdvisor.isOverrideArgs()
- ? new ShardingSphereTransformationPoint<>(methodDescription, new StaticMethodInterceptorArgsOverride(staticMethodAroundAdvice))
- : new ShardingSphereTransformationPoint<>(methodDescription, new StaticMethodAroundInterceptor(staticMethodAroundAdvice));
+ ? new AgentTransformationPoint<>(methodDescription, new StaticMethodInterceptorArgsOverride(staticMethodAroundAdvice))
+ : new AgentTransformationPoint<>(methodDescription, new StaticMethodAroundInterceptor(staticMethodAroundAdvice));
}
- private ShardingSphereTransformationPoint<?> getComposedStaticMethodPoint(final InDefinedShape methodDescription,
- final Collection<StaticMethodAdvisor> staticMethodAdvisors, final ClassLoader classLoader) {
+ private AgentTransformationPoint<?> getComposedStaticMethodPoint(final InDefinedShape methodDescription,
+ final Collection<StaticMethodAdvisor> staticMethodAdvisors, final ClassLoader classLoader) {
Collection<StaticMethodAroundAdvice> staticMethodAroundAdvices = new LinkedList<>();
boolean isArgsOverride = false;
for (StaticMethodAdvisor each : staticMethodAdvisors) {
@@ -177,41 +177,40 @@ public final class ShardingSphereTransformer implements Transformer {
isArgsOverride = true;
}
if (null != each.getAdviceClassName()) {
- staticMethodAroundAdvices.add(pluginLoader.getOrCreateInstance(each.getAdviceClassName(), classLoader));
+ staticMethodAroundAdvices.add(agentPluginLoader.getOrCreateInstance(each.getAdviceClassName(), classLoader));
}
}
- return isArgsOverride ? new ShardingSphereTransformationPoint<>(methodDescription, new ComposedStaticMethodInterceptorArgsOverride(staticMethodAroundAdvices))
- : new ShardingSphereTransformationPoint<>(methodDescription, new ComposedStaticMethodAroundInterceptor(staticMethodAroundAdvices));
+ return isArgsOverride ? new AgentTransformationPoint<>(methodDescription, new ComposedStaticMethodInterceptorArgsOverride(staticMethodAroundAdvices))
+ : new AgentTransformationPoint<>(methodDescription, new ComposedStaticMethodAroundInterceptor(staticMethodAroundAdvices));
}
private Builder<?> interceptInstanceMethod(final TypeDescription description, final Collection<InstanceMethodAdvisor> instanceMethodAdvisors,
final Builder<?> builder, final ClassLoader classLoader) {
- Collection<ShardingSphereTransformationPoint<?>> instanceMethodAdviceComposePoints = description.getDeclaredMethods().stream()
+ Collection<AgentTransformationPoint<?>> instanceMethodAdviceComposePoints = description.getDeclaredMethods().stream()
.filter(each -> !(each.isAbstract() || each.isSynthetic()))
.map(each -> getMatchedInstanceMethodPoint(instanceMethodAdvisors, each, classLoader))
.filter(Objects::nonNull)
.collect(Collectors.toList());
Builder<?> result = builder;
- for (ShardingSphereTransformationPoint<?> each : instanceMethodAdviceComposePoints) {
+ for (AgentTransformationPoint<?> each : instanceMethodAdviceComposePoints) {
try {
- if (each.getInterceptor() instanceof InstanceMethodInterceptorArgsOverride || each.getInterceptor() instanceof ComposedInstanceMethodInterceptorArgsOverride) {
+ if (each.getInterceptor() instanceof InstanceMethodInterceptorArgsOverride) {
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()));
+ result = result.method(ElementMatchers.is(each.getDescription())).intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
}
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
- LOGGER.error("Failed to load advice class `{}`", description.getTypeName(), ex);
+ LOGGER.error("Failed to load advice class: {}.", description.getTypeName(), ex);
}
}
return result;
}
- private ShardingSphereTransformationPoint<?> getMatchedInstanceMethodPoint(final Collection<InstanceMethodAdvisor> instanceMethodAroundPoints,
- final InDefinedShape methodDescription, final ClassLoader classLoader) {
+ private AgentTransformationPoint<?> getMatchedInstanceMethodPoint(final Collection<InstanceMethodAdvisor> instanceMethodAroundPoints,
+ final InDefinedShape methodDescription, final ClassLoader classLoader) {
List<InstanceMethodAdvisor> instanceMethodAdvisors = instanceMethodAroundPoints
.stream().filter(each -> each.getPointcut().matches(methodDescription)).collect(Collectors.toList());
if (instanceMethodAdvisors.isEmpty()) {
@@ -223,16 +222,16 @@ public final class ShardingSphereTransformer implements Transformer {
return getComposeInstanceMethodPoint(methodDescription, instanceMethodAdvisors, classLoader);
}
- private ShardingSphereTransformationPoint<?> getSingleInstanceMethodPoint(final InDefinedShape methodDescription,
- final InstanceMethodAdvisor instanceMethodAdvisor, final ClassLoader classLoader) {
- InstanceMethodAroundAdvice instanceMethodAroundAdvice = pluginLoader.getOrCreateInstance(instanceMethodAdvisor.getAdviceClassName(), classLoader);
+ private AgentTransformationPoint<?> getSingleInstanceMethodPoint(final InDefinedShape methodDescription,
+ final InstanceMethodAdvisor instanceMethodAdvisor, final ClassLoader classLoader) {
+ InstanceMethodAroundAdvice instanceMethodAroundAdvice = agentPluginLoader.getOrCreateInstance(instanceMethodAdvisor.getAdviceClassName(), classLoader);
return instanceMethodAdvisor.isOverrideArgs()
- ? new ShardingSphereTransformationPoint<>(methodDescription, new InstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvice))
- : new ShardingSphereTransformationPoint<>(methodDescription, new InstanceMethodAroundInterceptor(instanceMethodAroundAdvice));
+ ? new AgentTransformationPoint<>(methodDescription, new InstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvice))
+ : new AgentTransformationPoint<>(methodDescription, new InstanceMethodAroundInterceptor(instanceMethodAroundAdvice));
}
- private ShardingSphereTransformationPoint<?> getComposeInstanceMethodPoint(final InDefinedShape methodDescription,
- final Collection<InstanceMethodAdvisor> instanceMethodAdvisors, final ClassLoader classLoader) {
+ private AgentTransformationPoint<?> getComposeInstanceMethodPoint(final InDefinedShape methodDescription,
+ final Collection<InstanceMethodAdvisor> instanceMethodAdvisors, final ClassLoader classLoader) {
Collection<InstanceMethodAroundAdvice> instanceMethodAroundAdvices = new LinkedList<>();
boolean isArgsOverride = false;
for (InstanceMethodAdvisor each : instanceMethodAdvisors) {
@@ -240,11 +239,11 @@ public final class ShardingSphereTransformer implements Transformer {
isArgsOverride = true;
}
if (null != each.getAdviceClassName()) {
- instanceMethodAroundAdvices.add(pluginLoader.getOrCreateInstance(each.getAdviceClassName(), classLoader));
+ instanceMethodAroundAdvices.add(agentPluginLoader.getOrCreateInstance(each.getAdviceClassName(), classLoader));
}
}
return isArgsOverride
- ? new ShardingSphereTransformationPoint<>(methodDescription, new ComposedInstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvices))
- : new ShardingSphereTransformationPoint<>(methodDescription, new ComposedInstanceMethodAroundInterceptor(instanceMethodAroundAdvices));
+ ? new AgentTransformationPoint<>(methodDescription, new ComposedInstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvices))
+ : new AgentTransformationPoint<>(methodDescription, new ComposedInstanceMethodAroundInterceptor(instanceMethodAroundAdvices));
}
}
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/interceptor/ConstructorInterceptorTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/interceptor/ConstructorInterceptorTest.java
index adc8983dd91..9d7c15bd265 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/interceptor/ConstructorInterceptorTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/interceptor/ConstructorInterceptorTest.java
@@ -28,7 +28,7 @@ import net.bytebuddy.implementation.SuperMethodCall;
import net.bytebuddy.jar.asm.Opcodes;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
-import org.apache.shardingsphere.agent.core.bytebuddy.listener.LoggingListener;
+import org.apache.shardingsphere.agent.core.logging.LoggingListener;
import org.apache.shardingsphere.agent.core.mock.advice.MockConstructorAdvice;
import org.apache.shardingsphere.agent.core.mock.material.ConstructorMaterial;
import org.junit.After;
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
similarity index 94%
rename from agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java
rename to agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
index 0d71366e3e9..3a20585f19e 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer;
+package org.apache.shardingsphere.agent.core.transformer;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.agent.ByteBuddyAgent;
@@ -23,8 +23,8 @@ import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.agent.builder.ResettableClassFileTransformer;
import net.bytebuddy.dynamic.scaffold.TypeValidation;
import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.bytebuddy.listener.LoggingListener;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.logging.LoggingListener;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
import org.apache.shardingsphere.agent.core.mock.advice.MockConstructorAdvice;
import org.apache.shardingsphere.agent.core.mock.advice.MockInstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.core.mock.advice.MockInstanceMethodAroundRepeatedAdvice;
@@ -55,7 +55,7 @@ import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertArrayEquals;
-public final class ShardingSphereTransformerTest {
+public final class AgentTransformerTest {
private static final AgentPluginLoader PLUGIN_LOADER = new AgentPluginLoader();
@@ -67,7 +67,7 @@ public final class ShardingSphereTransformerTest {
@SuppressWarnings("unchecked")
public static void setup() throws ReflectiveOperationException {
ByteBuddyAgent.install();
- AgentClassLoader.initDefaultPluginClassLoader(Collections.emptyList());
+ AgentClassLoader.init(Collections.emptyList());
FieldReader objectPoolReader = new FieldReader(AdviceInstanceLoader.class, AdviceInstanceLoader.class.getDeclaredField("ADVICE_INSTANCE_CACHE"));
Map<String, Object> objectPool = (Map<String, Object>) objectPoolReader.read();
objectPool.put(MockConstructorAdvice.class.getTypeName(), new MockConstructorAdvice());
@@ -86,7 +86,7 @@ public final class ShardingSphereTransformerTest {
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.with(new LoggingListener())
.type(PLUGIN_LOADER.typeMatcher())
- .transform(new ShardingSphereTransformer(PLUGIN_LOADER))
+ .transform(new AgentTransformer(PLUGIN_LOADER))
.asTerminalTransformation()
.installOnByteBuddyAgent();
}
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdviceTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedConstructorAdviceTest.java
similarity index 83%
rename from agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdviceTest.java
rename to agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedConstructorAdviceTest.java
index 02f66e2c44a..4f9adde70e5 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdviceTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedConstructorAdviceTest.java
@@ -15,11 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.transformer.advice;
import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
import org.apache.shardingsphere.agent.core.mock.advice.MockConstructorAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedConstructorAdvice;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -31,15 +32,15 @@ import java.util.LinkedList;
import static org.mockito.Mockito.mock;
@RunWith(MockitoJUnitRunner.class)
-public final class ComposeConstructorAdviceTest {
+public final class ComposedConstructorAdviceTest {
private final ConstructorAdvice constructorAdvice = new MockConstructorAdvice();
- private ComposeConstructorAdvice actual;
+ private ComposedConstructorAdvice actual;
@Before
public void setUp() {
- actual = new ComposeConstructorAdvice(Collections.singleton(constructorAdvice));
+ actual = new ComposedConstructorAdvice(Collections.singleton(constructorAdvice));
}
@Test
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdviceTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedStaticMethodAroundAdviceTest.java
similarity index 87%
rename from agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdviceTest.java
rename to agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedStaticMethodAroundAdviceTest.java
index 7119b581c82..d1702c3b7ed 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdviceTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedStaticMethodAroundAdviceTest.java
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.transformer.advice;
import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
import org.apache.shardingsphere.agent.core.plugin.MethodInvocationResult;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedStaticMethodAroundAdvice;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -33,16 +34,16 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
-public final class ComposeStaticMethodAroundAdviceTest {
+public final class ComposedStaticMethodAroundAdviceTest {
@Mock
private StaticMethodAroundAdvice staticMethodAroundAdvice;
- private ComposeStaticMethodAroundAdvice actual;
+ private ComposedStaticMethodAroundAdvice actual;
@Before
public void setUp() {
- actual = new ComposeStaticMethodAroundAdvice(new ArrayList<>(Collections.singleton(staticMethodAroundAdvice)));
+ actual = new ComposedStaticMethodAroundAdvice(new ArrayList<>(Collections.singleton(staticMethodAroundAdvice)));
}
@Test