in hot-reload-analysis/src/main/kotlin/org/jetbrains/compose/reload/analysis/ClassInfo.kt [30:65]
fun ClassInfo(classNode: ClassNode): ClassInfo? {
val classId = ClassId(classNode)
if (classId.isIgnored) return null
val methods = classNode.methods.mapNotNull { methodNode ->
MethodInfo(
methodId = MethodId(classNode, methodNode),
methodType = MethodType(methodNode),
rootScope = ScopeInfo(classNode, methodNode),
modality = when {
methodNode.access and Opcodes.ACC_FINAL != 0 -> MethodInfo.Modality.FINAL
methodNode.access and Opcodes.ACC_ABSTRACT != 0 -> MethodInfo.Modality.ABSTRACT
else -> MethodInfo.Modality.OPEN
}
)
}.associateByTo(hashMapOf()) { it.methodId }.toReadOnlyHashMap()
val fields = classNode.fields.associateTo(hashMapOf()) { fieldNode ->
FieldId(classNode, fieldNode) to FieldInfo(
fieldId = FieldId(classNode, fieldNode),
isStatic = fieldNode.access and (Opcodes.ACC_STATIC) != 0,
initialValue = fieldNode.value,
additionalChangeIndicatorHash = getResourceContentHash(fieldNode)
)
}.toReadOnlyHashMap()
return ClassInfo(
classId = classId,
fields = fields,
methods = methods,
superClass = classNode.superName?.let(::ClassId),
superInterfaces = classNode.interfaces.map(::ClassId),
flags = ClassFlags(classNode.access),
sourceFile = classNode.sourceFile,
)
}