[FIR/IR generator] Factor out printing the preamble in generated files
This commit is contained in:
committed by
Space Team
parent
a33da2a1c6
commit
417aa236fb
+6
-16
@@ -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")
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user