diff --git a/gradle.properties b/gradle.properties index 9be62a1f..960cc522 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,8 +20,9 @@ microutilsLoggingVersion = 2.1.23 apacheHttpClientVersion = 5.2.3 aesyDatasizeVersion = 1.0.0 bytebuddyVersion = 1.14.11 +asmVersion = 9.8 -sharedLibsRef = main +sharedLibsRef = feature/java25-support sharedLibsLocalPath = lib-jvm-shared nativeAgentLibName = drill-agent nativeAgentHookEnabled = false diff --git a/java-agent/build.gradle.kts b/java-agent/build.gradle.kts index 79f47be4..94775e71 100644 --- a/java-agent/build.gradle.kts +++ b/java-agent/build.gradle.kts @@ -37,6 +37,7 @@ val nativeAgentHookEnabled: String by parent!!.extra val macosLd64: String by parent!!.extra val bytebuddyVersion: String by parent!!.extra val kotlinxCliVersion: String by parent!!.extra +val asmVersion: String by parent!!.extra repositories { mavenCentral() @@ -115,6 +116,7 @@ kotlin { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:${kotlinxSerializationVersion}") implementation("org.jetbrains.kotlinx:kotlinx-serialization-protobuf:${kotlinxSerializationVersion}") implementation("org.jetbrains.kotlinx:kotlinx-cli:${kotlinxCliVersion}") + implementation("org.ow2.asm:asm:${asmVersion}") implementation(project(":common")) implementation(project(":agent-transport")) implementation(project(":agent-instrumentation")) @@ -129,7 +131,6 @@ kotlin { implementation("com.benasher44:uuid:$uuidVersion") implementation("io.ktor:ktor-utils:$ktorVersion") implementation(project(":jvmapi")) - implementation(project(":knasm")) implementation(project(":konform")) implementation(project(":agent-instrumentation")) if (nativeAgentHookEnabled == "true") diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt index 6287331d..43abdbb5 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt @@ -15,4 +15,4 @@ */ package com.epam.drill.agent.instrument -expect object ApplicationClassTransformer: TransformerObject \ No newline at end of file +expect object ApplicationClassTransformer: Transformer \ No newline at end of file diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt new file mode 100644 index 00000000..a2461b2d --- /dev/null +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt @@ -0,0 +1,18 @@ +/** + * Copyright 2020 - 2022 EPAM Systems + * + * 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 or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.epam.drill.agent.instrument + +expect object CompositeTransformer: Transformer \ No newline at end of file diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt new file mode 100644 index 00000000..f6c5386a --- /dev/null +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt @@ -0,0 +1,20 @@ +/** + * Copyright 2020 - 2022 EPAM Systems + * + * 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 or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.epam.drill.agent.instrument + +expect object TransformerRegistrar { + val enabledTransformers: List +} \ No newline at end of file diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt index 142051c1..8894a73a 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.clients -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object ApacheHttpClientTransformer : TransformerObject +expect object ApacheHttpClientTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt index 0965fd14..a9dc4f72 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.clients -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object JavaHttpClientTransformer : TransformerObject +expect object JavaHttpClientTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt index ded1d282..a97c65e0 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.clients -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object OkHttp3ClientTransformer : TransformerObject +expect object OkHttp3ClientTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt index 19abc448..1f8c4a8e 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.clients -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object SpringWebClientTransformer : TransformerObject \ No newline at end of file +expect object SpringWebClientTransformer : Transformer \ No newline at end of file diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt index 8cf258e4..a6cf17c4 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.jetty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object Jetty10WsMessagesTransformer : TransformerObject +expect object Jetty10WsMessagesTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt index 6a24cbcd..aaadb0f8 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.jetty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object Jetty11WsMessagesTransformer : TransformerObject +expect object Jetty11WsMessagesTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt index 46288850..8aac8b42 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.jetty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object Jetty9WsMessagesTransformer : TransformerObject +expect object Jetty9WsMessagesTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt index 5b2d8d43..3ab39e8b 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.jetty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object JettyHttpServerTransformer : TransformerObject +expect object JettyHttpServerTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt index 8f988ad4..a52da7d3 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.jetty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object JettyWsClientTransformer : TransformerObject +expect object JettyWsClientTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt index 9ae0d7c3..b25b1274 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.jetty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object JettyWsServerTransformer : TransformerObject +expect object JettyWsServerTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt index e8d6279c..1bdb624c 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.netty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object NettyHttpServerTransformer : TransformerObject +expect object NettyHttpServerTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt index c07e7bee..5871380d 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.netty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object NettyWsClientTransformer : TransformerObject +expect object NettyWsClientTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt index 5b2233ce..b0339058 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.netty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object NettyWsMessagesTransformer : TransformerObject +expect object NettyWsMessagesTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt index 2e1f79eb..72437f59 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.netty -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object NettyWsServerTransformer : TransformerObject +expect object NettyWsServerTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt index 677e9bf0..d9239948 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.servers -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object CadenceTransformer : TransformerObject +expect object CadenceTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt index 0404fecb..89a03d9c 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.servers -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object CompatibilityTestsTransformer : TransformerObject \ No newline at end of file +expect object CompatibilityTestsTransformer : Transformer \ No newline at end of file diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt index 158a89d4..2a203b5e 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.servers -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object KafkaTransformer : TransformerObject +expect object KafkaTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt index ad978792..098d3d76 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.servers -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object ReactorTransformer: TransformerObject \ No newline at end of file +expect object ReactorTransformer: Transformer \ No newline at end of file diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt index 83e3130a..2d211e6c 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.servers -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object SSLEngineTransformer : TransformerObject +expect object SSLEngineTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt index a2ea9d42..af5d96a6 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.servers -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object TTLTransformer : TransformerObject +expect object TTLTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt index cb970ac2..4b61437c 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.tomcat -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object TomcatHttpServerTransformer : TransformerObject +expect object TomcatHttpServerTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt index b3cfa1ab..23caee70 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.tomcat -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object TomcatWsClientTransformer : TransformerObject +expect object TomcatWsClientTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt index b92a7c68..89ba98f5 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.tomcat -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object TomcatWsMessagesTransformer : TransformerObject +expect object TomcatWsMessagesTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt index cf2a7fc6..2be31a98 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.tomcat -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object TomcatWsServerTransformer : TransformerObject +expect object TomcatWsServerTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt index 06cd6be6..82fcf924 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.undertow -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object UndertowHttpServerTransformer : TransformerObject +expect object UndertowHttpServerTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt index a9e5cf80..2ee71b92 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.undertow -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object UndertowWsClientTransformer : TransformerObject +expect object UndertowWsClientTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt index 5bd574b1..fc6a424e 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.undertow -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object UndertowWsMessagesTransformer : TransformerObject +expect object UndertowWsMessagesTransformer : Transformer diff --git a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt index 8c530768..83519a44 100644 --- a/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt +++ b/java-agent/src/commonMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt @@ -15,6 +15,6 @@ */ package com.epam.drill.agent.instrument.undertow -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -expect object UndertowWsServerTransformer : TransformerObject +expect object UndertowWsServerTransformer : Transformer diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/Agent.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/Agent.kt index 597cef82..f7e47af1 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/Agent.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/Agent.kt @@ -21,6 +21,7 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.configuration.DefaultParameterDefinitions import com.epam.drill.agent.configuration.ParameterDefinitions import com.epam.drill.agent.instrument.ApplicationClassTransformer +import com.epam.drill.agent.instrument.CompositeTransformer import com.epam.drill.agent.instrument.TransformerRegistrar import com.epam.drill.agent.instrument.clients.ApacheHttpClientTransformer import com.epam.drill.agent.instrument.clients.JavaHttpClientTransformer @@ -54,7 +55,7 @@ import com.epam.drill.agent.module.JvmModuleLoader import com.epam.drill.agent.test2code.Test2Code import com.epam.drill.agent.test2code.configuration.Test2CodeParameterDefinitions import com.epam.drill.agent.transport.JvmModuleMessageSender -import jdk.internal.org.objectweb.asm.ClassReader +import org.objectweb.asm.ClassReader import mu.KotlinLogging import java.lang.instrument.ClassFileTransformer import java.lang.instrument.Instrumentation @@ -73,37 +74,6 @@ private val logo = """ private const val DRILL_PACKAGE = "com/epam/drill/agent" private val logger = KotlinLogging.logger("com.epam.drill.agent.Agent") -private val transformers = setOf( - ApplicationClassTransformer, - TomcatHttpServerTransformer, - JettyHttpServerTransformer, - UndertowHttpServerTransformer, - NettyHttpServerTransformer, - JavaHttpClientTransformer, - ApacheHttpClientTransformer, - OkHttp3ClientTransformer, - SpringWebClientTransformer, - KafkaTransformer, - CadenceTransformer, - TTLTransformer, - ReactorTransformer, -// SSLEngineTransformer, TODO does not work in JVM due to too early initialization of HeadersRetriever - JettyWsClientTransformer, - JettyWsServerTransformer, - Jetty9WsMessagesTransformer, - Jetty10WsMessagesTransformer, - Jetty11WsMessagesTransformer, - NettyWsClientTransformer, - NettyWsServerTransformer, - NettyWsMessagesTransformer, - TomcatWsClientTransformer, - TomcatWsServerTransformer, - TomcatWsMessagesTransformer, - UndertowWsClientTransformer, - UndertowWsServerTransformer, - UndertowWsMessagesTransformer, - CompatibilityTestsTransformer, -) fun premain(agentArgs: String?, inst: Instrumentation) { try { @@ -112,7 +82,6 @@ fun premain(agentArgs: String?, inst: Instrumentation) { Configuration.initializeNative(agentArgs ?: "") updateJvmLoggingConfiguration() validateConfiguration() - TransformerRegistrar.initialize(transformers) inst.addTransformer(DrillClassFileTransformer, true) JvmModuleMessageSender.sendAgentMetadata() JvmModuleLoader.loadJvmModule(Test2Code::class.java.name).load() @@ -187,35 +156,19 @@ object DrillClassFileTransformer : ClassFileTransformer { ): ByteArray? { val kClassName = className ?: return null val kClassBytes = classfileBuffer ?: return null - val precheckedTransformers = TransformerRegistrar.enabledTransformers - .filterNot { kClassName.startsWith(DRILL_PACKAGE) } - .filter { it.precheck(kClassName, loader, protectionDomain) } - .takeIf { it.any() } - ?: return null - val (oldClassBytes, reader) = runCatching { - kClassBytes to ClassReader(kClassBytes) + if (kClassName.startsWith(DRILL_PACKAGE)) return null + if (!CompositeTransformer.precheck(kClassName, loader, protectionDomain)) return null + val oldClassBytes = runCatching { + kClassBytes }.onFailure { logger.error(it) { "Can't read class: $kClassName" } }.getOrNull() ?: return null - val permittedTransformers = precheckedTransformers.filter { - it.permit( - kClassName, - reader.superName, - reader.interfaces - ) - } - val newClassBytes = permittedTransformers.fold(oldClassBytes) { bytes, transformer -> - runCatching { - transformer.transform(kClassName, bytes, loader, protectionDomain) + val newClassBytes = runCatching { + CompositeTransformer.transform(kClassName, oldClassBytes, loader, protectionDomain) }.onFailure { - logger.warn(it) { "Can't transform class: $kClassName with ${transformer::class.simpleName}" } - }.getOrNull() - ?.takeIf { it !== bytes } - ?.also { - logger.debug { "$kClassName was transformed by ${transformer::class.simpleName}" } - } ?: bytes - } + logger.warn(it) { "Can't transform class: $kClassName" } + }.getOrNull() ?: return null return if (newClassBytes !== oldClassBytes) newClassBytes else null } diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt index 1fdd4de9..3d90e1bf 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt @@ -24,7 +24,7 @@ import mu.KLogger import mu.KotlinLogging actual object ApplicationClassTransformer : - TransformerObject, + Transformer, AbstractTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider { @@ -35,7 +35,7 @@ actual object ApplicationClassTransformer : className: String, superName: String?, interfaces: Array - ): Boolean = ClassSource(className, superName ?: "") + ): Boolean = ClassSource(className, superName) .prefixMatches(Configuration.agentMetadata.packagesPrefixes) override fun transform( @@ -43,7 +43,7 @@ actual object ApplicationClassTransformer : classFileBuffer: ByteArray, loader: Any?, protectionDomain: Any? - ): ByteArray = JvmModuleStorage.values() + ): ByteArray? = JvmModuleStorage.values() .filterIsInstance() .fold(classFileBuffer) { bytes, plugin -> plugin.instrument(className, bytes) ?: bytes diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt new file mode 100644 index 00000000..00deb8d8 --- /dev/null +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt @@ -0,0 +1,65 @@ +/** + * Copyright 2020 - 2022 EPAM Systems + * + * 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 or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.epam.drill.agent.instrument + +import mu.KotlinLogging +import org.objectweb.asm.ClassReader + +actual object CompositeTransformer : Transformer { + private val logger = KotlinLogging.logger {} + private val transformers = TransformerRegistrar + + override fun precheck( + className: String, + loader: Any?, + protectionDomain: Any? + ): Boolean { + return transformers.enabledTransformers.any { it.precheck(className, loader, protectionDomain) } + } + + override fun transform( + className: String, + classFileBuffer: ByteArray, + loader: Any?, + protectionDomain: Any? + ): ByteArray? { + val reader = runCatching { ClassReader(classFileBuffer) } + .onFailure { logger.warn(it) { "Can't read class: $classFileBuffer" } } + .getOrNull() ?: return null + val enabledTransformers = runCatching { transformers.enabledTransformers }.onFailure { + logger.warn(it) { "Can't get enabled transformers for class: $className" } + }.getOrNull() ?: return null + return enabledTransformers.fold(classFileBuffer) { bytes, transformer -> + runCatching { + when { + !transformer.precheck(className, loader, protectionDomain) -> bytes + + transformer is TransformerObject && !transformer.permit( + className, + reader.superName, + reader.interfaces + ) -> bytes + + else -> transformer.transform(className, bytes, loader, protectionDomain) + } + }.onFailure { + logger.warn(it) { "Can't transform class: $className with ${transformer::class.simpleName}" } + }.getOrNull()?.takeIf { it !== bytes }?.also { + logger.debug { "$className was transformed by ${transformer::class.simpleName}" } + } ?: bytes + }.takeIf { it !== classFileBuffer } + } +} \ No newline at end of file diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt new file mode 100644 index 00000000..983cfe1f --- /dev/null +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt @@ -0,0 +1,88 @@ +/** + * Copyright 2020 - 2022 EPAM Systems + * + * 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 or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.epam.drill.agent.instrument + +import mu.KotlinLogging +import com.epam.drill.agent.instrument.clients.ApacheHttpClientTransformer +import com.epam.drill.agent.instrument.clients.JavaHttpClientTransformer +import com.epam.drill.agent.instrument.clients.OkHttp3ClientTransformer +import com.epam.drill.agent.instrument.clients.SpringWebClientTransformer +import com.epam.drill.agent.instrument.jetty.Jetty10WsMessagesTransformer +import com.epam.drill.agent.instrument.jetty.Jetty11WsMessagesTransformer +import com.epam.drill.agent.instrument.jetty.Jetty9WsMessagesTransformer +import com.epam.drill.agent.instrument.jetty.JettyHttpServerTransformer +import com.epam.drill.agent.instrument.jetty.JettyWsClientTransformer +import com.epam.drill.agent.instrument.jetty.JettyWsServerTransformer +import com.epam.drill.agent.instrument.netty.NettyHttpServerTransformer +import com.epam.drill.agent.instrument.netty.NettyWsClientTransformer +import com.epam.drill.agent.instrument.netty.NettyWsMessagesTransformer +import com.epam.drill.agent.instrument.netty.NettyWsServerTransformer +import com.epam.drill.agent.instrument.servers.CadenceTransformer +import com.epam.drill.agent.instrument.servers.CompatibilityTestsTransformer +import com.epam.drill.agent.instrument.servers.KafkaTransformer +import com.epam.drill.agent.instrument.servers.ReactorTransformer +import com.epam.drill.agent.instrument.servers.SSLEngineTransformer +import com.epam.drill.agent.instrument.servers.TTLTransformer +import com.epam.drill.agent.instrument.tomcat.TomcatHttpServerTransformer +import com.epam.drill.agent.instrument.tomcat.TomcatWsClientTransformer +import com.epam.drill.agent.instrument.tomcat.TomcatWsMessagesTransformer +import com.epam.drill.agent.instrument.tomcat.TomcatWsServerTransformer +import com.epam.drill.agent.instrument.undertow.UndertowHttpServerTransformer +import com.epam.drill.agent.instrument.undertow.UndertowWsClientTransformer +import com.epam.drill.agent.instrument.undertow.UndertowWsMessagesTransformer +import com.epam.drill.agent.instrument.undertow.UndertowWsServerTransformer + +actual object TransformerRegistrar { + private val logger = KotlinLogging.logger {} + private val transformers: Set = setOf( + ApplicationClassTransformer, + TomcatHttpServerTransformer, + JettyHttpServerTransformer, + UndertowHttpServerTransformer, + NettyHttpServerTransformer, + JavaHttpClientTransformer, + ApacheHttpClientTransformer, + OkHttp3ClientTransformer, + SpringWebClientTransformer, + KafkaTransformer, + CadenceTransformer, + TTLTransformer, + ReactorTransformer, + SSLEngineTransformer, + JettyWsClientTransformer, + JettyWsServerTransformer, + Jetty9WsMessagesTransformer, + Jetty10WsMessagesTransformer, + Jetty11WsMessagesTransformer, + NettyWsClientTransformer, + NettyWsServerTransformer, + NettyWsMessagesTransformer, + TomcatWsClientTransformer, + TomcatWsServerTransformer, + TomcatWsMessagesTransformer, + UndertowWsClientTransformer, + UndertowWsServerTransformer, + UndertowWsMessagesTransformer, + CompatibilityTestsTransformer, + ) + actual val enabledTransformers: List by lazy { + transformers.filter { transformer -> + transformer.enabled() + }.also { + logger.info { "Enabled ${it.size} jvm transformers" } + } + } +} \ No newline at end of file diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt index c6f18222..d575a7a5 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object ApacheHttpClientTransformer : - TransformerObject, + Transformer, ApacheHttpClientTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt index 3a4a845a..c083293f 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object JavaHttpClientTransformer : - TransformerObject, + Transformer, JavaHttpClientTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt index 8cbace7b..c1f9e395 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object OkHttp3ClientTransformer : - TransformerObject, + Transformer, OkHttp3ClientTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt index 918aba52..0eb89728 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt @@ -19,7 +19,7 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.* actual object SpringWebClientTransformer: - TransformerObject, + Transformer, SpringWebClientTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt index 9dca362a..39772b47 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt @@ -20,7 +20,7 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.* actual object Jetty10WsMessagesTransformer : - TransformerObject, + Transformer, Jetty10WsMessagesTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, PayloadProcessor by DefaultPayloadProcessor, diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt index 7caae792..e729e015 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt @@ -19,7 +19,7 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.* actual object Jetty11WsMessagesTransformer : - TransformerObject, + Transformer, Jetty11WsMessagesTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, PayloadProcessor by DefaultPayloadProcessor, diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt index 0e754bc5..34a37dda 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt @@ -19,7 +19,7 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.* actual object Jetty9WsMessagesTransformer : - TransformerObject, + Transformer, Jetty9WsMessagesTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, PayloadProcessor by DefaultPayloadProcessor, diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt index fac55cbd..9be8d886 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt @@ -20,7 +20,7 @@ import com.epam.drill.agent.instrument.* import com.epam.drill.agent.request.HeadersRetriever actual object JettyHttpServerTransformer : - TransformerObject, + Transformer, JettyHttpServerTransformerObject(HeadersRetriever, Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt index 2b2d3f0c..335a4119 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt @@ -19,7 +19,7 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.* actual object JettyWsClientTransformer : - TransformerObject, + Transformer, JettyWsClientTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt index a5cdfb01..57e9abca 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt @@ -19,7 +19,7 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.* actual object JettyWsServerTransformer : - TransformerObject, + Transformer, JettyWsServerTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt index 497e31fa..a06ffcb1 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt @@ -20,11 +20,11 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.request.HeadersRetriever actual object NettyHttpServerTransformer : - TransformerObject, + Transformer, NettyHttpServerTransformerObject(HeadersRetriever, Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt index dae6ab09..91056018 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object NettyWsClientTransformer : - TransformerObject, + Transformer, NettyWsClientTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt index 8dd3fbf0..c6602b8f 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt @@ -22,10 +22,10 @@ import com.epam.drill.agent.instrument.DefaultPayloadProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.PayloadProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object NettyWsMessagesTransformer : - TransformerObject, + Transformer, NettyWsMessagesTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, PayloadProcessor by DefaultPayloadProcessor, diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt index b9eacf3e..cd57e734 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object NettyWsServerTransformer : - TransformerObject, + Transformer, NettyWsServerTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/FluxTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/FluxTransformer.kt index afbc3828..d5fff6db 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/FluxTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/FluxTransformer.kt @@ -18,10 +18,10 @@ package com.epam.drill.agent.instrument.reactor.transformers import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.request.DrillRequestHolder -object FluxTransformer: TransformerObject, +object FluxTransformer: Transformer, FluxTransformerObject(Configuration), com.epam.drill.agent.common.request.RequestHolder by DrillRequestHolder, ClassPathProvider by RuntimeClassPathProvider \ No newline at end of file diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/MonoTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/MonoTransformer.kt index 1952bf00..86e43a2d 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/MonoTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/MonoTransformer.kt @@ -18,10 +18,10 @@ package com.epam.drill.agent.instrument.reactor.transformers import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.request.DrillRequestHolder -object MonoTransformer : TransformerObject, +object MonoTransformer : Transformer, MonoTransformerObject(Configuration), com.epam.drill.agent.common.request.RequestHolder by DrillRequestHolder, ClassPathProvider by RuntimeClassPathProvider \ No newline at end of file diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/ParallelFluxTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/ParallelFluxTransformer.kt index 41c1acdb..2a31ff26 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/ParallelFluxTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/ParallelFluxTransformer.kt @@ -18,10 +18,10 @@ package com.epam.drill.agent.instrument.reactor.transformers import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.request.DrillRequestHolder -object ParallelFluxTransformer: TransformerObject, +object ParallelFluxTransformer: Transformer, ParallelFluxTransformerObject(Configuration), com.epam.drill.agent.common.request.RequestHolder by DrillRequestHolder, ClassPathProvider by RuntimeClassPathProvider \ No newline at end of file diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/SchedulersTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/SchedulersTransformer.kt index 5883ce3e..a723a696 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/SchedulersTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/reactor/transformers/SchedulersTransformer.kt @@ -16,12 +16,12 @@ package com.epam.drill.agent.instrument.reactor.transformers import com.epam.drill.agent.configuration.Configuration -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.RuntimeClassPathProvider import com.epam.drill.agent.request.DrillRequestHolder -object SchedulersTransformer: TransformerObject, +object SchedulersTransformer: Transformer, SchedulersTransformerObject(Configuration), com.epam.drill.agent.common.request.RequestHolder by DrillRequestHolder, ClassPathProvider by RuntimeClassPathProvider \ No newline at end of file diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt index f16af633..c161945f 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object CadenceTransformer : - TransformerObject, + Transformer, CadenceTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt index 3cb25ce0..ec576022 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt @@ -21,7 +21,7 @@ import com.epam.drill.agent.instrument.test.CompatibilityTestsTransformerObject import com.epam.drill.agent.request.DrillRequestHolder actual object CompatibilityTestsTransformer : - TransformerObject, + Transformer, com.epam.drill.agent.common.request.RequestHolder by DrillRequestHolder, CompatibilityTestsTransformerObject(Configuration), ClassPathProvider by RuntimeClassPathProvider \ No newline at end of file diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt index 82755906..f81c2b62 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object KafkaTransformer : - TransformerObject, + Transformer, KafkaTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt index bd3c70e2..76d8cdcf 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt @@ -19,7 +19,7 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.instrument.reactor.transformers.FluxTransformer import com.epam.drill.agent.instrument.reactor.transformers.MonoTransformer import com.epam.drill.agent.instrument.reactor.transformers.ParallelFluxTransformer @@ -33,6 +33,6 @@ private val reactorTransformers = setOf( ) actual object ReactorTransformer : - TransformerObject, + Transformer, ReactorTransformerObject(reactorTransformers, Configuration), ClassPathProvider by RuntimeClassPathProvider \ No newline at end of file diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt index bbf9cbdc..e78fca28 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt @@ -20,11 +20,11 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.request.HeadersRetriever actual object SSLEngineTransformer : - TransformerObject, + Transformer, SSLEngineTransformerObject(HeadersRetriever, Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt index 3c300607..7ba450e3 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt @@ -18,9 +18,9 @@ package com.epam.drill.agent.instrument.servers import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object TTLTransformer : - TransformerObject, + Transformer, TTLTransformerObject(Configuration), ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt index 8c3a60b2..7167babc 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt @@ -20,11 +20,11 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.request.HeadersRetriever actual object TomcatHttpServerTransformer : - TransformerObject, + Transformer, TomcatHttpServerTransformerObject(HeadersRetriever, Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt index 9442959a..c7fc5caa 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object TomcatWsClientTransformer : - TransformerObject, + Transformer, TomcatWsClientTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt index b27fb0ff..b6f92ea4 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt @@ -22,10 +22,10 @@ import com.epam.drill.agent.instrument.DefaultPayloadProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.PayloadProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object TomcatWsMessagesTransformer : - TransformerObject, + Transformer, TomcatWsMessagesTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, PayloadProcessor by DefaultPayloadProcessor, diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt index 484145c7..de681d77 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt @@ -20,10 +20,10 @@ import com.epam.drill.agent.instrument.ClassPathProvider import com.epam.drill.agent.instrument.DefaultHeadersProcessor import com.epam.drill.agent.instrument.HeadersProcessor import com.epam.drill.agent.instrument.RuntimeClassPathProvider -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer actual object TomcatWsServerTransformer : - TransformerObject, + Transformer, TomcatWsServerTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt index 1793c479..2efcab3b 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt @@ -20,7 +20,7 @@ import com.epam.drill.agent.instrument.* import com.epam.drill.agent.request.HeadersRetriever actual object UndertowHttpServerTransformer : - TransformerObject, + Transformer, UndertowHttpServerTransformerObject(HeadersRetriever, Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt index 86b1d18a..cc63a310 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt @@ -20,7 +20,7 @@ import com.epam.drill.agent.instrument.* import com.epam.drill.agent.request.HeadersRetriever actual object UndertowWsClientTransformer : - TransformerObject, + Transformer, UndertowWsClientTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt index a4890c89..69074164 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt @@ -20,7 +20,7 @@ import com.epam.drill.agent.instrument.* import com.epam.drill.agent.request.HeadersRetriever actual object UndertowWsMessagesTransformer : - TransformerObject, + Transformer, UndertowWsMessagesTransformerObject(Configuration), HeadersProcessor by DefaultHeadersProcessor, PayloadProcessor by DefaultPayloadProcessor, diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt index 721c144e..91581ac3 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt @@ -20,7 +20,7 @@ import com.epam.drill.agent.instrument.* import com.epam.drill.agent.request.HeadersRetriever actual object UndertowWsServerTransformer : - TransformerObject, + Transformer, UndertowWsServerTransformerObject(HeadersRetriever, Configuration), HeadersProcessor by DefaultHeadersProcessor, ClassPathProvider by RuntimeClassPathProvider diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/Agent.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/Agent.kt index 02b37c5e..99159932 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/Agent.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/Agent.kt @@ -35,35 +35,6 @@ import com.epam.drill.agent.transport.JvmModuleMessageSender import com.epam.drill.agent.jvmapi.gen.* import kotlinx.cinterop.ExperimentalForeignApi import kotlin.experimental.ExperimentalNativeApi -import com.epam.drill.agent.instrument.TransformerRegistrar -import com.epam.drill.agent.instrument.clients.ApacheHttpClientTransformer -import com.epam.drill.agent.instrument.clients.JavaHttpClientTransformer -import com.epam.drill.agent.instrument.clients.OkHttp3ClientTransformer -import com.epam.drill.agent.instrument.clients.SpringWebClientTransformer -import com.epam.drill.agent.instrument.jetty.Jetty10WsMessagesTransformer -import com.epam.drill.agent.instrument.jetty.Jetty11WsMessagesTransformer -import com.epam.drill.agent.instrument.jetty.Jetty9WsMessagesTransformer -import com.epam.drill.agent.instrument.jetty.JettyHttpServerTransformer -import com.epam.drill.agent.instrument.jetty.JettyWsClientTransformer -import com.epam.drill.agent.instrument.jetty.JettyWsServerTransformer -import com.epam.drill.agent.instrument.netty.NettyHttpServerTransformer -import com.epam.drill.agent.instrument.netty.NettyWsClientTransformer -import com.epam.drill.agent.instrument.netty.NettyWsMessagesTransformer -import com.epam.drill.agent.instrument.netty.NettyWsServerTransformer -import com.epam.drill.agent.instrument.servers.CadenceTransformer -import com.epam.drill.agent.instrument.servers.CompatibilityTestsTransformer -import com.epam.drill.agent.instrument.servers.KafkaTransformer -import com.epam.drill.agent.instrument.servers.ReactorTransformer -import com.epam.drill.agent.instrument.servers.SSLEngineTransformer -import com.epam.drill.agent.instrument.servers.TTLTransformer -import com.epam.drill.agent.instrument.tomcat.TomcatHttpServerTransformer -import com.epam.drill.agent.instrument.tomcat.TomcatWsClientTransformer -import com.epam.drill.agent.instrument.tomcat.TomcatWsMessagesTransformer -import com.epam.drill.agent.instrument.tomcat.TomcatWsServerTransformer -import com.epam.drill.agent.instrument.undertow.UndertowHttpServerTransformer -import com.epam.drill.agent.instrument.undertow.UndertowWsClientTransformer -import com.epam.drill.agent.instrument.undertow.UndertowWsMessagesTransformer -import com.epam.drill.agent.instrument.undertow.UndertowWsServerTransformer object Agent { @@ -79,37 +50,6 @@ object Agent { """.trimIndent() private val logger = KotlinLogging.logger("com.epam.drill.agent.Agent") - private val transformers = setOf( - ApplicationClassTransformer, - TomcatHttpServerTransformer, - JettyHttpServerTransformer, - UndertowHttpServerTransformer, - NettyHttpServerTransformer, - JavaHttpClientTransformer, - ApacheHttpClientTransformer, - OkHttp3ClientTransformer, - SpringWebClientTransformer, - KafkaTransformer, - CadenceTransformer, - TTLTransformer, - ReactorTransformer, - SSLEngineTransformer, - JettyWsClientTransformer, - JettyWsServerTransformer, - Jetty9WsMessagesTransformer, - Jetty10WsMessagesTransformer, - Jetty11WsMessagesTransformer, - NettyWsClientTransformer, - NettyWsServerTransformer, - NettyWsMessagesTransformer, - TomcatWsClientTransformer, - TomcatWsServerTransformer, - TomcatWsMessagesTransformer, - UndertowWsClientTransformer, - UndertowWsServerTransformer, - UndertowWsMessagesTransformer, - CompatibilityTestsTransformer, - ) @OptIn(ExperimentalNativeApi::class, ExperimentalForeignApi::class) fun agentOnLoad(options: String): Int { @@ -117,7 +57,6 @@ object Agent { AgentLoggingConfiguration.defaultNativeLoggingConfiguration() Configuration.initializeNative(options) AgentLoggingConfiguration.updateNativeLoggingConfiguration() - TransformerRegistrar.initialize(transformers) addCapabilities() setEventCallbacks() setUnhandledExceptionHook({ error: Throwable -> logger.error(error) { "Unhandled event: $error" }}.freeze()) diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/AbstractTransformerObject.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/AbstractTransformerObject.kt index db0b6e27..42786082 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/AbstractTransformerObject.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/AbstractTransformerObject.kt @@ -18,6 +18,14 @@ package com.epam.drill.agent.instrument import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_ENABLED -abstract class AbstractTransformerObject: JvmTransformerObject() { +abstract class AbstractTransformerObject: Transformer { override fun enabled() = Configuration.parameters[INSTRUMENTATION_ENABLED] + override fun transform( + className: String, + classFileBuffer: ByteArray, + loader: Any?, + protectionDomain: Any? + ): ByteArray? { + throw UnsupportedOperationException("Use transform in CompositeTransformer instead") + } } \ No newline at end of file diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt index dfae73bf..bf936bc4 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/ApplicationClassTransformer.kt @@ -20,27 +20,23 @@ import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.module.InstrumentationAgentModule import com.epam.drill.agent.module.JvmModuleStorage -actual object ApplicationClassTransformer : TransformerObject, AbstractTransformerObject() { +actual object ApplicationClassTransformer : Transformer, AbstractTransformerObject() { override fun precheck( className: String, loader: Any?, protectionDomain: Any? - ): Boolean = loader != null && protectionDomain != null && '$' !in className - - override fun permit( - className: String, - superName: String?, - interfaces: Array - ): Boolean = ClassSource(className, superName ?: "") - .prefixMatches(Configuration.agentMetadata.packagesPrefixes) + ): Boolean = loader != null + && protectionDomain != null + && COMPILER_GENERATED_NAMES_PREFIX !in className + && ClassSource(className, "").prefixMatches(Configuration.agentMetadata.packagesPrefixes) override fun transform( className: String, classFileBuffer: ByteArray, loader: Any?, protectionDomain: Any? - ): ByteArray = JvmModuleStorage.values() + ): ByteArray? = JvmModuleStorage.values() .filterIsInstance() .fold(classFileBuffer) { bytes, plugin -> plugin.instrument(className, bytes) ?: bytes diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt new file mode 100644 index 00000000..35edf999 --- /dev/null +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/CompositeTransformer.kt @@ -0,0 +1,27 @@ +/** + * Copyright 2020 - 2022 EPAM Systems + * + * 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 or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.epam.drill.agent.instrument + +actual object CompositeTransformer: Transformer, JvmTransformer() { + private val transformers = TransformerRegistrar + override fun precheck( + className: String, + loader: Any?, + protectionDomain: Any? + ): Boolean { + return transformers.enabledTransformers.any { it.precheck(className, loader, protectionDomain) } + } +} \ No newline at end of file diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt new file mode 100644 index 00000000..e38cd65e --- /dev/null +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/TransformerRegistrar.kt @@ -0,0 +1,88 @@ +/** + * Copyright 2020 - 2022 EPAM Systems + * + * 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 or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.epam.drill.agent.instrument + +import com.epam.drill.agent.instrument.clients.ApacheHttpClientTransformer +import com.epam.drill.agent.instrument.clients.JavaHttpClientTransformer +import com.epam.drill.agent.instrument.clients.OkHttp3ClientTransformer +import com.epam.drill.agent.instrument.clients.SpringWebClientTransformer +import com.epam.drill.agent.instrument.jetty.Jetty10WsMessagesTransformer +import com.epam.drill.agent.instrument.jetty.Jetty11WsMessagesTransformer +import com.epam.drill.agent.instrument.jetty.Jetty9WsMessagesTransformer +import com.epam.drill.agent.instrument.jetty.JettyHttpServerTransformer +import com.epam.drill.agent.instrument.jetty.JettyWsClientTransformer +import com.epam.drill.agent.instrument.jetty.JettyWsServerTransformer +import com.epam.drill.agent.instrument.netty.NettyHttpServerTransformer +import com.epam.drill.agent.instrument.netty.NettyWsClientTransformer +import com.epam.drill.agent.instrument.netty.NettyWsMessagesTransformer +import com.epam.drill.agent.instrument.netty.NettyWsServerTransformer +import com.epam.drill.agent.instrument.servers.CadenceTransformer +import com.epam.drill.agent.instrument.servers.CompatibilityTestsTransformer +import com.epam.drill.agent.instrument.servers.KafkaTransformer +import com.epam.drill.agent.instrument.servers.ReactorTransformer +import com.epam.drill.agent.instrument.servers.SSLEngineTransformer +import com.epam.drill.agent.instrument.servers.TTLTransformer +import com.epam.drill.agent.instrument.tomcat.TomcatHttpServerTransformer +import com.epam.drill.agent.instrument.tomcat.TomcatWsClientTransformer +import com.epam.drill.agent.instrument.tomcat.TomcatWsMessagesTransformer +import com.epam.drill.agent.instrument.tomcat.TomcatWsServerTransformer +import com.epam.drill.agent.instrument.undertow.UndertowHttpServerTransformer +import com.epam.drill.agent.instrument.undertow.UndertowWsClientTransformer +import com.epam.drill.agent.instrument.undertow.UndertowWsMessagesTransformer +import com.epam.drill.agent.instrument.undertow.UndertowWsServerTransformer +import mu.KotlinLogging + +actual object TransformerRegistrar { + private val logger = KotlinLogging.logger("TransformerRegistrar") + private val transformers = setOf( + ApplicationClassTransformer, + TomcatHttpServerTransformer, + JettyHttpServerTransformer, + UndertowHttpServerTransformer, + NettyHttpServerTransformer, + JavaHttpClientTransformer, + ApacheHttpClientTransformer, + OkHttp3ClientTransformer, + SpringWebClientTransformer, + KafkaTransformer, + CadenceTransformer, + TTLTransformer, + ReactorTransformer, + SSLEngineTransformer, + JettyWsClientTransformer, + JettyWsServerTransformer, + Jetty9WsMessagesTransformer, + Jetty10WsMessagesTransformer, + Jetty11WsMessagesTransformer, + NettyWsClientTransformer, + NettyWsServerTransformer, + NettyWsMessagesTransformer, + TomcatWsClientTransformer, + TomcatWsServerTransformer, + TomcatWsMessagesTransformer, + UndertowWsClientTransformer, + UndertowWsServerTransformer, + UndertowWsMessagesTransformer, + CompatibilityTestsTransformer, + ) + actual val enabledTransformers: List by lazy { + transformers.filter { transformer -> + transformer.enabled() + }.also { + logger.info { "Enabled ${it.size} native transformers" } + } + } +} \ No newline at end of file diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt index c10008c0..808f0fca 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/ApacheHttpClientTransformer.kt @@ -18,8 +18,8 @@ package com.epam.drill.agent.instrument.clients import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_APACHE_HTTP_CLIENT_ENABLED -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object ApacheHttpClientTransformer : TransformerObject, AbstractTransformerObject() { +actual object ApacheHttpClientTransformer : Transformer, AbstractTransformerObject() { override fun enabled() = super.enabled() && Configuration.parameters[INSTRUMENTATION_APACHE_HTTP_CLIENT_ENABLED] } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt index 5fa1f25c..1fdc84b9 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/JavaHttpClientTransformer.kt @@ -18,9 +18,9 @@ package com.epam.drill.agent.instrument.clients import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_JAVA_HTTP_CLIENT_ENABLED -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object JavaHttpClientTransformer : TransformerObject, AbstractTransformerObject() { +actual object JavaHttpClientTransformer : Transformer, AbstractTransformerObject() { override fun enabled() = super.enabled() && Configuration.parameters[INSTRUMENTATION_JAVA_HTTP_CLIENT_ENABLED] override fun precheck( className: String, diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt index 4ecd338c..ef77c155 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/OkHttp3ClientTransformer.kt @@ -18,8 +18,8 @@ package com.epam.drill.agent.instrument.clients import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_OK_HTTP_CLIENT_ENABLED -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object OkHttp3ClientTransformer : TransformerObject, AbstractTransformerObject() { +actual object OkHttp3ClientTransformer : Transformer, AbstractTransformerObject() { override fun enabled() = super.enabled() && Configuration.parameters[INSTRUMENTATION_OK_HTTP_CLIENT_ENABLED] } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt index 4e1edb86..193b4674 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/clients/SpringWebClientTransformer.kt @@ -17,11 +17,9 @@ package com.epam.drill.agent.instrument.clients import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.AbstractTransformerObject -import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_APACHE_HTTP_CLIENT_ENABLED import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_SPRING_WEB_CLIENT_ENABLED -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object SpringWebClientTransformer : TransformerObject, AbstractTransformerObject() { +actual object SpringWebClientTransformer : Transformer, AbstractTransformerObject() { override fun enabled() = super.enabled() && Configuration.parameters[INSTRUMENTATION_SPRING_WEB_CLIENT_ENABLED] } \ No newline at end of file diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt index 5cb074a9..4ecddba3 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty10WsMessagesTransformer.kt @@ -15,12 +15,7 @@ */ package com.epam.drill.agent.instrument.jetty -import com.epam.drill.agent.configuration.Configuration -import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_APACHE_HTTP_CLIENT_ENABLED -import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_WS_ENABLED -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object Jetty10WsMessagesTransformer : TransformerObject, AbstractWsTransformerObject() \ No newline at end of file +actual object Jetty10WsMessagesTransformer : Transformer, AbstractWsTransformerObject() \ No newline at end of file diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt index 471b9b83..17ee6516 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty11WsMessagesTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.jetty import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object Jetty11WsMessagesTransformer : TransformerObject, AbstractWsTransformerObject() +actual object Jetty11WsMessagesTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt index cb9c1253..35be1b12 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/Jetty9WsMessagesTransformer.kt @@ -15,12 +15,7 @@ */ package com.epam.drill.agent.instrument.jetty -import com.epam.drill.agent.configuration.Configuration -import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_APACHE_HTTP_CLIENT_ENABLED -import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_WS_ENABLED -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object Jetty9WsMessagesTransformer : TransformerObject, AbstractWsTransformerObject() +actual object Jetty9WsMessagesTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt index b9d8c319..30e81e3e 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyHttpServerTransformer.kt @@ -17,9 +17,13 @@ package com.epam.drill.agent.instrument.jetty import com.epam.drill.agent.instrument.AbstractHttpTransformerObject import com.epam.drill.agent.instrument.JETTY_SERVER_HANDLER -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object JettyHttpServerTransformer : TransformerObject, AbstractHttpTransformerObject() { - override fun permit(className: String, superName: String?, interfaces: Array) = - JETTY_SERVER_HANDLER == className +actual object JettyHttpServerTransformer : Transformer, AbstractHttpTransformerObject() { + + override fun precheck( + className: String, + loader: Any?, + protectionDomain: Any? + ): Boolean = JETTY_SERVER_HANDLER == className } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt index 1166e255..1e23c041 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsClientTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.jetty import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object JettyWsClientTransformer : TransformerObject, AbstractWsTransformerObject() +actual object JettyWsClientTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt index 8159e9d9..c7231a7f 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/jetty/JettyWsServerTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.jetty import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object JettyWsServerTransformer : TransformerObject, AbstractWsTransformerObject() +actual object JettyWsServerTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt index 9dff80d8..42fbba19 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyHttpServerTransformer.kt @@ -16,15 +16,14 @@ package com.epam.drill.agent.instrument.netty import com.epam.drill.agent.instrument.AbstractHttpTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject import com.epam.drill.agent.instrument.NETTY_CHANNEL_HANDLER_CONTEXT -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object NettyHttpServerTransformer : TransformerObject, AbstractHttpTransformerObject() { +actual object NettyHttpServerTransformer : Transformer, AbstractHttpTransformerObject() { - override fun permit( + override fun precheck( className: String, - superName: String?, - interfaces: Array + loader: Any?, + protectionDomain: Any? ): Boolean = '$' !in className && className.startsWith(NETTY_CHANNEL_HANDLER_CONTEXT) } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt index aee92da0..3df441c9 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsClientTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.netty import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object NettyWsClientTransformer : TransformerObject, AbstractWsTransformerObject() +actual object NettyWsClientTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt index 90e32c00..2340f9c5 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsMessagesTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.netty import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object NettyWsMessagesTransformer : TransformerObject, AbstractWsTransformerObject() +actual object NettyWsMessagesTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt index 0a21b76c..5c52ddbe 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/netty/NettyWsServerTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.netty import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object NettyWsServerTransformer : TransformerObject, AbstractWsTransformerObject() +actual object NettyWsServerTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt index eb57d01e..e91da1e1 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/CadenceTransformer.kt @@ -17,15 +17,17 @@ package com.epam.drill.agent.instrument.servers import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.AbstractTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.instrument.CADENCE_CONSUMER import com.epam.drill.agent.instrument.CADENCE_PRODUCER import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_CADENCE_ENABLED -actual object CadenceTransformer : TransformerObject, AbstractTransformerObject() { +actual object CadenceTransformer : Transformer, AbstractTransformerObject() { override fun enabled() = super.enabled() && Configuration.parameters[INSTRUMENTATION_CADENCE_ENABLED] - override fun permit(className: String, superName: String?, interfaces: Array) = - CADENCE_PRODUCER == className || CADENCE_CONSUMER == className + override fun precheck( + className: String, + loader: Any?, + protectionDomain: Any? + ): Boolean = CADENCE_PRODUCER == className || CADENCE_CONSUMER == className } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt index bd1c5784..2778a65e 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/CompatibilityTestsTransformer.kt @@ -16,13 +16,10 @@ package com.epam.drill.agent.instrument.servers import com.epam.drill.agent.configuration.Configuration -import com.epam.drill.agent.configuration.ParameterDefinitions import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_COMPATIBILITY_TESTS_ENABLED -import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_WS_ENABLED -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object CompatibilityTestsTransformer : TransformerObject, AbstractTransformerObject() { +actual object CompatibilityTestsTransformer : Transformer, AbstractTransformerObject() { override fun enabled() = super.enabled() && Configuration.parameters[INSTRUMENTATION_COMPATIBILITY_TESTS_ENABLED] } \ No newline at end of file diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt index e44e2793..09d53a8a 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/KafkaTransformer.kt @@ -20,10 +20,8 @@ import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_KAFKA_ENABLED import com.epam.drill.agent.instrument.KAFKA_CONSUMER_SPRING import com.epam.drill.agent.instrument.KAFKA_PRODUCER_INTERFACE -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object KafkaTransformer : TransformerObject, AbstractTransformerObject() { +actual object KafkaTransformer : Transformer, AbstractTransformerObject() { override fun enabled() = super.enabled() && Configuration.parameters[INSTRUMENTATION_KAFKA_ENABLED] - override fun permit(className: String, superName: String?, interfaces: Array) = - KAFKA_CONSUMER_SPRING == className || interfaces.contains(KAFKA_PRODUCER_INTERFACE) } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt index 4fbebdab..3e3adbea 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/ReactorTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.servers import com.epam.drill.agent.instrument.AbstractReactTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object ReactorTransformer: TransformerObject, AbstractReactTransformerObject() \ No newline at end of file +actual object ReactorTransformer: Transformer, AbstractReactTransformerObject() \ No newline at end of file diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt index 265ea35a..90c0f577 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/SSLEngineTransformer.kt @@ -18,17 +18,10 @@ package com.epam.drill.agent.instrument.servers import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_SSL_ENABLED -import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_WS_ENABLED -import com.epam.drill.agent.instrument.JvmTransformerObject import com.epam.drill.agent.instrument.SSL_ENGINE_CLASS_NAME -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object SSLEngineTransformer : TransformerObject, AbstractTransformerObject() { +actual object SSLEngineTransformer : Transformer, AbstractTransformerObject() { override fun enabled() = super.enabled() && Configuration.parameters[INSTRUMENTATION_SSL_ENABLED] - override fun permit( - className: String, - superName: String?, - interfaces: Array - ): Boolean = superName == SSL_ENGINE_CLASS_NAME } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt index 84891034..e7de17df 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/servers/TTLTransformer.kt @@ -18,11 +18,9 @@ package com.epam.drill.agent.instrument.servers import com.epam.drill.agent.configuration.Configuration import com.epam.drill.agent.instrument.AbstractTransformerObject import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_TTL_ENABLED -import com.epam.drill.agent.instrument.InstrumentationParameterDefinitions.INSTRUMENTATION_WS_ENABLED -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object TTLTransformer : TransformerObject, AbstractTransformerObject() { +actual object TTLTransformer : Transformer, AbstractTransformerObject() { val directTtlClasses = listOf( "java/util/concurrent/ScheduledThreadPoolExecutor", "java/util/concurrent/ThreadPoolExecutor", @@ -39,15 +37,6 @@ actual object TTLTransformer : TransformerObject, AbstractTransformerObject() { className: String, loader: Any?, protectionDomain: Any? - ): Boolean = loader != null && protectionDomain != null || className in directTtlClasses - - override fun permit( - className: String, - superName: String?, - interfaces: Array - ): Boolean = className in directTtlClasses - || (className != timerTaskClass - && (runnableInterface in interfaces.filterNotNull() - || superName == poolExecutor)) - && !className.startsWith(jdkInternal) + ): Boolean = loader != null && protectionDomain != null && !className.startsWith("jdk/internal") + || className in directTtlClasses } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt index ae8b2069..f0e1a077 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatHttpServerTransformer.kt @@ -16,11 +16,13 @@ package com.epam.drill.agent.instrument.tomcat import com.epam.drill.agent.instrument.AbstractHttpTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject import com.epam.drill.agent.instrument.TOMCAT_HTTP_FILTER -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object TomcatHttpServerTransformer : TransformerObject, AbstractHttpTransformerObject() { - override fun permit(className: String, superName: String?, interfaces: Array) = - TOMCAT_HTTP_FILTER == className +actual object TomcatHttpServerTransformer : Transformer, AbstractHttpTransformerObject() { + override fun precheck( + className: String, + loader: Any?, + protectionDomain: Any? + ): Boolean = TOMCAT_HTTP_FILTER == className } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt index f5d8c039..d1971f81 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsClientTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.tomcat import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object TomcatWsClientTransformer : TransformerObject, AbstractWsTransformerObject() +actual object TomcatWsClientTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt index 8a863048..5cb007af 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsMessagesTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.tomcat import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object TomcatWsMessagesTransformer : TransformerObject, AbstractWsTransformerObject() +actual object TomcatWsMessagesTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt index 31095dc3..92c076b6 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/tomcat/TomcatWsServerTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.tomcat import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object TomcatWsServerTransformer : TransformerObject, AbstractWsTransformerObject() +actual object TomcatWsServerTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt index 3d006b81..76e8d4bf 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowHttpServerTransformer.kt @@ -16,11 +16,14 @@ package com.epam.drill.agent.instrument.undertow import com.epam.drill.agent.instrument.AbstractHttpTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer import com.epam.drill.agent.instrument.UNDERTOW_SERVER_CONNECTORS -actual object UndertowHttpServerTransformer : TransformerObject, AbstractHttpTransformerObject() { - override fun permit(className: String, superName: String?, interfaces: Array) = - UNDERTOW_SERVER_CONNECTORS == className +actual object UndertowHttpServerTransformer : Transformer, AbstractHttpTransformerObject() { + + override fun precheck( + className: String, + loader: Any?, + protectionDomain: Any? + ): Boolean = UNDERTOW_SERVER_CONNECTORS == className } diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt index f7dec9a2..f697c31e 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsClientTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.undertow import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object UndertowWsClientTransformer : TransformerObject, AbstractWsTransformerObject() +actual object UndertowWsClientTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt index 67f99e63..7e300fe9 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsMessagesTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.undertow import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object UndertowWsMessagesTransformer : TransformerObject, AbstractWsTransformerObject() +actual object UndertowWsMessagesTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt index f8923a52..cbd7ebd2 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/instrument/undertow/UndertowWsServerTransformer.kt @@ -16,7 +16,6 @@ package com.epam.drill.agent.instrument.undertow import com.epam.drill.agent.instrument.AbstractWsTransformerObject -import com.epam.drill.agent.instrument.JvmTransformerObject -import com.epam.drill.agent.instrument.TransformerObject +import com.epam.drill.agent.instrument.Transformer -actual object UndertowWsServerTransformer : TransformerObject, AbstractWsTransformerObject() +actual object UndertowWsServerTransformer : Transformer, AbstractWsTransformerObject() diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/ClassFileLoadHook.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/ClassFileLoadHook.kt index 3db54803..248af6f8 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/ClassFileLoadHook.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/ClassFileLoadHook.kt @@ -15,8 +15,7 @@ */ package com.epam.drill.agent.jvmti -import com.epam.drill.agent.instrument.servers.* -import com.epam.drill.agent.instrument.TransformerRegistrar +import com.epam.drill.agent.instrument.CompositeTransformer import com.epam.drill.agent.jvmapi.gen.Allocate import com.epam.drill.agent.jvmapi.gen.jint import com.epam.drill.agent.jvmapi.gen.jintVar @@ -24,7 +23,6 @@ import com.epam.drill.agent.jvmapi.gen.jobject import io.ktor.utils.io.bits.* import kotlinx.cinterop.* import mu.KotlinLogging -import org.objectweb.asm.ClassReader import kotlin.concurrent.AtomicInt import kotlinx.cinterop.ExperimentalForeignApi @@ -48,42 +46,25 @@ object ClassFileLoadHook { initRuntimeIfNeeded() val kClassName = clsName?.toKString() ?: return val kClassData = classData ?: return - val precheckedTransformers = TransformerRegistrar.enabledTransformers - .filterNot { kClassName.startsWith(DRILL_PACKAGE) } - .filter { it.precheck(kClassName, loader, protectionDomain) } - .takeIf { it.any() } - ?: return + if (kClassName.startsWith(DRILL_PACKAGE)) return + if (!CompositeTransformer.precheck(kClassName, loader, protectionDomain)) return - val (oldClassBytes, reader) = runCatching { + val oldClassBytes = runCatching { val classBytes = ByteArray(classDataLen).apply { Memory.of(kClassData, classDataLen).loadByteArray(0, this) } - classBytes to ClassReader(classBytes) + classBytes }.onFailure { logger.error(it) { "Can't read class: $kClassName" } }.getOrNull() ?: return - val permittedTransformers = precheckedTransformers.filter { - it.permit( - kClassName, - reader.superName, - reader.interfaces - ) - } - - val newClassBytes = permittedTransformers.fold(oldClassBytes) { bytes, transformer -> - runCatching { - transformer.transform(kClassName, bytes, loader, protectionDomain) - }.onFailure { - logger.warn(it) { "Can't transform class: $kClassName with ${transformer::class.simpleName}" } - }.getOrNull() - ?.takeIf { it !== bytes } - ?.also { - logger.debug { "$kClassName was transformed by ${transformer::class.simpleName}" } - } ?: bytes - } + val newClassBytes = runCatching { + CompositeTransformer.transform(kClassName, oldClassBytes, loader, protectionDomain) + }.onFailure { + logger.warn(it) { "Can't transform class: $kClassName" } + }.getOrNull() ?: return - if (newClassBytes !== oldClassBytes) { + if (!newClassBytes.contentEquals(oldClassBytes)) { totalTransformClass.addAndGet(1).takeIf { it % 100 == 0 }?.let { logger.debug { "At least $it classes were transformed" } } @@ -106,19 +87,4 @@ object ClassFileLoadHook { newClassDataLen!!.pointed.value = instrumentedSize } - @OptIn(ExperimentalForeignApi::class) - private fun isBootstrapClassLoading(loader: jobject?, protectionDomain: jobject?) = - loader == null || protectionDomain == null - - @OptIn(ExperimentalForeignApi::class) - private fun isTTLCandidate( - kClassName: String, - superName: String, - interfaces: Collection, - ) = kClassName in TTLTransformer.directTtlClasses - || (kClassName != TTLTransformer.timerTaskClass - && (TTLTransformer.runnableInterface in interfaces - || superName == TTLTransformer.poolExecutor)) - && !kClassName.startsWith(TTLTransformer.jdkInternal) - } diff --git a/settings.gradle.kts b/settings.gradle.kts index 1bee3210..da3085cc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -39,14 +39,12 @@ includeSharedLib("agent-config") includeSharedLib("agent-transport") includeSharedLib("agent-instrumentation") includeSharedLib("jvmapi") -includeSharedLib("knasm") includeSharedLib("konform") includeSharedLib("transmittable-thread-local") // FYI: Interceptor not patched for macOS ARM64 architecture. //includeSharedLib("interceptor-hook") //includeSharedLib("interceptor-http") includeSharedLib("interceptor-stub") -includeSharedLib("dsm-annotations") includeSharedLib("test2code-common") include("test2code-jacoco") include("test2code")