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

tech.skot.tools.starter.BuildGradleGenerator.kt Maven / Gradle / Ivy

package tech.skot.tools.starter

import tech.skot.tools.generation.block

class BuildGradleGenerator {

    val publish = mutableListOf()
    fun publish(group:String, version:String) {
        publish.add("group = $group")
        publish.add("version = $version")
        publish.add("")
    }


    sealed class Repository(val name:String) {
        open fun generate() = listOf("$name")

        object Google:Repository("google()")
//        object JCenter:Repository("jcenter")
        object MavenLocal:Repository("mavenLocal()")
        object MavenCentral:Repository("mavenCentral()")
        class Maven(val uri:String):Repository("maven") {
            override fun generate()  = block("maven", listOf("url = uri(\"$uri\")"))
        }
    }

    fun List.repositories():List = block("repositories", flatMap { it.generate() })


    sealed class Plugin() {
        abstract fun generate():String
        class Kotlin(val module:String):Plugin() {
            override fun generate() = "kotlin(\"$module\")"
        }
        object KotlinDsl:Plugin() {
            override fun generate() = "`kotlin-dsl`"
        }
        class Id(val id:String, val version:String? = null):Plugin() {
            override fun generate() = "id(\"$id\")${version?.let { ".version(\"$it\")" } ?: ""}"
        }
    }

    fun List.plugins():List = block("plugins", map { it.generate() })


    private val rootPlugins = mutableListOf()

    fun plugin(plugin:Plugin) {
        rootPlugins.add(plugin)
    }

    private val rootRepositories = mutableListOf()
    fun repository(repository: Repository) {
        rootRepositories.add(repository)
    }

    var androidBlock:String? = null

    var manual:String? = null

    fun generate():List {
        val lines = mutableListOf()

        lines += publish

        if (rootPlugins.isNotEmpty()) {
            lines += rootPlugins.plugins() + ""
        }

        if (rootRepositories.isNotEmpty()) {
            lines += rootRepositories.repositories() + ""
        }

        androidBlock?.let {
            lines += it.split("\n")
        }

        manual?.let {
            lines += it.split("\n")
        }


        return lines
    }

}






© 2015 - 2025 Weber Informatics LLC | Privacy Policy