[FIR] Improve path usages in generator, provide default output

This commit is contained in:
Simon Ogorodnik
2019-11-29 16:16:17 +03:00
parent 5eb5d8e515
commit e5f60253f7
2 changed files with 15 additions and 18 deletions
@@ -11,11 +11,8 @@ import java.io.File
fun main(args: Array<String>) {
val generationPath = args.firstOrNull()?.let { if (!it.endsWith("/")) "$it/" else it }
if (generationPath == null) {
println("Not enough arguments")
return
}
val generationPath = args.firstOrNull()?.let { File(it) }
?: File("compiler/fir/tree/gen").absoluteFile
NodeConfigurator.configureFields()
detectBaseTransformerTypes(FirTreeBuilder)
@@ -79,8 +76,8 @@ private fun detectBaseTransformerTypes(builder: AbstractFirTreeBuilder) {
}
}
private fun removePreviousGeneratedFiles(generationPath: String) {
File(generationPath).walkTopDown().forEach {
private fun removePreviousGeneratedFiles(generationPath: File) {
generationPath.walkTopDown().forEach {
if (it.isFile && it.readText().contains(GENERATED_MESSAGE)) {
it.delete()
}
@@ -30,7 +30,7 @@ val GENERATED_MESSAGE = """
*/
""".trimIndent()
fun printElements(builder: AbstractFirTreeBuilder, generationPath: String) {
fun printElements(builder: AbstractFirTreeBuilder, generationPath: File) {
builder.elements.forEach { it.generateCode(generationPath) }
builder.elements.flatMap { it.allImplementations }.forEach { it.generateCode(generationPath) }
@@ -49,8 +49,8 @@ fun PrintWriter.printGeneratedMessage() {
println()
}
fun printVisitor(elements: List<Element>, generationPath: String) {
val dir = File(generationPath + VISITOR_PACKAGE.replace(".", "/"))
fun printVisitor(elements: List<Element>, generationPath: File) {
val dir = File(generationPath, VISITOR_PACKAGE.replace(".", "/"))
dir.mkdirs()
File(dir, "FirVisitor.kt").printWriter().use { printer ->
with(printer) {
@@ -80,8 +80,8 @@ fun printVisitor(elements: List<Element>, generationPath: String) {
}
}
fun printVisitorVoid(elements: List<Element>, generationPath: String) {
val dir = File(generationPath + VISITOR_PACKAGE.replace(".", "/"))
fun printVisitorVoid(elements: List<Element>, generationPath: File) {
val dir = File(generationPath, VISITOR_PACKAGE.replace(".", "/"))
dir.mkdirs()
File(dir, "FirVisitorVoid.kt").printWriter().use { printer ->
with(printer) {
@@ -128,8 +128,8 @@ fun printVisitorVoid(elements: List<Element>, generationPath: String) {
}
}
fun Element.generateCode(generationPath: String) {
val dir = File(generationPath + packageName.replace(".", "/"))
fun Element.generateCode(generationPath: File) {
val dir = generationPath.resolve(packageName.replace(".", "/"))
dir.mkdirs()
val file = File(dir, "$type.kt")
file.printWriter().use { printer ->
@@ -148,8 +148,8 @@ fun Element.generateCode(generationPath: String) {
}
}
fun Implementation.generateCode(generationPath: String) {
val dir = File(generationPath + packageName.replace(".", "/"))
fun Implementation.generateCode(generationPath: File) {
val dir = generationPath.resolve(packageName.replace(".", "/"))
dir.mkdirs()
val file = File(dir, "$type.kt")
file.printWriter().use { printer ->
@@ -578,8 +578,8 @@ fun Field.replaceFunctionDeclaration(): String {
return "fun replace$capName(new$capName: $typeWithArgumentsWithoutNullablity)"
}
fun printTransformer(elements: List<Element>, generationPath: String) {
val dir = File(generationPath + VISITOR_PACKAGE.replace(".", "/"))
fun printTransformer(elements: List<Element>, generationPath: File) {
val dir = File(generationPath, VISITOR_PACKAGE.replace(".", "/"))
dir.mkdirs()
File(dir, "FirTransformer.kt").printWriter().use { printer ->
with(printer) {