fun buildClassHierarchy()

in intellij-plugin-verifier/verifier-core/src/main/java/com/jetbrains/pluginverifier/verifiers/hierarchy/ClassHierarchyBuilder.kt [14:45]


  fun buildClassHierarchy(classFile: ClassFile): ClassHierarchy {
    val className2Hierarchy = hashMapOf<String, ClassHierarchy>()

    val parentsVisitor = ClassParentsVisitor(true) { subclassFile, superName ->
      context.classResolver.resolveClassChecked(superName, subclassFile, context)
    }
    parentsVisitor.visitClass(
      classFile,
      true,
      onEnter = { parent ->
        className2Hierarchy[parent.name] = ClassHierarchy(
          parent.name,
          parent.isInterface,
          null,
          emptyList()
        )
        true
      },
      onExit = { parent ->
        val classHierarchy = className2Hierarchy[parent.name]!!

        val superName = parent.superName
        if (superName != null) {
          classHierarchy.superClass = className2Hierarchy[superName]
        }

        classHierarchy.superInterfaces = parent.interfaces.mapNotNull { className2Hierarchy[it] }
      }
    )

    return className2Hierarchy[classFile.name]!!
  }