All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.avito.android.critical_path.CriticalPathPlugin.kt Maven / Gradle / Ivy

package com.avito.android.critical_path

import com.avito.android.critical_path.internal.CriticalPathReport
import com.avito.android.critical_path.internal.CriticalPathWriter
import com.avito.kotlin.dsl.isRoot
import org.gradle.api.Plugin
import org.gradle.api.Project

public abstract class CriticalPathPlugin : Plugin {

    override fun apply(project: Project) {
        check(project.isRoot()) {
            "Plugin must be applied to the root project but was applied to ${project.path}"
        }
        val extension = project.extensions.create(extensionName, CriticalPathExtension::class.java)

        project.afterEvaluate {
            registerListeners(project, extension)
        }
    }

    private fun registerListeners(project: Project, extension: CriticalPathExtension) {
        val isEnabled = extension.enabled.getOrElse(false)
        if (!isEnabled) return

        val reportWriter = createReportWriter(project, extension)

        CriticalPathRegistry.addListener(project, reportWriter)
    }

    private fun createReportWriter(project: Project, extension: CriticalPathExtension): CriticalPathWriter {
        val outputDir = extension.output.convention(
            project.layout.buildDirectory.dir("reports/critical-path")
        )
        val report = CriticalPathReport(
            report = outputDir.file("critical_path.json").get().asFile,
        )
        return CriticalPathWriter(report)
    }
}

internal const val extensionName = "criticalPath"




© 2015 - 2025 Weber Informatics LLC | Privacy Policy