Extract some common source generator logic from FIR tree generator

This commit is contained in:
mcpiroman
2021-10-21 19:49:45 +02:00
committed by Alexander Udalov
parent 2eab61d75f
commit c11d01bebb
4 changed files with 31 additions and 36 deletions
@@ -6,8 +6,11 @@
package org.jetbrains.kotlin.fir.tree.generator
import org.jetbrains.kotlin.fir.tree.generator.printer.generateElements
import org.jetbrains.kotlin.fir.tree.generator.util.*
import org.jetbrains.kotlin.fir.tree.generator.util.configureInterfacesAndAbstractClasses
import org.jetbrains.kotlin.fir.tree.generator.util.detectBaseTransformerTypes
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.collectPreviouslyGeneratedFiles
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.removeExtraFilesFromPreviousGeneration
import java.io.File
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.tree.generator.printer
import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.GENERATED_MESSAGE
import org.jetbrains.kotlin.util.SmartPrinter
import java.io.File
@@ -13,12 +14,6 @@ private val COPYRIGHT = File("license/COPYRIGHT_HEADER.txt").readText()
const val VISITOR_PACKAGE = "org.jetbrains.kotlin.fir.visitors"
const val BASE_PACKAGE = "org.jetbrains.kotlin.fir"
val GENERATED_MESSAGE = """
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
""".trimIndent()
fun generateElements(builder: AbstractFirTreeBuilder, generationPath: File): List<GeneratedFile> {
val generatedFiles = mutableListOf<GeneratedFile>()
@@ -1,28 +0,0 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.tree.generator.util
import org.jetbrains.kotlin.fir.tree.generator.printer.GENERATED_MESSAGE
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
import java.io.File
fun collectPreviouslyGeneratedFiles(generationPath: File): List<File> {
return generationPath.walkTopDown().filter {
it.isFile && it.readText().contains(GENERATED_MESSAGE)
}.toList()
}
fun removeExtraFilesFromPreviousGeneration(previouslyGeneratedFiles: List<File>, generatedFiles: List<File>) {
val generatedFilesPath = generatedFiles.mapTo(mutableSetOf()) { it.absolutePath }
for (file in previouslyGeneratedFiles) {
if (file.absolutePath !in generatedFilesPath) {
if (GeneratorsFileUtil.failOnTeamCity("File delete `${file.absolutePath}`")) continue
println("Deleted: ${file.absolutePath}")
file.delete()
}
}
}
+26 -1
View File
@@ -13,6 +13,13 @@ import kotlin.io.path.*
object GeneratorsFileUtil {
val isTeamCityBuild: Boolean = System.getenv("TEAMCITY_VERSION") != null
val GENERATED_MESSAGE = """
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
""".trimIndent()
@OptIn(ExperimentalPathApi::class)
@JvmStatic
@JvmOverloads
@@ -51,7 +58,7 @@ object GeneratorsFileUtil {
println()
}
fun failOnTeamCity(message: String): Boolean {
private fun failOnTeamCity(message: String): Boolean {
if (!isTeamCityBuild) return false
fun String.escapeForTC(): String = StringBuilder(length).apply {
@@ -85,4 +92,22 @@ object GeneratorsFileUtil {
}
return StringUtil.convertLineSeparators(content) != currentContent
}
fun collectPreviouslyGeneratedFiles(generationPath: File): List<File> {
return generationPath.walkTopDown().filter {
it.isFile && it.readText().contains(GENERATED_MESSAGE)
}.toList()
}
fun removeExtraFilesFromPreviousGeneration(previouslyGeneratedFiles: List<File>, generatedFiles: List<File>) {
val generatedFilesPath = generatedFiles.mapTo(mutableSetOf()) { it.absolutePath }
for (file in previouslyGeneratedFiles) {
if (file.absolutePath !in generatedFilesPath) {
if (failOnTeamCity("File delete `${file.absolutePath}`")) continue
println("Deleted: ${file.absolutePath}")
file.delete()
}
}
}
}