diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 24065854..0db773ba 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -4,23 +4,7 @@ on: push: branches: - 'main' - - 'release/*' - - 'adoption/*' - paths: - - '**/src/**' - - '**.gradle.kts' - - 'gradle.properties' pull_request: - branches: - - 'main' - - 'release/*' - - 'adoption/*' - - 'feature/*' - paths: - - '**/src/**' - - '**.gradle.kts' - - 'gradle.properties' - jobs: check: strategy: @@ -30,21 +14,22 @@ jobs: - {os: ubuntu-latest, preset: linuxX64} - {os: windows-latest, preset: mingwX64} - {os: macos-12, preset: macosX64} + - {os: macos-14, preset: macosArm64} runs-on: ${{ matrix.config.os }} steps: - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: - java-version: 8.0 + java-version: 8 distribution: zulu - uses: gradle/wrapper-validation-action@v1 - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: chmod +x ${{ github.workspace }}/gradlew - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: chmod +x ${{ github.workspace }}/setup-shared-libs.sh - if: matrix.config.preset == 'linuxX64' run: sudo apt-get install -y libtinfo5 - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: ${{ github.workspace }}/setup-shared-libs.sh - if: matrix.config.preset == 'mingwX64' run: ${{ github.workspace }}/setup-shared-libs.bat diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index db4b8491..1fe06f29 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,6 +15,7 @@ jobs: - {os: ubuntu-latest, preset: linuxX64} - {os: windows-latest, preset: mingwX64} - {os: macos-12, preset: macosX64} + - {os: macos-14, preset: macosArm64} runs-on: ${{ matrix.config.os }} steps: - uses: actions/checkout@v3 @@ -23,13 +24,13 @@ jobs: java-version: 8.0 distribution: zulu - uses: gradle/wrapper-validation-action@v1 - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: chmod +x ${{ github.workspace }}/gradlew - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: chmod +x ${{ github.workspace }}/setup-shared-libs.sh - if: matrix.config.preset == 'linuxX64' run: sudo apt-get install -y libtinfo5 - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: ${{ github.workspace }}/setup-shared-libs.sh - if: matrix.config.preset == 'mingwX64' run: ${{ github.workspace }}/setup-shared-libs.bat @@ -78,6 +79,7 @@ jobs: - {os: ubuntu-latest, preset: linuxX64} - {os: windows-latest, preset: mingwX64} - {os: macos-12, preset: macosX64} + - {os: macos-14, preset: macosArm64} runs-on: ${{ matrix.config.os }} outputs: tag: ${{ needs.release.outputs.tag }} @@ -90,13 +92,13 @@ jobs: java-version: 8.0 distribution: zulu - uses: gradle/wrapper-validation-action@v1 - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: chmod +x ${{ github.workspace }}/gradlew - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: chmod +x ${{ github.workspace }}/setup-shared-libs.sh - if: matrix.config.preset == 'linuxX64' run: sudo apt-get install -y libtinfo5 - - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' + - if: matrix.config.preset == 'linuxX64' || matrix.config.preset == 'macosX64' || matrix.config.preset == 'macosArm64' run: ${{ github.workspace }}/setup-shared-libs.sh - if: matrix.config.preset == 'mingwX64' run: ${{ github.workspace }}/setup-shared-libs.bat diff --git a/gradle.properties b/gradle.properties index 697dc73f..df7e52d0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,12 @@ -kotlinVersion = 1.5.31 +kotlinVersion = 1.9.20 licenseVersion = 0.16.1 publishVersion = 1.1.0 -kotlinxCollectionsVersion = 0.3.4 +kotlinxCollectionsVersion = 0.3.5 kotlinxCoroutinesVersion = 1.5.2-native-mt kotlinxSerializationVersion = 1.3.1 -atomicfuVersion = 0.16.3 +atomicfuVersion = 0.23.0 grgitVersion = 4.1.1 -ktorVersion = 1.6.3 +ktorVersion = 1.6.8 bcelVersion = 6.6.0 kotlinPoetVersion = 1.9.0 javassistVersion = 3.28.0-GA @@ -15,7 +15,7 @@ jacocoVersion = 0.8.12 transmittableThreadLocalVersion = 2.12.2 shadowPluginVersion = 6.1.0 logbackVersion = 1.2.12 -microutilsLoggingVersion = 2.0.11 +microutilsLoggingVersion = 2.1.23 apacheHttpClientVersion = 5.2.3 aesyDatasizeVersion = 1.0.0 bytebuddyVersion = 1.14.11 @@ -33,9 +33,8 @@ org.gradle.workers.max = 4 kotlin.code.style = official kotlin.native.enableParallelExecutionCheck = false -kotlin.native.enableDependencyPropagation = false kotlin.native.ignoreDisabledTargets = true kotlin.native.cacheKind = none kotlin.mpp.stability.nowarn = true -kotlin.mpp.enableGranularSourceSetsMetadata = true kotlin.mpp.enableCInteropCommonization = true +kotlin.mpp.applyDefaultHierarchyTemplate=false \ No newline at end of file diff --git a/java-agent/build.gradle.kts b/java-agent/build.gradle.kts index 604b4300..5e774c0e 100644 --- a/java-agent/build.gradle.kts +++ b/java-agent/build.gradle.kts @@ -8,6 +8,7 @@ import org.jetbrains.kotlin.konan.target.presetName import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import com.hierynomus.gradle.license.tasks.LicenseCheck import com.hierynomus.gradle.license.tasks.LicenseFormat +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @Suppress("RemoveRedundantBackticks") plugins { @@ -45,19 +46,24 @@ kotlin { compilations["test"].cinterops.create("test_stubs") binaries.sharedLib(nativeAgentLibName, setOf(DEBUG)) } - targets { - jvm() - linuxX64(configure = configureNativeTarget) - mingwX64(configure = configureNativeTarget).apply { + jvm() + linuxX64(configure = configureNativeTarget) + mingwX64(configure = configureNativeTarget).apply { + binaries.all { + linkerOpts("-lpsapi", "-lwsock32", "-lws2_32", "-lmswsock") + } + } + macosX64(configure = configureNativeTarget).apply { + if (macosLd64.toBoolean()) { binaries.all { - linkerOpts("-lpsapi", "-lwsock32", "-lws2_32", "-lmswsock") + linkerOpts("-ld64") } } - macosX64(configure = configureNativeTarget).apply { - if(macosLd64.toBoolean()){ - binaries.all { - linkerOpts("-ld64") - } + } + macosArm64(configure = configureNativeTarget).apply { + if (macosLd64.toBoolean()) { + binaries.all { + linkerOpts("-ld64") } } } @@ -127,12 +133,7 @@ kotlin { val linuxX64Main by getting(configuration = configureNativeDependencies) val mingwX64Main by getting(configuration = configureNativeDependencies) val macosX64Main by getting(configuration = configureNativeDependencies) - mingwX64Main.dependencies { - implementation(project(":logging-native")) - } - macosX64Main.dependencies { - implementation(project(":logging-native")) - } + val macosArm64Main by getting(configuration = configureNativeDependencies) } tasks { val filterOutCurrentPlatform: (KotlinNativeTarget) -> Boolean = { @@ -145,7 +146,7 @@ kotlin { from("src/native${it.compilationName.capitalize()}/kotlin") into("src/${it.target.targetName}${it.compilationName.capitalize()}/kotlin/gen") } - it.compileKotlinTask.dependsOn(copyNativeClasses.get()) + it.compileTaskProvider.get().dependsOn(copyNativeClasses.get()) } val cleanNativeClassesTask: (KotlinCompilation<*>) -> Unit = { val taskName = "cleanNativeClasses${it.target.targetName.capitalize()}${it.compilationName.capitalize()}" @@ -194,7 +195,7 @@ kotlin { exclude("/ch/qos/logback/classic/servlet/*") } } - runtimeJar.get().dependsOn(jvmMainCompilation.compileKotlinTask) + runtimeJar.get().dependsOn(jvmMainCompilation.compileTaskProvider.get()) } } 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 8ad8b43a..fdf5d9bf 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 @@ -36,6 +36,8 @@ import com.epam.drill.agent.request.HeadersRetriever import com.epam.drill.agent.request.DrillRequestHolder import com.epam.drill.agent.transport.JvmModuleMessageSender import com.epam.drill.jvmapi.gen.* +import kotlinx.cinterop.ExperimentalForeignApi +import kotlin.experimental.ExperimentalNativeApi object Agent { @@ -52,6 +54,7 @@ object Agent { private val logger = KotlinLogging.logger("com.epam.drill.agent.Agent") + @OptIn(ExperimentalNativeApi::class, ExperimentalForeignApi::class) fun agentOnLoad(options: String): Int { println(logo) AgentLoggingConfiguration.defaultNativeLoggingConfiguration() @@ -72,6 +75,7 @@ object Agent { logger.info { "agentOnUnload: Java Agent has been unloaded." } } + @OptIn(ExperimentalForeignApi::class) fun agentOnVmInit() { initRuntimeIfNeeded() SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_CLASS_FILE_LOAD_HOOK, null) @@ -91,6 +95,7 @@ object Agent { logger.debug { "agentOnVmDeath" } } + @OptIn(ExperimentalForeignApi::class) private fun addCapabilities() = memScoped { val jvmtiCapabilities = alloc() jvmtiCapabilities.can_retransform_classes = 1.toUInt() @@ -98,6 +103,7 @@ object Agent { AddCapabilities(jvmtiCapabilities.ptr) } + @OptIn(ExperimentalForeignApi::class) private fun setEventCallbacks() = memScoped { val alloc = alloc() alloc.VMInit = staticCFunction(::vmInitEvent) diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/configuration/AgentLoggingConfiguration.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/configuration/AgentLoggingConfiguration.kt index 5f7185c6..6154c1c4 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/configuration/AgentLoggingConfiguration.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/configuration/AgentLoggingConfiguration.kt @@ -21,6 +21,7 @@ import com.epam.drill.jvmapi.callObjectVoidMethod import com.epam.drill.jvmapi.callObjectVoidMethodWithInt import com.epam.drill.jvmapi.callObjectVoidMethodWithString import com.epam.drill.logging.LoggingConfiguration +import kotlinx.cinterop.ExperimentalForeignApi object AgentLoggingConfiguration { @@ -46,6 +47,7 @@ object AgentLoggingConfiguration { callObjectVoidMethod(LoggingConfiguration::class, LoggingConfiguration::readDefaultConfiguration) } + @OptIn(ExperimentalForeignApi::class) fun updateJvmLoggingConfiguration() { val logLevel = Configuration.parameters[ParameterDefinitions.LOG_LEVEL] val logFile = Configuration.parameters[ParameterDefinitions.LOG_FILE].takeIf(String::isNotEmpty) diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/configuration/Configuration.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/configuration/Configuration.kt index 867b8483..a5ce2cac 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/configuration/Configuration.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/configuration/Configuration.kt @@ -15,7 +15,7 @@ */ package com.epam.drill.agent.configuration -import kotlin.native.concurrent.AtomicReference +import kotlin.concurrent.AtomicReference import kotlin.native.concurrent.freeze import mu.KotlinLogging import com.epam.drill.agent.configuration.provider.AgentOptionsProvider 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 57c59ea0..a724e384 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 @@ -43,7 +43,8 @@ import io.ktor.utils.io.bits.* import kotlinx.cinterop.* import mu.KotlinLogging import org.objectweb.asm.ClassReader -import kotlin.native.concurrent.AtomicInt +import kotlin.concurrent.AtomicInt +import kotlinx.cinterop.ExperimentalForeignApi object ClassFileLoadHook { @@ -81,6 +82,7 @@ object ClassFileLoadHook { private val totalTransformClass = AtomicInt(0) + @OptIn(ExperimentalForeignApi::class) operator fun invoke( loader: jobject?, clsName: CPointer?, @@ -198,6 +200,7 @@ object ClassFileLoadHook { } } + @OptIn(ExperimentalForeignApi::class) private fun convertToNativePointers( instrumentedBytes: ByteArray, newData: CPointer>?, @@ -212,9 +215,11 @@ 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, diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/JvmtiEvents.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/JvmtiEvents.kt index d8c1431d..b4573caa 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/JvmtiEvents.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/JvmtiEvents.kt @@ -27,13 +27,17 @@ import com.epam.drill.jvmapi.gen.jintVar import com.epam.drill.jvmapi.gen.jobject import com.epam.drill.jvmapi.gen.jthread import com.epam.drill.jvmapi.gen.jvmtiEnvVar +import kotlinx.cinterop.ExperimentalForeignApi +@OptIn(ExperimentalForeignApi::class) @Suppress("unused_parameter") fun vmInitEvent(env: CPointer?, jniEnv: CPointer?, thread: jthread?) = Agent.agentOnVmInit() +@OptIn(ExperimentalForeignApi::class) @Suppress("unused_parameter") fun vmDeathEvent(jvmtiEnv: CPointer?, jniEnv: CPointer?) = Agent.agentOnVmDeath() +@OptIn(ExperimentalForeignApi::class) @Suppress("unused_parameter") fun classFileLoadHook( jvmtiEnv: CPointer?, diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/JvmtiLoad.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/JvmtiLoad.kt index db78a24c..03dd47e5 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/JvmtiLoad.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/jvmti/JvmtiLoad.kt @@ -36,9 +36,12 @@ import com.epam.drill.jvmapi.gen.jvmtiEnvVar import com.epam.drill.jvmapi.gen.jvmtiError import com.epam.drill.jvmapi.jvmti import com.epam.drill.jvmapi.vmGlobal +import kotlinx.cinterop.ExperimentalForeignApi +import kotlin.experimental.ExperimentalNativeApi @Suppress("unused_parameter") @CName("Agent_OnLoad") +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) fun agentOnLoad(vmPointer: CPointer, options: String, reservedPtr: Long): Int = memScoped { vmGlobal.value = vmPointer.freeze() val vm = vmPointer.pointed @@ -50,16 +53,21 @@ fun agentOnLoad(vmPointer: CPointer, options: String, reservedPtr: Lo @Suppress("unused_parameter") @CName("Agent_OnUnload") +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) fun agentOnUnload(vmPointer: CPointer) = Agent.agentOnUnload() @CName("checkEx") +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) fun checkEx(errCode: jvmtiError, funName: String) = checkEx(errCode, funName) +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) @CName("currentEnvs") fun currentEnvs() = env +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) @CName("jvmtii") fun jvmtii() = jvmti.value +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) @CName("getJvm") fun getJvm() = vmGlobal.value diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/GenericAgentModule.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/GenericAgentModule.kt index be8e86a0..755c7e9d 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/GenericAgentModule.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/GenericAgentModule.kt @@ -26,7 +26,9 @@ import com.epam.drill.jvmapi.gen.CallVoidMethod import com.epam.drill.jvmapi.gen.GetMethodID import com.epam.drill.jvmapi.gen.jclass import com.epam.drill.jvmapi.gen.jobject +import kotlinx.cinterop.ExperimentalForeignApi +@OptIn(ExperimentalForeignApi::class) open class GenericAgentModule( moduleId: String, moduleClass: jclass, diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/InstrumentationAgentModule.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/InstrumentationAgentModule.kt index cbbde08d..736d5070 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/InstrumentationAgentModule.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/InstrumentationAgentModule.kt @@ -24,7 +24,9 @@ import com.epam.drill.jvmapi.gen.jclass import com.epam.drill.jvmapi.gen.jobject import com.epam.drill.jvmapi.toByteArray import com.epam.drill.jvmapi.toJByteArray +import kotlinx.cinterop.ExperimentalForeignApi +@OptIn(ExperimentalForeignApi::class) class InstrumentationAgentModule( moduleId: String, moduleClass: jclass, diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/JvmModuleLoader.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/JvmModuleLoader.kt index c23933d9..d0440df7 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/JvmModuleLoader.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/JvmModuleLoader.kt @@ -22,9 +22,11 @@ import com.epam.drill.jvmapi.gen.GetObjectClass import com.epam.drill.jvmapi.gen.NewGlobalRef import com.epam.drill.jvmapi.gen.NewStringUTF import com.epam.drill.jvmapi.getObjectMethod +import kotlinx.cinterop.ExperimentalForeignApi actual object JvmModuleLoader { + @OptIn(ExperimentalForeignApi::class) actual fun loadJvmModule(classname: String): AgentModule = callObjectAgentModuleMethodWithString( JvmModuleLoader::class, @@ -36,6 +38,7 @@ actual object JvmModuleLoader { InstrumentationAgentModule(classname, moduleClass, moduleRef).also { JvmModuleStorage.add(it) } } + @OptIn(ExperimentalForeignApi::class) private fun callObjectAgentModuleMethodWithString(clazz: KClass, method: String, string: String?) = getObjectMethod(clazz, method, "(Ljava/lang/String;)Lcom/epam/drill/common/agent/module/AgentModule;").run { CallObjectMethod(this.first, this.second, string?.let(::NewStringUTF)) diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/request/jvm/HeadersRetrieverExternal.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/request/jvm/HeadersRetrieverExternal.kt index 9e3cbe86..80f77a89 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/request/jvm/HeadersRetrieverExternal.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/request/jvm/HeadersRetrieverExternal.kt @@ -20,27 +20,34 @@ import com.epam.drill.jvmapi.callNativeStringMethod import com.epam.drill.jvmapi.gen.JNIEnv import com.epam.drill.jvmapi.gen.jobject import com.epam.drill.jvmapi.gen.jstring +import kotlinx.cinterop.ExperimentalForeignApi +import kotlin.experimental.ExperimentalNativeApi +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) @Suppress("UNUSED") @CName("Java_com_epam_drill_agent_request_HeadersRetriever_adminAddressHeader") fun adminAddressHeader(env: JNIEnv, thiz: jobject): jstring? = callNativeStringMethod(env, thiz, HeadersRetriever::adminAddressHeader) +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) @Suppress("UNUSED") @CName("Java_com_epam_drill_agent_request_HeadersRetriever_adminAddressValue") fun retrieveAdminAddress(env: JNIEnv, thiz: jobject): jstring? = callNativeStringMethod(env, thiz, HeadersRetriever::adminAddressValue) +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) @Suppress("UNUSED") @CName("Java_com_epam_drill_agent_request_HeadersRetriever_sessionHeader") fun sessionHeaderPattern(env: JNIEnv, thiz: jobject): jstring? = callNativeStringMethod(env, thiz, HeadersRetriever::sessionHeader) +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) @Suppress("UNUSED") @CName("Java_com_epam_drill_agent_request_HeadersRetriever_agentIdHeader") fun idHeaderConfigKey(env: JNIEnv, thiz: jobject): jstring? = callNativeStringMethod(env, thiz, HeadersRetriever::agentIdHeader) +@OptIn(ExperimentalForeignApi::class, ExperimentalNativeApi::class) @Suppress("UNUSED") @CName("Java_com_epam_drill_agent_request_HeadersRetriever_agentIdHeaderValue") fun idHeaderConfigValue(env: JNIEnv, thiz: jobject): jstring? = diff --git a/settings.gradle.kts b/settings.gradle.kts index 48baafc2..59dab070 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -34,7 +34,6 @@ val includeSharedLib: Settings.(String) -> Unit = { project(":$it").projectDir = file(sharedLibsLocalPath).resolve(it) } -includeSharedLib("logging-native") includeSharedLib("logging") includeSharedLib("common") includeSharedLib("agent-config") @@ -43,8 +42,9 @@ includeSharedLib("agent-instrumentation") includeSharedLib("jvmapi") includeSharedLib("knasm") includeSharedLib("konform") -includeSharedLib("interceptor-hook") -includeSharedLib("interceptor-http") +// FYI: Interceptor not patched for macOS ARM64 architecture. +//includeSharedLib("interceptor-hook") +//includeSharedLib("interceptor-http") includeSharedLib("interceptor-stub") includeSharedLib("dsm-annotations") includeSharedLib("test2code-common") diff --git a/test2code/build.gradle.kts b/test2code/build.gradle.kts index e9edb725..801e1784 100644 --- a/test2code/build.gradle.kts +++ b/test2code/build.gradle.kts @@ -7,7 +7,6 @@ plugins { kotlin("jvm") kotlin("plugin.noarg") kotlin("plugin.serialization") - id("kotlinx-atomicfu") id("com.github.hierynomus.license") } @@ -18,7 +17,6 @@ val kotlinxCollectionsVersion: String by parent!!.extra val kotlinxCoroutinesVersion: String by parent!!.extra val kotlinxSerializationVersion: String by parent!!.extra val jacocoVersion: String by parent!!.extra -val atomicfuVersion: String by parent!!.extra val bcelVersion: String by parent!!.extra val microutilsLoggingVersion: String by parent!!.extra val logbackVersion: String by parent!!.extra @@ -35,8 +33,6 @@ java { dependencies { - compileOnly("org.jetbrains.kotlinx:atomicfu:$atomicfuVersion") - implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:$kotlinxCollectionsVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinxCoroutinesVersion") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxSerializationVersion") diff --git a/test2code/src/main/kotlin/com/epam/drill/test2code/coverage/Instrumentation.kt b/test2code/src/main/kotlin/com/epam/drill/test2code/coverage/Instrumentation.kt index 31c8f43b..eff862d5 100644 --- a/test2code/src/main/kotlin/com/epam/drill/test2code/coverage/Instrumentation.kt +++ b/test2code/src/main/kotlin/com/epam/drill/test2code/coverage/Instrumentation.kt @@ -19,14 +19,14 @@ import com.epam.drill.common.agent.module.* import com.epam.drill.jacoco.* import com.epam.drill.jacoco.BooleanArrayProbeInserter.* import com.epam.drill.test2code.classparsing.ProbeCounter -import kotlinx.atomicfu.* import org.jacoco.core.internal.data.CRC64 import org.jacoco.core.internal.flow.* import org.jacoco.core.internal.instr.* import org.objectweb.asm.* import mu.KotlinLogging +import java.util.concurrent.atomic.AtomicInteger -private val classCounter = atomic(0) +private val classCounter = AtomicInteger(0) class DrillInstrumenter( private val probesProxy: IProbesProxy,