mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-10-03 22:29:30 +00:00
61 lines
1.7 KiB
Kotlin
61 lines
1.7 KiB
Kotlin
package dev.inmo.micro_ksp.generator
|
|
|
|
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
|
import com.google.devtools.ksp.symbol.KSDeclaration
|
|
import com.google.devtools.ksp.symbol.KSFile
|
|
import com.google.devtools.ksp.symbol.KSFunctionDeclaration
|
|
import com.squareup.kotlinpoet.FileSpec
|
|
import java.io.File
|
|
|
|
fun KSDeclaration.writeFile(
|
|
prefix: String = "",
|
|
suffix: String = "",
|
|
relatedPath: String = "",
|
|
force: Boolean = false,
|
|
forceUppercase: Boolean = true,
|
|
fileSpecBuilder: () -> FileSpec
|
|
) {
|
|
val containingFile = containingFile!!
|
|
val simpleName = if (forceUppercase) {
|
|
val rawSimpleName = simpleName.asString()
|
|
rawSimpleName.replaceFirst(rawSimpleName.first().toString(), rawSimpleName.first().uppercase())
|
|
} else {
|
|
simpleName.asString()
|
|
}
|
|
File(
|
|
File(
|
|
File(containingFile.filePath).parent,
|
|
relatedPath
|
|
),
|
|
"$prefix${simpleName}$suffix.kt"
|
|
).takeIf { force || !it.exists() } ?.apply {
|
|
parentFile.mkdirs()
|
|
val fileSpec = fileSpecBuilder()
|
|
writer().use { writer ->
|
|
fileSpec.writeTo(writer)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun KSFile.writeFile(
|
|
prefix: String = "",
|
|
suffix: String = "",
|
|
relatedPath: String = "",
|
|
force: Boolean = false,
|
|
fileSpecBuilder: () -> FileSpec
|
|
) {
|
|
File(
|
|
File(
|
|
File(filePath).parent,
|
|
relatedPath
|
|
),
|
|
"$prefix${fileName.dropLastWhile { it != '.' }.removeSuffix(".")}$suffix.kt"
|
|
).takeIf { force || !it.exists() } ?.apply {
|
|
parentFile.mkdirs()
|
|
val fileSpec = fileSpecBuilder()
|
|
writer().use { writer ->
|
|
fileSpec.writeTo(writer)
|
|
}
|
|
}
|
|
}
|