in jvm-agent/src/main/org/jetbrains/lincheck/jvm/agent/LincheckClassFileTransformer.kt [47:78]
override fun transform(
loader: ClassLoader?,
internalClassName: String?,
classBeingRedefined: Class<*>?,
protectionDomain: ProtectionDomain?,
classBytes: ByteArray
): ByteArray? = runInsideIgnoredSection {
if (classBeingRedefined != null) {
require(internalClassName != null) {
"Internal class name of redefined class ${classBeingRedefined.name} must not be null"
}
}
// Internal class name could be `null` in some cases (can be witnessed on JDK-8),
// this can be related to the Kotlin compiler bug:
// - https://youtrack.jetbrains.com/issue/KT-16727/
if (internalClassName == null) return null
// If the class should not be transformed, return immediately.
if (!shouldTransform(internalClassName.toCanonicalClassName(), instrumentationMode)) {
return null
}
// If lazy mode is used, transform classes lazily,
// once they are used in the testing code.
if (instrumentationStrategy == InstrumentationStrategy.LAZY &&
// do not re-transform already instrumented classes
internalClassName.toCanonicalClassName() !in instrumentedClasses &&
// always transform eagerly instrumented classes
!isEagerlyInstrumentedClass(internalClassName.toCanonicalClassName())
) {
return null
}
return transformImpl(loader, internalClassName, classBytes)
}