override fun safeAction()

in gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/GenerateResourceCollectorsTask.kt [69:118]


    override fun safeAction() {
        val kotlinDir = codeDir.get().asFile
        val inputDirs = resourceAccessorDirs.files

        logger.info("Clean directory $kotlinDir")
        kotlinDir.deleteRecursively()
        kotlinDir.mkdirs()

        val inputFiles = inputDirs.flatMap { dir ->
            dir.walkTopDown().filter { !it.isHidden && it.isFile && it.extension == "kt" }.toList()
        }
        logger.info("Generate actual ResourceCollectors for $kotlinDir")
        val funNames = inputFiles.mapNotNull { inputFile ->
            if (inputFile.nameWithoutExtension.contains('.')) {
                val (fileName, suffix) = inputFile.nameWithoutExtension.split('.')
                val type = ResourceType.entries.firstOrNull { fileName.startsWith(it.accessorName, true) }
                val name = "_collect${suffix.uppercaseFirstChar()}${fileName}Resources"

                if (type == null) {
                    logger.warn("Unknown resources type: `$inputFile`")
                    null
                } else if (!inputFile.readText().contains(name)) {
                    logger.warn("A function '$name' is not found in the `$inputFile` file!")
                    null
                } else {
                    logger.info("Found collector function: `$name`")
                    type to name
                }
            } else {
                logger.warn("Unknown file name: `$inputFile`")
                null
            }
        }
            .groupBy({ it.first }, { it.second })
            .mapValues { (_, values) -> values.sorted() }

        val pkgName = packageName.get()
        val resClassName = resClassName.get()
        val isPublic = makeAccessorsPublic.get()
        val useActual = useActualModifier.get()
        val spec = getActualResourceCollectorsFileSpec(
            packageName = pkgName,
            fileName = "ActualResourceCollectors",
            resClassName = resClassName,
            isPublic = isPublic,
            useActualModifier = useActual,
            typeToCollectorFunctions = funNames
        )
        spec.writeTo(kotlinDir)
    }