Remove special source generation for js stdlib, use same template, rename generated file.
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
package generators
|
||||
|
||||
import java.io.*
|
||||
import templates.Family.*
|
||||
import templates.*
|
||||
import templates.PrimitiveType.*
|
||||
|
||||
fun generateCollectionsAPI(outDir: File) {
|
||||
val templates = sequenceOf(
|
||||
::elements,
|
||||
::filtering,
|
||||
::ordering,
|
||||
::arrays,
|
||||
::snapshots,
|
||||
::mapping,
|
||||
::sets,
|
||||
::aggregates,
|
||||
::guards,
|
||||
::generators,
|
||||
::strings,
|
||||
::sequences,
|
||||
::specialJVM,
|
||||
::ranges,
|
||||
::numeric,
|
||||
::comparables
|
||||
).flatMap { it().sortedBy { it.signature }.asSequence() }
|
||||
|
||||
val groupedConcreteFunctions = templates.flatMap { it.instantiate().asSequence() }.groupBy { it.sourceFile }
|
||||
|
||||
for ((sourceFile, functions) in groupedConcreteFunctions) {
|
||||
functions.writeTo(outDir, sourceFile)
|
||||
}
|
||||
}
|
||||
|
||||
fun generateCollectionsJsAPI(outDir: File) {
|
||||
specialJS().writeTo(File(outDir, "kotlin_special.kt")) { build() }
|
||||
}
|
||||
@@ -18,11 +18,12 @@ private val COMMON_AUTOGENERATED_WARNING: String = """//
|
||||
*/
|
||||
fun main(args: Array<String>) {
|
||||
require(args.size == 1) { "Expecting Kotlin project home path as an argument" }
|
||||
val baseDir = File(args.first())
|
||||
|
||||
val outDir = File(File(args[0]), "libraries/stdlib/src/generated")
|
||||
val outDir = baseDir.resolve("libraries/stdlib/src/generated")
|
||||
require(outDir.exists()) { "$outDir doesn't exist!" }
|
||||
|
||||
val jsCoreDir = File(args[0], "js/js.libraries/src/core")
|
||||
val jsCoreDir = baseDir.resolve("js/js.libraries/src/core/generated")
|
||||
require(jsCoreDir.exists()) { "$jsCoreDir doesn't exist!" }
|
||||
|
||||
generateCollectionsAPI(outDir)
|
||||
@@ -30,37 +31,60 @@ fun main(args: Array<String>) {
|
||||
|
||||
}
|
||||
|
||||
fun List<GenericFunction>.writeTo(file: File, builder: GenericFunction.() -> String) {
|
||||
println("Generating file: $file")
|
||||
val its = FileWriter(file)
|
||||
fun generateCollectionsAPI(outDir: File) {
|
||||
val templates = sequenceOf(
|
||||
::elements,
|
||||
::filtering,
|
||||
::ordering,
|
||||
::arrays,
|
||||
::snapshots,
|
||||
::mapping,
|
||||
::sets,
|
||||
::aggregates,
|
||||
::guards,
|
||||
::generators,
|
||||
::strings,
|
||||
::sequences,
|
||||
::specialJVM,
|
||||
::ranges,
|
||||
::numeric,
|
||||
::comparables
|
||||
).flatMap { it().sortedBy { it.signature }.asSequence() }
|
||||
|
||||
its.use {
|
||||
its.append("package kotlin.collections\n\n")
|
||||
its.append("$COMMON_AUTOGENERATED_WARNING\n\n")
|
||||
its.append("import java.util.*\n\n")
|
||||
for (t in this.sortedBy { it.signature }) {
|
||||
its.append(t.builder())
|
||||
}
|
||||
templates.groupByFileAndWrite(outDir)
|
||||
}
|
||||
|
||||
fun generateCollectionsJsAPI(outDir: File) {
|
||||
specialJS().asSequence().groupByFileAndWrite(outDir, { "_${it.name.capitalize()}Js.kt"})
|
||||
}
|
||||
|
||||
|
||||
private fun Sequence<GenericFunction>.groupByFileAndWrite(
|
||||
outDir: File,
|
||||
fileNameBuilder: (SourceFile) -> String = { "_${it.name.capitalize()}.kt" }
|
||||
) {
|
||||
val groupedConcreteFunctions = flatMap { it.instantiate().asSequence() }.groupBy { it.sourceFile }
|
||||
|
||||
for ((sourceFile, functions) in groupedConcreteFunctions) {
|
||||
val file = outDir.resolve(fileNameBuilder(sourceFile))
|
||||
functions.writeTo(file, sourceFile)
|
||||
}
|
||||
}
|
||||
|
||||
fun List<ConcreteFunction>.writeTo(outDir: File, sourceFile: SourceFile) {
|
||||
val file = File(outDir, sourceFile.fileName)
|
||||
private fun List<ConcreteFunction>.writeTo(file: File, sourceFile: SourceFile) {
|
||||
println("Generating file: $file")
|
||||
val its = FileWriter(file)
|
||||
|
||||
its.use {
|
||||
FileWriter(file).use { writer ->
|
||||
if (sourceFile.multifile) {
|
||||
its.append("@file:kotlin.jvm.JvmMultifileClass\n")
|
||||
writer.append("@file:kotlin.jvm.JvmMultifileClass\n")
|
||||
}
|
||||
its.append("@file:kotlin.jvm.JvmName(\"${sourceFile.jvmClassName}\")\n\n")
|
||||
its.append("package ${sourceFile.packageName ?: "kotlin"}\n\n")
|
||||
its.append("$COMMON_AUTOGENERATED_WARNING\n\n")
|
||||
its.append("import kotlin.comparisons.*\n")
|
||||
its.append("import java.util.*\n\n")
|
||||
|
||||
writer.append("@file:kotlin.jvm.JvmName(\"${sourceFile.jvmClassName}\")\n\n")
|
||||
writer.append("package ${sourceFile.packageName ?: "kotlin"}\n\n")
|
||||
writer.append("$COMMON_AUTOGENERATED_WARNING\n\n")
|
||||
writer.append("import kotlin.comparisons.*\n")
|
||||
writer.append("import java.util.*\n\n")
|
||||
for (f in this) {
|
||||
f.textBuilder(its)
|
||||
f.textBuilder(writer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,4 @@ enum class SourceFile(jvmClassName: String? = null, val multifile: Boolean = tru
|
||||
;
|
||||
|
||||
val jvmClassName = jvmClassName ?: (name.capitalize() + "Kt")
|
||||
|
||||
val fileName: String get() = "_${name.capitalize()}.kt"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user