From 9f57a2c0d58375f725a4e4be89993f4ce26058d5 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 3 Nov 2017 03:30:14 +0300 Subject: [PATCH] Make generated code ordered same as before Allow to fix signature for sorting when overriding it --- .../src/templates/dsl/MemberBuilder.kt | 9 ++++++- .../src/templates/dsl/Writers.kt | 26 ++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) 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)