fun ClassInfo()

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,
    )
}