diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/dsl/MemberBuilder.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/dsl/MemberBuilder.kt index ceda5fcd1f5..25459134b8a 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/dsl/MemberBuilder.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/dsl/MemberBuilder.kt @@ -43,6 +43,10 @@ class MemberBuilder( lateinit var keyword: Keyword // fun/val/var lateinit var signature: String // name and params + var sortingSignature: String? = null + get() = field ?: signature + private set + val f get() = family private val legacyMode = true @@ -93,7 +97,10 @@ class MemberBuilder( fun receiver(value: String) { customReceiver = value } @Deprecated("Use receiver()", ReplaceWith("receiver(value)")) fun customReceiver(value: String) = receiver(value) - fun signature(value: String) { signature = value } + fun signature(value: String, notForSorting: Boolean = false) { + if (notForSorting) sortingSignature = signature + signature = value + } fun returns(type: String) { returns = type } fun typeParam(typeParameterName: String) { diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/dsl/Writers.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/dsl/Writers.kt index c97a6e56218..c0f3bffb6ed 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/dsl/Writers.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/dsl/Writers.kt @@ -25,12 +25,32 @@ data class PlatformSourceFile( val sourceFile: SourceFile ) +private val platformsToGenerate = Platform.values - Platform.Native + +@JvmName("groupByFileAndWriteGroups") +fun Sequence.groupByFileAndWrite( + fileNameBuilder: (PlatformSourceFile) -> File +) { + flatMap { group -> + group.invoke() + .flatMap { it.instantiate(platformsToGenerate) } + .sortedBy { it.sortingSignature } + }.groupByFileAndWrite(fileNameBuilder) +} + +@JvmName("groupByFileAndWriteTemplates") fun Sequence.groupByFileAndWrite( fileNameBuilder: (PlatformSourceFile) -> File ) { - val groupedMembers = map { it.instantiate(Platform.values - Platform.Native) }.flatten().groupBy { - PlatformSourceFile(it.platform, it.sourceFile) - } + flatMap { it.instantiate(platformsToGenerate) } + .groupByFileAndWrite(fileNameBuilder) +} + +@JvmName("groupByFileAndWriteMembers") +fun Sequence.groupByFileAndWrite( + fileNameBuilder: (PlatformSourceFile) -> File +) { + val groupedMembers = groupBy { PlatformSourceFile(it.platform, it.sourceFile) } for ((psf, members) in groupedMembers) { val file = fileNameBuilder(psf)