fun generateReport()

in ruler-common/src/main/java/com/spotify/ruler/common/report/JsonReporter.kt [46:111]


    fun generateReport(
        appInfo: AppInfo,
        components: Map<DependencyComponent, List<AppFile>>,
        features: Map<String, List<AppFile>>,
        ownershipInfo: OwnershipInfo?,
        targetDir: File,
        omitFileBreakdown: Boolean,
    ): File {
        val report = AppReport(
            name = appInfo.applicationId,
            version = appInfo.versionName,
            variant = appInfo.variantName,
            downloadSize = components.values.flatten().sumOf(AppFile::downloadSize),
            installSize = components.values.flatten().sumOf(AppFile::installSize),
            components = components.map { (component, files) ->
                AppComponent(
                    name = component.name,
                    type = component.type,
                    downloadSize = files.sumOf(AppFile::downloadSize),
                    installSize = files.sumOf(AppFile::installSize),
                    owner = ownershipInfo?.getOwner(component.name, component.type),
                    files = if (omitFileBreakdown) {
                        null
                    } else {
                        files.map { file ->
                            AppFile(
                                name = file.name,
                                type = file.type,
                                downloadSize = file.downloadSize,
                                installSize = file.installSize,
                                owner = ownershipInfo?.getOwner(file.name, component.name, component.type),
                                resourceType = file.resourceType,
                            )
                        }.sortedWith(comparator.reversed())
                    }
                )
            }.sortedWith(comparator.reversed()),
            dynamicFeatures = features.map { (feature, files) ->
                DynamicFeature(
                    name = feature,
                    downloadSize = files.sumOf(AppFile::downloadSize),
                    installSize = files.sumOf(AppFile::installSize),
                    owner = ownershipInfo?.getOwner(feature),
                    files = if (omitFileBreakdown) {
                        null
                    } else {
                        files.map { file ->
                            AppFile(
                                name = file.name,
                                type = file.type,
                                downloadSize = file.downloadSize,
                                installSize = file.installSize,
                                owner = ownershipInfo?.getOwner(file.name, feature),
                                resourceType = file.resourceType,
                            )
                        }.sortedWith(comparator.reversed())
                    }
                )
            }.sortedWith(comparator.reversed()),
        )

        val format = Json { prettyPrint = false }
        val reportFile = targetDir.resolve("report.json")
        reportFile.writeText(format.encodeToString(report))
        return reportFile
    }