diff --git a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameter.java b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameter.java new file mode 100644 index 0000000000000..2300cb9ab23a7 --- /dev/null +++ b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameter.java @@ -0,0 +1,111 @@ +/* + * Copyright 2024 NAVER Corp. + * + * Licensed 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.instrument.transformer; + +import com.navercorp.pinpoint.common.trace.ServiceType; + +/** + * @author youngjin.kim2 + */ +public class TransformCallbackParameter { + + private final Object value; + private final ParameterType type; + + public TransformCallbackParameter(Boolean value) { + this.value = value; + this.type = ParameterType.BOOLEAN; + } + + public TransformCallbackParameter(boolean value) { + this.value = value; + this.type = ParameterType.PRIMITIVE_BOOLEAN; + } + + public TransformCallbackParameter(ServiceType value) { + this.value = value; + this.type = ParameterType.SERVICE_TYPE; + } + + public TransformCallbackParameter(Long value) { + this.value = value; + this.type = ParameterType.LONG; + } + + public TransformCallbackParameter(Double value) { + this.value = value; + this.type = ParameterType.DOUBLE; + } + + public TransformCallbackParameter(String value) { + this.value = value; + this.type = ParameterType.STRING; + } + + public TransformCallbackParameter(String[] value) { + this.value = value; + this.type = ParameterType.STRING_ARRAY; + } + + public TransformCallbackParameter(String[][] value) { + this.value = value; + this.type = ParameterType.STRING_ARRAY_ARRAY; + } + + Object getValue() { + return value; + } + + ParameterType getType() { + return type; + } + + public enum ParameterType { + BOOLEAN, + PRIMITIVE_BOOLEAN, + SERVICE_TYPE, + LONG, + DOUBLE, + STRING, + STRING_ARRAY, + STRING_ARRAY_ARRAY; + + static Class getJavaClass(ParameterType type) { + switch (type) { + case BOOLEAN: + return Boolean.class; + case PRIMITIVE_BOOLEAN: + return boolean.class; + case SERVICE_TYPE: + return ServiceType.class; + case LONG: + return Long.class; + case DOUBLE: + return Double.class; + case STRING: + return String.class; + case STRING_ARRAY: + return String[].class; + case STRING_ARRAY_ARRAY: + return String[][].class; + default: + throw new IllegalArgumentException("Unknown type: " + type); + } + } + } + +} diff --git a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameters.java b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameters.java new file mode 100644 index 0000000000000..e8b272a8b2cbe --- /dev/null +++ b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameters.java @@ -0,0 +1,55 @@ +/* + * Copyright 2024 NAVER Corp. + * + * Licensed 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.instrument.transformer; + +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParameter.ParameterType; + +import java.util.Collections; +import java.util.List; + +/** + * @author youngjin.kim2 + */ +public class TransformCallbackParameters { + + private final List params; + + TransformCallbackParameters(List params) { + this.params = Collections.unmodifiableList(params); + } + + public List getParams() { + return params; + } + + public Object[] getParamValues() { + Object[] values = new Object[params.size()]; + for (int i = 0; i < params.size(); i++) { + values[i] = params.get(i).getValue(); + } + return values; + } + + public Class[] getParamTypes() { + Class[] types = new Class[params.size()]; + for (int i = 0; i < params.size(); i++) { + types[i] = ParameterType.getJavaClass(params.get(i).getType()); + } + return types; + } + +} diff --git a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParametersBuilder.java b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParametersBuilder.java new file mode 100644 index 0000000000000..30eb26de237ef --- /dev/null +++ b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParametersBuilder.java @@ -0,0 +1,75 @@ +/* + * Copyright 2024 NAVER Corp. + * + * Licensed 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.instrument.transformer; + +import com.navercorp.pinpoint.common.trace.ServiceType; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author youngjin.kim2 + */ +public class TransformCallbackParametersBuilder { + + private final List params = new ArrayList<>(); + + private TransformCallbackParametersBuilder() { + } + + public static TransformCallbackParametersBuilder newBuilder() { + return new TransformCallbackParametersBuilder(); + } + + private TransformCallbackParametersBuilder addParameter(TransformCallbackParameter param) { + this.params.add(param); + return this; + } + + public TransformCallbackParametersBuilder addBoolean(Boolean param) { + return this.addParameter(new TransformCallbackParameter(param)); + } + + public TransformCallbackParametersBuilder addServiceType(ServiceType param) { + return this.addParameter(new TransformCallbackParameter(param)); + } + + public TransformCallbackParametersBuilder addLong(Long param) { + return this.addParameter(new TransformCallbackParameter(param)); + } + + public TransformCallbackParametersBuilder addDouble(Double param) { + return this.addParameter(new TransformCallbackParameter(param)); + } + + public TransformCallbackParametersBuilder addString(String param) { + return this.addParameter(new TransformCallbackParameter(param)); + } + + public TransformCallbackParametersBuilder addStringArray(String[] param) { + return this.addParameter(new TransformCallbackParameter(param)); + } + + public TransformCallbackParametersBuilder addStringArrayArray(String[][] param) { + return this.addParameter(new TransformCallbackParameter(param)); + } + + public TransformCallbackParameters toParameters() { + return new TransformCallbackParameters(new ArrayList<>(this.params)); + } + +} diff --git a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformOperations.java b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformOperations.java index 43cf32be18c68..526ad16732350 100644 --- a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformOperations.java +++ b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformOperations.java @@ -32,6 +32,9 @@ public interface TransformOperations { // void transform(String className, Class transformCallbackClass, Object[] parameters); + @Deprecated void transform(String className, Class transformCallbackClass, Object[] parameters, Class[] parameterTypes); + void transform(String className, Class transformCallbackClass, TransformCallbackParameters params); + } diff --git a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformTemplate.java b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformTemplate.java index 6194cb7f05626..59c8eb012e296 100644 --- a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformTemplate.java +++ b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformTemplate.java @@ -98,4 +98,11 @@ public void transform(String className, Class trans final String transformCallbackName = transformCallbackClass.getName(); this.instrumentContext.addClassFileTransformer(matcher, transformCallbackName, parameters, parameterTypes); } + + @Override + public void transform(String className, Class transformCallbackClass, TransformCallbackParameters params) { + Object[] parameters = params.getParamValues(); + Class[] parameterTypes = params.getParamTypes(); + this.transform(className, transformCallbackClass, parameters, parameterTypes); + } } diff --git a/bootstraps/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameterTest.java b/bootstraps/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameterTest.java new file mode 100644 index 0000000000000..b18e7d251bb3d --- /dev/null +++ b/bootstraps/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformCallbackParameterTest.java @@ -0,0 +1,62 @@ +/* + * Copyright 2024 NAVER Corp. + * + * Licensed 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.instrument.transformer; + +import com.navercorp.pinpoint.common.trace.ServiceType; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author youngjin.kim2 + */ +public class TransformCallbackParameterTest { + + @Test + public void testParametersSerde() { + TransformCallbackParameters parameters = TransformCallbackParametersBuilder.newBuilder() + .addBoolean(Boolean.TRUE) + .addServiceType(ServiceType.STAND_ALONE) + .addLong(1L) + .addDouble(1.0D) + .addString("test") + .addStringArray(new String[]{"test1", "test2"}) + .addStringArrayArray(new String[][]{{"test1", "test2"}, {"test3", "test4"}}) + .toParameters(); + + Object[] values = parameters.getParamValues(); + Class[] types = parameters.getParamTypes(); + + assertThat(values).hasSize(7); + assertThat(values[0]).isInstanceOf(Boolean.class).isEqualTo(Boolean.TRUE); + assertThat(values[1]).isInstanceOf(ServiceType.class).isEqualTo(ServiceType.STAND_ALONE); + assertThat(values[2]).isInstanceOf(Long.class).isEqualTo(1L); + assertThat(values[3]).isInstanceOf(Double.class).isEqualTo(1.0D); + assertThat(values[4]).isInstanceOf(String.class).isEqualTo("test"); + assertThat(values[5]).isInstanceOf(String[].class).isEqualTo(new String[]{"test1", "test2"}); + assertThat(values[6]).isInstanceOf(String[][].class).isEqualTo(new String[][]{{"test1", "test2"}, {"test3", "test4"}}); + + assertThat(types).hasSize(7); + assertThat(types[0]).isEqualTo(Boolean.class); + assertThat(types[1]).isEqualTo(ServiceType.class); + assertThat(types[2]).isEqualTo(Long.class); + assertThat(types[3]).isEqualTo(Double.class); + assertThat(types[4]).isEqualTo(String.class); + assertThat(types[5]).isEqualTo(String[].class); + assertThat(types[6]).isEqualTo(String[][].class); + } +} diff --git a/plugins/redis-lettuce/src/main/java/com/navercorp/pinpoint/plugin/redis/lettuce/LettucePlugin.java b/plugins/redis-lettuce/src/main/java/com/navercorp/pinpoint/plugin/redis/lettuce/LettucePlugin.java index f7e8f4a6cd582..75d0dd7d054ab 100644 --- a/plugins/redis-lettuce/src/main/java/com/navercorp/pinpoint/plugin/redis/lettuce/LettucePlugin.java +++ b/plugins/redis-lettuce/src/main/java/com/navercorp/pinpoint/plugin/redis/lettuce/LettucePlugin.java @@ -23,6 +23,8 @@ import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor; import com.navercorp.pinpoint.bootstrap.instrument.MethodFilters; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParameters; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParametersBuilder; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware; import com.navercorp.pinpoint.bootstrap.logging.PLogger; @@ -184,13 +186,16 @@ private void addRedisCommands(final LettucePluginConfig config) { } private void addAbstractRedisCommands(final String className, Class transformCallback, boolean getter) { - transformTemplate.transform(className, transformCallback, new Object[]{getter}, new Class[]{boolean.class}); + TransformCallbackParameters parameters = TransformCallbackParametersBuilder.newBuilder() + .addBoolean(getter) + .toParameters(); + transformTemplate.transform(className, transformCallback, parameters); } public static class AbstractRedisCommandsTransform implements TransformCallback { private final boolean getter; - public AbstractRedisCommandsTransform(boolean getter) { + public AbstractRedisCommandsTransform(Boolean getter) { this.getter = getter; } diff --git a/plugins/rxjava/src/main/java/com/navercorp/pinpoint/plugin/rxjava/RxJavaPlugin.java b/plugins/rxjava/src/main/java/com/navercorp/pinpoint/plugin/rxjava/RxJavaPlugin.java index 998ff019a0ac7..1cbf746b01001 100644 --- a/plugins/rxjava/src/main/java/com/navercorp/pinpoint/plugin/rxjava/RxJavaPlugin.java +++ b/plugins/rxjava/src/main/java/com/navercorp/pinpoint/plugin/rxjava/RxJavaPlugin.java @@ -24,6 +24,8 @@ import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor; import com.navercorp.pinpoint.bootstrap.instrument.MethodFilters; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParameters; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParametersBuilder; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware; import com.navercorp.pinpoint.bootstrap.interceptor.BasicMethodInterceptor; @@ -111,7 +113,10 @@ private void addObservableTransformers() { } private void transform(String className, Class transformCallbackClass, String... constructorParameter) { - transformTemplate.transform(className, transformCallbackClass, new Object[]{constructorParameter}, new Class[]{String[].class}); + TransformCallbackParameters parameters = TransformCallbackParametersBuilder.newBuilder() + .addStringArray(constructorParameter) + .toParameters(); + transformTemplate.transform(className, transformCallbackClass, parameters); } // Single @@ -238,7 +243,10 @@ private void addSchedulerWorkerTransformers() { } private void transform(String className, Class transformCallbackClass, ServiceType serviceType) { - transformTemplate.transform(className, transformCallbackClass, new Object[]{serviceType}, new Class[]{ServiceType.class}); + TransformCallbackParameters parameters = TransformCallbackParametersBuilder.newBuilder() + .addServiceType(serviceType) + .toParameters(); + transformTemplate.transform(className, transformCallbackClass, parameters); } public static class EventLoopsScheduler implements TransformCallback { diff --git a/plugins/spring-webflux/src/main/java/com/navercorp/pinpoint/plugin/spring/webflux/SpringWebFluxPlugin.java b/plugins/spring-webflux/src/main/java/com/navercorp/pinpoint/plugin/spring/webflux/SpringWebFluxPlugin.java index df2157b210eb1..f8fed2c45b8c5 100644 --- a/plugins/spring-webflux/src/main/java/com/navercorp/pinpoint/plugin/spring/webflux/SpringWebFluxPlugin.java +++ b/plugins/spring-webflux/src/main/java/com/navercorp/pinpoint/plugin/spring/webflux/SpringWebFluxPlugin.java @@ -26,6 +26,7 @@ import com.navercorp.pinpoint.bootstrap.instrument.transformer.MatchableTransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.MatchableTransformTemplateAware; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParametersBuilder; import com.navercorp.pinpoint.bootstrap.logging.PLogger; import com.navercorp.pinpoint.bootstrap.logging.PLoggerFactory; import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin; @@ -62,7 +63,11 @@ public void setup(ProfilerPluginSetupContext context) { logger.info("{} version range=[5.0.0.RELEASE, 5.2.1.RELEASE], config:{}", this.getClass().getSimpleName(), config); // Server - transformTemplate.transform("org.springframework.web.reactive.DispatcherHandler", DispatchHandlerTransform.class, new Object[]{config.isUriStatEnable(), config.isUriStatUseUserInput()}, new Class[]{Boolean.class, Boolean.class}); + transformTemplate.transform("org.springframework.web.reactive.DispatcherHandler", DispatchHandlerTransform.class, + TransformCallbackParametersBuilder.newBuilder() + .addBoolean(config.isUriStatEnable()) + .addBoolean(config.isUriStatUseUserInput()) + .toParameters()); final Matcher invokeMatcher = Matchers.newLambdaExpressionMatcher("org.springframework.web.reactive.DispatcherHandler", "java.util.function.Function"); transformTemplate.transform(invokeMatcher, DispatchHandlerInvokeHandlerTransform.class); @@ -79,8 +84,14 @@ public void setup(ProfilerPluginSetupContext context) { // uri stat if (config.isUriStatEnable()) { - transformTemplate.transform("org.springframework.web.reactive.result.method.AbstractHandlerMethodMapping", AbstractHandlerMethodMappingTransform.class, new Object[]{config.isUriStatCollectMethod()}, new Class[]{Boolean.class}); - transformTemplate.transform("org.springframework.web.reactive.handler.AbstractUrlHandlerMapping", AbstractUrlHandlerMappingTransform.class, new Object[]{config.isUriStatCollectMethod()}, new Class[]{Boolean.class}); + transformTemplate.transform("org.springframework.web.reactive.result.method.AbstractHandlerMethodMapping", AbstractHandlerMethodMappingTransform.class, + TransformCallbackParametersBuilder.newBuilder() + .addBoolean(config.isUriStatCollectMethod()) + .toParameters()); + transformTemplate.transform("org.springframework.web.reactive.handler.AbstractUrlHandlerMapping", AbstractUrlHandlerMappingTransform.class, + TransformCallbackParametersBuilder.newBuilder() + .addBoolean(config.isUriStatCollectMethod()) + .toParameters()); } } diff --git a/plugins/spring/src/main/java/com/navercorp/pinpoint/plugin/spring/web/SpringWebMvcPlugin.java b/plugins/spring/src/main/java/com/navercorp/pinpoint/plugin/spring/web/SpringWebMvcPlugin.java index 74b3a55f7497f..c7fd2afdd7d2d 100644 --- a/plugins/spring/src/main/java/com/navercorp/pinpoint/plugin/spring/web/SpringWebMvcPlugin.java +++ b/plugins/spring/src/main/java/com/navercorp/pinpoint/plugin/spring/web/SpringWebMvcPlugin.java @@ -20,6 +20,7 @@ import com.navercorp.pinpoint.bootstrap.instrument.InstrumentMethod; import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParametersBuilder; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware; import com.navercorp.pinpoint.bootstrap.interceptor.BasicMethodInterceptor; @@ -50,15 +51,24 @@ public void setup(ProfilerPluginSetupContext context) { return; } - transformTemplate.transform("org.springframework.web.servlet.FrameworkServlet", FrameworkServletTransform.class, new Object[]{config.isUriStatEnable(), config.isUriStatUseUserInput()}, new Class[]{Boolean.class, Boolean.class}); + transformTemplate.transform("org.springframework.web.servlet.FrameworkServlet", FrameworkServletTransform.class, TransformCallbackParametersBuilder.newBuilder() + .addBoolean(config.isUriStatEnable()) + .addBoolean(config.isUriStatUseUserInput()) + .toParameters()); // Async transformTemplate.transform("org.springframework.web.method.support.InvocableHandlerMethod", InvocableHandlerMethodTransform.class); // uri stat if (config.isUriStatEnable()) { - transformTemplate.transform("org.springframework.web.servlet.handler.AbstractHandlerMethodMapping", AbstractHandlerMethodMappingTransform.class, new Object[]{config.isUriStatCollectMethod()}, new Class[]{Boolean.class}); - transformTemplate.transform("org.springframework.web.servlet.handler.AbstractUrlHandlerMapping", AbstractUrlHandlerMappingTransform.class, new Object[]{config.isUriStatCollectMethod()}, new Class[]{Boolean.class}); + transformTemplate.transform("org.springframework.web.servlet.handler.AbstractHandlerMethodMapping", AbstractHandlerMethodMappingTransform.class, + TransformCallbackParametersBuilder.newBuilder() + .addBoolean(config.isUriStatCollectMethod()) + .toParameters()); + transformTemplate.transform("org.springframework.web.servlet.handler.AbstractUrlHandlerMapping", AbstractUrlHandlerMappingTransform.class, + TransformCallbackParametersBuilder.newBuilder() + .addBoolean(config.isUriStatCollectMethod()) + .toParameters()); } } diff --git a/plugins/thrift/src/main/java/com/navercorp/pinpoint/plugin/thrift/ThriftPlugin.java b/plugins/thrift/src/main/java/com/navercorp/pinpoint/plugin/thrift/ThriftPlugin.java index 47f6883be6bf6..7f54785370131 100644 --- a/plugins/thrift/src/main/java/com/navercorp/pinpoint/plugin/thrift/ThriftPlugin.java +++ b/plugins/thrift/src/main/java/com/navercorp/pinpoint/plugin/thrift/ThriftPlugin.java @@ -23,6 +23,7 @@ import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor; import com.navercorp.pinpoint.bootstrap.instrument.MethodFilters; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParametersBuilder; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware; import com.navercorp.pinpoint.bootstrap.interceptor.Interceptor; @@ -402,9 +403,10 @@ private void addTTransportEditor(String tTransportClassName, final String tTrans final String[]... parameterTypeGroups) { final String targetClassName = tTransportClassName; transformTemplate.transform(targetClassName, BaseTTransportTransform.class, - new Object[]{tTransportInterceptorFqcn, parameterTypeGroups}, - new Class[]{String.class, String[][].class} - ); + TransformCallbackParametersBuilder.newBuilder() + .addString(tTransportInterceptorFqcn) + .addStringArrayArray(parameterTypeGroups) + .toParameters()); } public static class BaseTTransportTransform implements TransformCallback { diff --git a/plugins/user/src/main/java/com/navercorp/pinpoint/plugin/user/UserPlugin.java b/plugins/user/src/main/java/com/navercorp/pinpoint/plugin/user/UserPlugin.java index 3ae507eaf8438..d6afce648ec5d 100644 --- a/plugins/user/src/main/java/com/navercorp/pinpoint/plugin/user/UserPlugin.java +++ b/plugins/user/src/main/java/com/navercorp/pinpoint/plugin/user/UserPlugin.java @@ -15,15 +15,13 @@ */ package com.navercorp.pinpoint.plugin.user; -import java.security.ProtectionDomain; -import java.util.*; - import com.navercorp.pinpoint.bootstrap.instrument.InstrumentClass; import com.navercorp.pinpoint.bootstrap.instrument.InstrumentException; import com.navercorp.pinpoint.bootstrap.instrument.InstrumentMethod; -import com.navercorp.pinpoint.bootstrap.instrument.MethodFilters; import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor; +import com.navercorp.pinpoint.bootstrap.instrument.MethodFilters; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParametersBuilder; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware; import com.navercorp.pinpoint.bootstrap.logging.PLogger; @@ -33,6 +31,13 @@ import com.navercorp.pinpoint.plugin.user.interceptor.MQExternalClientHandlerInterceptor; import com.navercorp.pinpoint.plugin.user.interceptor.UserIncludeMethodInterceptor; +import java.security.ProtectionDomain; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * @author jaehong.kim * @@ -113,7 +118,10 @@ private void addMessageQueueClientHandlerMethods(List clientHandlerMetho } private void transform(String className, Class transformCallbackClass, String[] methodNameArray) { - transformTemplate.transform(className, transformCallbackClass, new Object[] {methodNameArray}, new Class[]{String[].class}); + transformTemplate.transform(className, transformCallbackClass, + TransformCallbackParametersBuilder.newBuilder() + .addStringArray(methodNameArray) + .toParameters()); } public static class MessageQueueClientHandlerMethodsTransformer implements TransformCallback { diff --git a/plugins/vertx/src/main/java/com/navercorp/pinpoint/plugin/vertx/VertxPlugin.java b/plugins/vertx/src/main/java/com/navercorp/pinpoint/plugin/vertx/VertxPlugin.java index a1797c69b170a..0280296c6f74b 100644 --- a/plugins/vertx/src/main/java/com/navercorp/pinpoint/plugin/vertx/VertxPlugin.java +++ b/plugins/vertx/src/main/java/com/navercorp/pinpoint/plugin/vertx/VertxPlugin.java @@ -27,6 +27,7 @@ import com.navercorp.pinpoint.bootstrap.instrument.transformer.MatchableTransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.MatchableTransformTemplateAware; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; +import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallbackParametersBuilder; import com.navercorp.pinpoint.bootstrap.logging.PLogger; import com.navercorp.pinpoint.bootstrap.logging.PLoggerFactory; import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin; @@ -141,7 +142,11 @@ public void setup(ProfilerPluginSetupContext context) { if (config.isUriStatEnable()) { logger.info("Adding Uri Stat."); - transformTemplate.transform("io.vertx.ext.web.impl.RouteState", RoutingStateTransform.class, new Object[]{config.isUriStatUseUserInput(), config.isUriStatCollectMethod()}, new Class[]{Boolean.class, Boolean.class}); + transformTemplate.transform("io.vertx.ext.web.impl.RouteState", RoutingStateTransform.class, + TransformCallbackParametersBuilder.newBuilder() + .addBoolean(config.isUriStatUseUserInput()) + .addBoolean(config.isUriStatCollectMethod()) + .toParameters()); } } @@ -255,7 +260,10 @@ public byte[] doInTransform(Instrumentor instrumentor, ClassLoader classLoader, private void addRequestHandlerMethod(final String className, final String methodName) { - transformTemplate.transform(className, RequestHandlerMethodTransform.class, new Object[]{methodName}, new Class[]{String.class}); + transformTemplate.transform(className, RequestHandlerMethodTransform.class, + TransformCallbackParametersBuilder.newBuilder() + .addString(methodName) + .toParameters()); } public static class RequestHandlerMethodTransform implements TransformCallback {