Add hidden declarations for replaced overloads with String receiver in generated code.

This commit is contained in:
Ilya Gorbunov
2015-10-14 00:38:16 +03:00
parent 935e606b64
commit 59b67b32c4
10 changed files with 966 additions and 94 deletions
File diff suppressed because it is too large Load Diff
@@ -15,7 +15,8 @@ fun aggregates(): List<GenericFunction> {
return true
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("none(predicate: (T) -> Boolean)") {
@@ -29,7 +30,8 @@ fun aggregates(): List<GenericFunction> {
return true
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("none()") {
@@ -41,7 +43,8 @@ fun aggregates(): List<GenericFunction> {
return true
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("any(predicate: (T) -> Boolean)") {
@@ -55,7 +58,8 @@ fun aggregates(): List<GenericFunction> {
return false
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("any()") {
@@ -67,7 +71,8 @@ fun aggregates(): List<GenericFunction> {
return false
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("count(predicate: (T) -> Boolean)") {
@@ -82,7 +87,8 @@ fun aggregates(): List<GenericFunction> {
return count
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("count()") {
@@ -95,8 +101,9 @@ fun aggregates(): List<GenericFunction> {
return count
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Returns the length of this string."}
body(CharSequences) {
body(CharSequences, Strings) {
"return length()"
}
body(Maps, Collections, ArraysOfObjects, ArraysOfPrimitives) {
@@ -106,7 +113,8 @@ fun aggregates(): List<GenericFunction> {
templates add f("sumBy(transform: (T) -> Int)") {
inline(true)
include(CharSequences)
include(CharSequences, Strings)
deprecate(Strings) { forBinaryCompatibility }
doc { "Returns the sum of all values produced by [transform] function from elements in the collection." }
doc(CharSequences) { "Returns the sum of all values produced by [transform] function from characters in the string." }
returns("Int")
@@ -123,7 +131,8 @@ fun aggregates(): List<GenericFunction> {
templates add f("sumByDouble(transform: (T) -> Double)") {
inline(true)
include(CharSequences)
include(CharSequences, Strings)
deprecate(Strings) { forBinaryCompatibility }
doc { "Returns the sum of all values produced by [transform] function from elements in the collection." }
doc(CharSequences) { "Returns the sum of all values produced by [transform] function from characters in the string." }
returns("Double")
@@ -156,7 +165,8 @@ fun aggregates(): List<GenericFunction> {
return min
"""
}
body(CharSequences, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, ArraysOfObjects, ArraysOfPrimitives) {
"""
if (isEmpty()) return null
var min = this[0]
@@ -194,7 +204,8 @@ fun aggregates(): List<GenericFunction> {
return minElem
"""
}
body(CharSequences, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, ArraysOfObjects, ArraysOfPrimitives) {
"""
if (isEmpty()) return null
@@ -259,7 +270,8 @@ fun aggregates(): List<GenericFunction> {
"""
}
body(CharSequences, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, ArraysOfObjects, ArraysOfPrimitives) {
"""
if (isEmpty()) return null
@@ -298,7 +310,8 @@ fun aggregates(): List<GenericFunction> {
return maxElem
"""
}
body(CharSequences, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, ArraysOfObjects, ArraysOfPrimitives) {
"""
if (isEmpty()) return null
@@ -347,7 +360,8 @@ fun aggregates(): List<GenericFunction> {
templates add f("fold(initial: R, operation: (R, T) -> R)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Accumulates value starting with [initial] value and applying [operation] from left to right to current accumulator value and each element." }
typeParam("R")
returns("R")
@@ -363,7 +377,8 @@ fun aggregates(): List<GenericFunction> {
templates add f("foldRight(initial: R, operation: (T, R) -> R)") {
inline(true)
only(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives)
deprecate(Strings) { forBinaryCompatibility }
only(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives)
doc { "Accumulates value starting with [initial] value and applying [operation] from right to left to each element and current accumulator value." }
typeParam("R")
returns("R")
@@ -382,7 +397,8 @@ fun aggregates(): List<GenericFunction> {
templates add f("reduce(operation: (T, T) -> T)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
exclude(ArraysOfObjects, Iterables, Sequences)
doc { "Accumulates value starting with the first element and applying [operation] from left to right to current accumulator value and each element." }
@@ -426,7 +442,8 @@ fun aggregates(): List<GenericFunction> {
templates add f("reduceRight(operation: (T, T) -> T)") {
inline(true)
only(CharSequences, ArraysOfPrimitives)
deprecate(Strings) { forBinaryCompatibility }
only(CharSequences, Strings, ArraysOfPrimitives)
doc { "Accumulates value starting with last element and applying [operation] from right to left to each element and current accumulator value." }
returns("T")
body {
@@ -477,12 +494,14 @@ fun aggregates(): List<GenericFunction> {
for (element in this) operation(element)
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("forEachIndexed(operation: (Int, T) -> Unit)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Performs the given [operation] on each element, providing sequential index with the element." }
returns("Unit")
body {
@@ -224,7 +224,8 @@ fun elements(): List<GenericFunction> {
"""
}
body(Lists, CharSequences, ArraysOfPrimitives, ArraysOfObjects) {
deprecate(Strings) { forBinaryCompatibility }
body(Lists, CharSequences, Strings, ArraysOfPrimitives, ArraysOfObjects) {
"""
for (index in indices) {
if (predicate(this[index])) {
@@ -254,7 +255,8 @@ fun elements(): List<GenericFunction> {
"""
}
body(Lists, CharSequences, ArraysOfPrimitives, ArraysOfObjects) {
deprecate(Strings) { forBinaryCompatibility }
body(Lists, CharSequences, Strings, ArraysOfPrimitives, ArraysOfObjects) {
"""
for (index in indices.reversed()) {
if (predicate(this[index])) {
@@ -283,7 +285,8 @@ fun elements(): List<GenericFunction> {
return elementAtOrElse(index) { throw IndexOutOfBoundsException("Sequence doesn't contain element at index $index.") }
"""
}
body(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives) {
"""
return get(index)
"""
@@ -323,8 +326,9 @@ fun elements(): List<GenericFunction> {
return defaultValue(index)
"""
}
inline(true, CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives)
body(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
inline(true, CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives)
body(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives) {
"""
return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)
"""
@@ -335,7 +339,8 @@ fun elements(): List<GenericFunction> {
doc { "Returns an element at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this collection." }
returns("T")
inline(true)
only(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives)
deprecate(Strings) { forBinaryCompatibility }
only(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives)
body {
"""
return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)
@@ -377,7 +382,8 @@ fun elements(): List<GenericFunction> {
return null
"""
}
body(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives) {
"""
return if (index >= 0 && index <= lastIndex) get(index) else null
"""
@@ -387,7 +393,8 @@ fun elements(): List<GenericFunction> {
templates add f("getOrNull(index: Int)") {
doc { "Returns an element at the given [index] or `null` if the [index] is out of bounds of this collection." }
returns("T?")
only(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives)
deprecate(Strings) { forBinaryCompatibility }
only(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives)
body {
"""
return if (index >= 0 && index <= lastIndex) get(index) else null
@@ -422,7 +429,8 @@ fun elements(): List<GenericFunction> {
}
"""
}
body(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives) {
"""
if (isEmpty())
throw NoSuchElementException("Collection is empty.")
@@ -460,7 +468,8 @@ fun elements(): List<GenericFunction> {
}
"""
}
body(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives) {
"""
return if (isEmpty()) null else this[0]
"""
@@ -478,7 +487,8 @@ fun elements(): List<GenericFunction> {
templates add f("first(predicate: (T) -> Boolean)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { """Returns the first element matching the given [predicate].
@throws [NoSuchElementException] if no such element is found.""" }
doc(CharSequences) { """Returns the first character matching the given [predicate].
@@ -495,7 +505,8 @@ fun elements(): List<GenericFunction> {
templates add f("firstOrNull(predicate: (T) -> Boolean)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns the first element matching the given [predicate], or `null` if element was not found." }
doc(CharSequences) { "Returns the first character matching the given [predicate], or `null` if character was not found." }
returns("T?")
@@ -509,7 +520,8 @@ fun elements(): List<GenericFunction> {
templates add f("find(predicate: (T) -> Boolean)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns the first element matching the given [predicate], or `null` if element was not found." }
doc(CharSequences) { "Returns the first character matching the given [predicate], or `null` if character was not found." }
returns("T?")
@@ -554,7 +566,8 @@ fun elements(): List<GenericFunction> {
return last
"""
}
body(CharSequences, Lists, ArraysOfObjects, ArraysOfPrimitives) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings, Lists, ArraysOfObjects, ArraysOfPrimitives) {
"""
if (isEmpty())
throw NoSuchElementException("Collection is empty.")
@@ -594,7 +607,8 @@ fun elements(): List<GenericFunction> {
return last
"""
}
body(CharSequences) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) {
"""
return if (isEmpty()) null else this[length() - 1]
"""
@@ -609,7 +623,8 @@ fun elements(): List<GenericFunction> {
templates add f("last(predicate: (T) -> Boolean)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { """Returns the last element matching the given [predicate].
@throws [NoSuchElementException] if no such element is found.""" }
doc(CharSequences) { """"Returns the last character matching the given [predicate].
@@ -649,7 +664,8 @@ fun elements(): List<GenericFunction> {
templates add f("lastOrNull(predicate: (T) -> Boolean)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns the last element matching the given [predicate], or `null` if no such element was found." }
doc(CharSequences) { "Returns the last character matching the given [predicate], or `null` if no such character was found." }
returns("T?")
@@ -684,7 +700,8 @@ fun elements(): List<GenericFunction> {
templates add f("findLast(predicate: (T) -> Boolean)") {
inline(true)
include(Lists, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Lists, CharSequences, Strings)
doc { "Returns the last element matching the given [predicate], or `null` if no such element was found." }
doc(CharSequences) { "Returns the last character matching the given [predicate], or `null` if no such character was found." }
returns("T?")
@@ -726,7 +743,8 @@ fun elements(): List<GenericFunction> {
return single
"""
}
body(CharSequences) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) {
"""
return when (length()) {
0 -> throw NoSuchElementException("Collection is empty.")
@@ -777,7 +795,8 @@ fun elements(): List<GenericFunction> {
return single
"""
}
body(CharSequences) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) {
"""
return if (length() == 1) this[0] else null
"""
@@ -791,7 +810,8 @@ fun elements(): List<GenericFunction> {
templates add f("single(predicate: (T) -> Boolean)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns the single element matching the given [predicate], or throws exception if there is no or more than one matching element." }
doc(CharSequences) { "Returns the single character matching the given [predicate], or throws exception if there is no or more than one matching character." }
returns("T")
@@ -814,7 +834,8 @@ fun elements(): List<GenericFunction> {
templates add f("singleOrNull(predicate: (T) -> Boolean)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns the single element matching the given [predicate], or `null` if element was not found or more than one element was found." }
doc(CharSequences) { "Returns the single character matching the given [predicate], or `null` if character was not found or more than one character was found." }
returns("T?")
@@ -58,6 +58,7 @@ fun PrimitiveType.isIntegral(): Boolean = this in PrimitiveType.integralPrimitiv
fun PrimitiveType.isNumeric(): Boolean = this in PrimitiveType.numericPrimitives
data class Deprecation(val message: String, val replaceWith: String? = null, val level: DeprecationLevel = DeprecationLevel.WARNING)
val forBinaryCompatibility = Deprecation("Provided for binary compatibility", level = DeprecationLevel.HIDDEN)
class ConcreteFunction(val textBuilder: (Appendable) -> Unit, val sourceFile: SourceFile)
@@ -260,14 +261,14 @@ class GenericFunction(val signature: String, val keyword: String = "fun") {
}
"TCollection" -> {
when (f) {
Strings, CharSequences -> "Appendable"
CharSequences, Strings -> "Appendable"
else -> renderType("MutableCollection<in T>", receiver)
}
}
"T" -> {
when (f) {
Generic -> "T"
Strings, CharSequences -> "Char"
CharSequences, Strings -> "Char"
Maps -> "Map.Entry<K, V>"
else -> primitive?.name ?: token
}
@@ -47,9 +47,10 @@ fun filtering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Returns a string with the first [n] characters removed."}
body(CharSequences) { "return substring(Math.min(n, length()))" }
returns(CharSequences) { "String" }
body(CharSequences, Strings) { "return substring(Math.min(n, length()))" }
returns(CharSequences, Strings) { "String" }
body(ArraysOfObjects, ArraysOfPrimitives) {
"""
@@ -88,14 +89,15 @@ fun filtering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Returns a string containing the first [n] characters from this string, or the entire string if this string is shorter."}
body(CharSequences) {
body(CharSequences, Strings) {
"""
require(n >= 0, { "Requested character count $n is less than zero." })
return substring(0, Math.min(n, length()))
"""
}
returns(CharSequences) { "String" }
returns(CharSequences, Strings) { "String" }
doc(Sequences) { "Returns a sequence containing first [n] elements." }
returns(Sequences) { "Sequence<T>" }
@@ -125,7 +127,8 @@ fun filtering(): List<GenericFunction> {
templates add f("dropLast(n: Int)") {
val n = "\$n"
only(Lists, ArraysOfObjects, ArraysOfPrimitives, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
only(Lists, ArraysOfObjects, ArraysOfPrimitives, CharSequences, Strings)
doc { "Returns a list containing all elements except last [n] elements." }
returns("List<T>")
@@ -137,8 +140,8 @@ fun filtering(): List<GenericFunction> {
}
doc(CharSequences) { "Returns a string with the last [n] characters removed." }
returns("String", CharSequences)
body(CharSequences) {
returns("String", CharSequences, Strings)
body(CharSequences, Strings) {
"""
require(n >= 0, { "Requested character count $n is less than zero." })
return take((length() - n).coerceAtLeast(0))
@@ -149,18 +152,19 @@ fun filtering(): List<GenericFunction> {
templates add f("takeLast(n: Int)") {
val n = "\$n"
doc { "Returns a list containing last [n] elements." }
only(Lists, ArraysOfObjects, ArraysOfPrimitives, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
only(Lists, ArraysOfObjects, ArraysOfPrimitives, CharSequences, Strings)
returns("List<T>")
doc(CharSequences) { "Returns a string containing the last [n] characters from this string, or the entire string if this string is shorter."}
body(CharSequences) {
body(CharSequences, Strings) {
"""
require(n >= 0, { "Requested character count $n is less than zero." })
val length = length()
return substring(length - Math.min(n, length), length)
"""
}
returns(CharSequences) { "String" }
returns(CharSequences, Strings) { "String" }
body(Lists, ArraysOfObjects, ArraysOfPrimitives) {
"""
@@ -196,9 +200,10 @@ fun filtering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Returns a string containing all characters except first characters that satisfy the given [predicate]." }
returns(CharSequences) { "String" }
body(CharSequences) {
returns(CharSequences, Strings) { "String" }
body(CharSequences, Strings) {
"""
return trimStart(predicate)
"""
@@ -232,9 +237,10 @@ fun filtering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Returns a string containing the first characters that satisfy the given [predicate]."}
returns(CharSequences) { "String" }
body(CharSequences) {
returns(CharSequences, Strings) { "String" }
body(CharSequences, Strings) {
"""
for (index in 0..length() - 1)
if (!predicate(get(index))) {
@@ -256,7 +262,8 @@ fun filtering(): List<GenericFunction> {
templates add f("dropLastWhile(predicate: (T) -> Boolean)") {
inline(true)
only(Lists, ArraysOfObjects, ArraysOfPrimitives, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
only(Lists, ArraysOfObjects, ArraysOfPrimitives, CharSequences, Strings)
doc { "Returns a list containing all elements except last elements that satisfy the given [predicate]." }
returns("List<T>")
@@ -272,8 +279,8 @@ fun filtering(): List<GenericFunction> {
}
doc(CharSequences) { "Returns a string containing all characters except last characters that satisfy the given [predicate]." }
returns("String", CharSequences)
body(CharSequences) {
returns("String", CharSequences, Strings)
body(CharSequences, Strings) {
"""
return trimEnd(predicate)
"""
@@ -282,7 +289,8 @@ fun filtering(): List<GenericFunction> {
templates add f("takeLastWhile(predicate: (T) -> Boolean)") {
inline(true)
only(Lists, ArraysOfObjects, ArraysOfPrimitives, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
only(Lists, ArraysOfObjects, ArraysOfPrimitives, CharSequences, Strings)
doc { "Returns a list containing last elements satisfying the given [predicate]."}
returns("List<T>")
@@ -298,8 +306,8 @@ fun filtering(): List<GenericFunction> {
}
doc(CharSequences) { "Returns a string containing last characters that satisfy the given [predicate]." }
returns("String", CharSequences)
body(CharSequences) {
returns("String", CharSequences, Strings)
body(CharSequences, Strings) {
"""
for (index in lastIndex downTo 0) {
if (!predicate(this[index])) {
@@ -322,9 +330,10 @@ fun filtering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Returns a string containing only those characters from the original string that match the given [predicate]." }
returns(CharSequences) { "String" }
body(CharSequences) {
returns(CharSequences, Strings) { "String" }
body(CharSequences, Strings) {
"""
return filterTo(StringBuilder(), predicate).toString()
"""
@@ -354,8 +363,9 @@ fun filtering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Appends all characters matching the given [predicate] to the given [destination]." }
body(CharSequences) {
body(CharSequences, Strings) {
"""
for (index in 0..length() - 1) {
val element = get(index)
@@ -377,9 +387,10 @@ fun filtering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Returns a string containing only those characters from the original string that do not match the given [predicate]." }
returns(CharSequences) { "String" }
body(CharSequences) {
returns(CharSequences, Strings) { "String" }
body(CharSequences, Strings) {
"""
return filterNotTo(StringBuilder(), predicate).toString()
"""
@@ -409,8 +420,9 @@ fun filtering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Appends all characters not matching the given [predicate] to the given [destination]." }
body(CharSequences) {
body(CharSequences, Strings) {
"""
for (element in this) if (!predicate(element)) destination.append(element)
return destination
@@ -419,6 +419,7 @@ fun generators(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) {
"""
Splits the original string into pair of strings,
@@ -426,8 +427,8 @@ fun generators(): List<GenericFunction> {
while *second* string contains characters for which [predicate] yielded `false`.
"""
}
returns(CharSequences) { "Pair<String, String>" }
body(CharSequences) {
returns(CharSequences, Strings) { "Pair<String, String>" }
body(CharSequences, Strings) {
"""
val first = StringBuilder()
val second = StringBuilder()
@@ -555,7 +556,8 @@ fun generators(): List<GenericFunction> {
}
templates add f("zip(other: String, transform: (Char, Char) -> V)") {
only(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
only(CharSequences, Strings)
doc {
"""
Returns a list of values built from characters of both strings with same indexes using provided [transform]. List has length of shortest string.
@@ -595,7 +597,8 @@ fun generators(): List<GenericFunction> {
}
templates add f("zip(other: String)") {
only(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
only(CharSequences, Strings)
doc {
"""
Returns a list of pairs built from characters of both strings with same indexes. List has length of shortest collection.
@@ -6,7 +6,8 @@ fun mapping(): List<GenericFunction> {
val templates = arrayListOf<GenericFunction>()
templates add f("withIndex()") {
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns a lazy [Iterable] of [IndexedValue] for each element of the original collection." }
returns("Iterable<IndexedValue<T>>")
body {
@@ -36,7 +37,8 @@ fun mapping(): List<GenericFunction> {
body(ArraysOfObjects, ArraysOfPrimitives) {
"return mapIndexedTo(ArrayList<R>(size()), transform)"
}
body(CharSequences) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) {
"return mapIndexedTo(ArrayList<R>(length()), transform)"
}
inline(false, Sequences)
@@ -59,7 +61,8 @@ fun mapping(): List<GenericFunction> {
body(ArraysOfObjects, ArraysOfPrimitives, Maps) {
"return mapTo(ArrayList<R>(size()), transform)"
}
body(CharSequences) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) {
"return mapTo(ArrayList<R>(length()), transform)"
}
@@ -119,7 +122,8 @@ fun mapping(): List<GenericFunction> {
return destination
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("mapIndexedTo(destination: C, transform: (Int, T) -> R)") {
@@ -143,7 +147,8 @@ fun mapping(): List<GenericFunction> {
return destination
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
/*
@@ -186,7 +191,8 @@ fun mapping(): List<GenericFunction> {
body {
"return flatMapTo(ArrayList<R>(), transform)"
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("flatMap(transform: (T) -> Sequence<R>)") {
@@ -215,7 +221,8 @@ fun mapping(): List<GenericFunction> {
return destination
"""
}
include(Maps, CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(Maps, CharSequences, Strings)
}
templates add f("flatMapTo(destination: C, transform: (T) -> Sequence<R>)") {
@@ -240,7 +247,8 @@ fun mapping(): List<GenericFunction> {
templates add f("groupBy(toKey: (T) -> K)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns a map of the elements in original collection grouped by the result of given [toKey] function." }
typeParam("K")
returns("Map<K, List<T>>")
@@ -250,7 +258,8 @@ fun mapping(): List<GenericFunction> {
templates add f("groupByTo(map: MutableMap<K, MutableList<T>>, toKey: (T) -> K)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
typeParam("K")
doc { "Appends elements from original collection grouped by the result of given [toKey] function to the given [map]." }
returns("Map<K, MutableList<T>>")
@@ -39,9 +39,10 @@ fun ordering(): List<GenericFunction> {
"""
}
deprecate(Strings) { forBinaryCompatibility }
doc(CharSequences) { "Returns a string with characters in reversed order." }
returns(CharSequences) { "String" }
body(CharSequences) {
returns(CharSequences, Strings) { "String" }
body(CharSequences, Strings) {
// TODO: Replace with StringBuilder(this) when JS can handle it
"""
return StringBuilder().append(this).reverse().toString()
@@ -30,7 +30,8 @@ fun sequences(): List<GenericFunction> {
"""
}
body(CharSequences) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) {
"""
if (this is String && isEmpty()) return emptySequence()
return object : Sequence<T> {
@@ -7,7 +7,8 @@ fun snapshots(): List<GenericFunction> {
val templates = arrayListOf<GenericFunction>()
templates add f("toCollection(collection: C)") {
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Appends all elements to the given [collection]." }
returns("C")
typeParam("C : MutableCollection<in T>")
@@ -26,7 +27,8 @@ fun snapshots(): List<GenericFunction> {
returns("Set<T>")
body { "return toCollection(LinkedHashSet<T>(mapCapacity(collectionSizeOrDefault(12))))" }
body(Sequences) { "return toCollection(LinkedHashSet<T>())" }
body(CharSequences) { "return toCollection(LinkedHashSet<T>(mapCapacity(length())))" }
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) { "return toCollection(LinkedHashSet<T>(mapCapacity(length())))" }
body(ArraysOfObjects, ArraysOfPrimitives) { "return toCollection(LinkedHashSet<T>(mapCapacity(size())))" }
}
@@ -35,12 +37,14 @@ fun snapshots(): List<GenericFunction> {
returns("HashSet<T>")
body { "return toCollection(HashSet<T>(mapCapacity(collectionSizeOrDefault(12))))" }
body(Sequences) { "return toCollection(HashSet<T>())" }
body(CharSequences) { "return toCollection(HashSet<T>(mapCapacity(length())))" }
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) { "return toCollection(HashSet<T>(mapCapacity(length())))" }
body(ArraysOfObjects, ArraysOfPrimitives) { "return toCollection(HashSet<T>(mapCapacity(size())))" }
}
templates add f("toSortedSet()") {
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns a [SortedSet] of all elements." }
returns("SortedSet<T>")
body { "return toCollection(TreeSet<T>())" }
@@ -58,7 +62,8 @@ fun snapshots(): List<GenericFunction> {
"""
}
body(Collections) { "return ArrayList(this)" }
body(CharSequences) { "return toCollection(ArrayList<T>(length()))" }
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) { "return toCollection(ArrayList<T>(length()))" }
body(ArraysOfObjects) { "return ArrayList(this.asCollection())" }
body(ArraysOfPrimitives) {
"""
@@ -84,7 +89,8 @@ fun snapshots(): List<GenericFunction> {
}
templates add f("toList()") {
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
include(CharSequences, Strings)
doc { "Returns a [List] containing all elements." }
returns("List<T>")
body { "return this.toArrayList()" }
@@ -99,7 +105,9 @@ fun snapshots(): List<GenericFunction> {
templates add f("toMap(selector: (T) -> K)") {
inline(true)
include(CharSequences)
deprecate(Strings) { forBinaryCompatibility }
body(Strings) { "return toMapBy(selector)" }
include(CharSequences, Strings)
typeParam("K")
returns("Map<K, T>")
deprecate(Deprecation("Use toMapBy instead.", replaceWith = "toMapBy(selector)"))
@@ -140,7 +148,8 @@ fun snapshots(): List<GenericFunction> {
return result
"""
}
body(CharSequences) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) {
"""
val capacity = (length()/.75f) + 1
val result = LinkedHashMap<K, T>(Math.max(capacity.toInt(), 16))
@@ -198,7 +207,8 @@ fun snapshots(): List<GenericFunction> {
return result
"""
}
body(CharSequences) {
deprecate(Strings) { forBinaryCompatibility }
body(CharSequences, Strings) {
"""
val capacity = (length()/.75f) + 1
val result = LinkedHashMap<K, V>(Math.max(capacity.toInt(), 16))