in src/jvm/main/org/jetbrains/kotlinx/lincheck/strategy/managed/ManagedStrategy.kt [1334:1367]
override fun afterReadField(
threadDescriptor: ThreadDescriptor,
codeLocation: Int,
obj: Any?,
fieldId: Int,
value: Any?
) = threadDescriptor.runInsideIgnoredSection {
val eventId = getNextEventId()
val threadId = threadScheduler.getCurrentThreadId()
val fieldDescriptor = context.getFieldDescriptor(fieldId)
if (fieldDescriptor.isStatic && value !== null && !value.isImmutable) {
LincheckJavaAgent.ensureClassHierarchyIsTransformed(value.javaClass)
}
if (collectTrace) {
val valueRepresentation = objectTracker.getObjectRepresentation(value)
val typeRepresentation = objectFqTypeName(value)
if (shouldTrackFieldAccess(obj, fieldDescriptor)) {
val tracePoint = ReadTracePoint(
context = context,
eventId = eventId,
iThread = threadId,
actorId = currentActorId[threadId]!!,
ownerRepresentation = findOwnerName(obj, fieldDescriptor.className, codeLocation),
fieldName = fieldDescriptor.fieldName,
codeLocation = codeLocation,
isLocal = false,
valueRepresentation = valueRepresentation,
valueType = typeRepresentation,
)
traceCollector?.addTracePointInternal(tracePoint)
}
}
loopDetector.afterRead(value)
}