[FIR/IR generator] Factor out printing the preamble in generated files

This commit is contained in:
Sergej Jaskiewicz
2023-09-14 20:30:42 +02:00
committed by Space Team
parent a33da2a1c6
commit 417aa236fb
438 changed files with 1373 additions and 2233 deletions
@@ -7,23 +7,19 @@ package org.jetbrains.kotlin.ir.generator.print
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.TypeSpec
import org.jetbrains.kotlin.ir.generator.util.GeneratedFile
import org.jetbrains.kotlin.generators.tree.printer.GeneratedFile
import org.jetbrains.kotlin.generators.tree.printer.printGeneratedType
import org.jetbrains.kotlin.ir.generator.util.Import
import java.io.File
private val COPYRIGHT by lazy { File("license/COPYRIGHT_HEADER.txt").readText() }
private val GENERATED_MESSAGE = """
// This file was generated automatically. See compiler/ir/ir.tree/tree-generator/ReadMe.md.
// DO NOT MODIFY IT MANUALLY.
""".trimIndent()
private val PREFIX by lazy { "$COPYRIGHT\n\n$GENERATED_MESSAGE\n\n" }
internal const val TREE_GENERATOR_README = "compiler/ir/ir.tree/tree-generator/ReadMe.md"
fun printTypeCommon(
generationPath: File,
packageName: String,
type: TypeSpec,
additionalImports: List<Import> = emptyList(),
): GeneratedFile {
): GeneratedFile = printGeneratedType(generationPath, TREE_GENERATOR_README, packageName, type.name!!) {
val code = FileSpec.builder(packageName, type.name!!)
.apply {
additionalImports.forEach { addImport(it.packageName, it.className) }
@@ -32,6 +28,7 @@ fun printTypeCommon(
.addType(type)
.build()
.toString()
.replace("package $packageName\n\n", "")
.unbacktickIdentifiers("data", "value", "operator", "constructor", "delegate", "receiver", "field")
.replace("public ", "")
.replace(":\\s*Unit".toRegex(), "")
@@ -39,9 +36,7 @@ fun printTypeCommon(
// Half-baked attempt to remove double indent generated by KotlinPoet, which is not idiomatic according to the Kotlin style guide
.replace(" visitor.visit", " visitor.visit")
.replace(" accept(transformer, data)", " accept(transformer, data)")
val text = PREFIX + code
return GeneratedFile(getPathForFile(generationPath, packageName, type.name!!), text)
print(code)
}
private fun String.unbacktickIdentifiers(vararg identifiers: String): String {
@@ -51,8 +46,3 @@ private fun String.unbacktickIdentifiers(vararg identifiers: String): String {
}
return result
}
fun getPathForFile(generationPath: File, packageName: String, typeName: String): File {
val dir = generationPath.resolve(packageName.replace(".", "/"))
return File(dir, "$typeName.kt")
}
@@ -6,14 +6,14 @@
package org.jetbrains.kotlin.ir.generator.print
import com.squareup.kotlinpoet.*
import org.jetbrains.kotlin.generators.tree.printer.GeneratedFile
import org.jetbrains.kotlin.generators.tree.type
import org.jetbrains.kotlin.ir.generator.IrTree
import org.jetbrains.kotlin.ir.generator.Packages
import org.jetbrains.kotlin.ir.generator.config.UseFieldAsParameterInIrFactoryStrategy
import org.jetbrains.kotlin.ir.generator.model.Model
import org.jetbrains.kotlin.ir.generator.util.GeneratedFile
import org.jetbrains.kotlin.ir.generator.util.parameterizedByIfAny
import org.jetbrains.kotlin.ir.generator.util.tryParameterizedBy
import org.jetbrains.kotlin.generators.tree.type
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
import java.io.File
@@ -7,11 +7,11 @@ package org.jetbrains.kotlin.ir.generator.print
import com.squareup.kotlinpoet.*
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import org.jetbrains.kotlin.generators.tree.printer.GeneratedFile
import org.jetbrains.kotlin.ir.generator.IrTree
import org.jetbrains.kotlin.ir.generator.VISITOR_PACKAGE
import org.jetbrains.kotlin.ir.generator.irTypeType
import org.jetbrains.kotlin.ir.generator.model.*
import org.jetbrains.kotlin.ir.generator.util.GeneratedFile
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import java.io.File
@@ -10,9 +10,6 @@ import com.squareup.kotlinpoet.CodeBlock
import com.squareup.kotlinpoet.ParameterizedTypeName
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.TypeName
import java.io.File
class GeneratedFile(val file: File, val newText: String)
class Import(val packageName: String, val className: String)