You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.7 KiB
51 lines
1.7 KiB
import org.gradle.api.DefaultTask |
|
import org.gradle.api.file.DirectoryProperty |
|
import org.gradle.api.provider.MapProperty |
|
import org.gradle.api.provider.Property |
|
import org.gradle.api.tasks.Input |
|
import org.gradle.api.tasks.OutputDirectory |
|
import org.gradle.api.tasks.TaskAction |
|
import org.gradle.kotlin.dsl.mapProperty |
|
import org.gradle.kotlin.dsl.property |
|
|
|
/* |
|
* Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. |
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. |
|
*/ |
|
|
|
open class GenerateBuildConfig : DefaultTask() { |
|
@get:Input |
|
val fieldsToGenerate: MapProperty<String, Any> = project.objects.mapProperty() |
|
|
|
@get:Input |
|
val classFqName: Property<String> = project.objects.property() |
|
|
|
@get:OutputDirectory |
|
val generatedOutputDir: DirectoryProperty = project.objects.directoryProperty() |
|
|
|
@TaskAction |
|
fun execute() { |
|
val dir = generatedOutputDir.get().asFile |
|
dir.deleteRecursively() |
|
dir.mkdirs() |
|
|
|
val fqName = classFqName.get() |
|
val parts = fqName.split(".") |
|
val className = parts.last() |
|
val file = dir.resolve("$className.kt") |
|
val content = buildString { |
|
if (parts.size > 1) { |
|
appendLine("package ${parts.dropLast(1).joinToString(".")}") |
|
} |
|
|
|
appendLine() |
|
appendLine("/* GENERATED, DO NOT EDIT MANUALLY! */") |
|
appendLine("object $className {") |
|
for ((k, v) in fieldsToGenerate.get().entries.sortedBy { it.key }) { |
|
appendLine("const val $k = ${if (v is String) "\"$v\"" else v.toString()}") |
|
} |
|
appendLine("}") |
|
} |
|
file.writeText(content) |
|
} |
|
} |