Make stdlib functions dependent on reified is checks available in JS.

#KT-11346 Fixed
This commit is contained in:
Ilya Gorbunov
2016-04-25 19:18:35 +03:00
parent a5fd95c7d9
commit 409094f0f7
10 changed files with 232 additions and 120 deletions
@@ -1,3 +1,19 @@
/*
* Copyright 2010-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package templates
import templates.Family.*
@@ -543,6 +559,48 @@ fun filtering(): List<GenericFunction> {
}
}
templates add f("filterIsInstanceTo(destination: C)") {
doc { "Appends all elements that are instances of specified type parameter R to the given [destination]." }
typeParam("reified R")
typeParam("C : MutableCollection<in R>")
inline(true)
receiverAsterisk(true)
returns("C")
exclude(ArraysOfPrimitives, Strings)
body {
"""
for (element in this) if (element is R) destination.add(element)
return destination
"""
}
}
templates add f("filterIsInstance()") {
doc { "Returns a list containing all elements that are instances of specified type parameter R." }
typeParam("reified R")
returns("List<@kotlin.internal.NoInfer R>")
inline(true)
receiverAsterisk(true)
body {
"""
return filterIsInstanceTo(ArrayList<R>())
"""
}
exclude(ArraysOfPrimitives, Strings)
doc(Sequences) { "Returns a sequence containing all elements that are instances of specified type parameter R." }
returns(Sequences) { "Sequence<@kotlin.internal.NoInfer R>" }
inline(true)
receiverAsterisk(true)
body(Sequences) {
"""
@Suppress("UNCHECKED_CAST")
return filter { it is R } as Sequence<R>
"""
}
}
templates add f("slice(indices: Iterable<Int>)") {
only(Strings, Lists, ArraysOfPrimitives, ArraysOfObjects)
doc { "Returns a list containing elements at specified [indices]." }
@@ -1,3 +1,19 @@
/*
* Copyright 2010-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package templates
import templates.Family.*
@@ -231,47 +247,6 @@ fun specialJVM(): List<GenericFunction> {
}
}
templates add f("filterIsInstanceTo(destination: C)") {
doc { "Appends all elements that are instances of specified type parameter R to the given [destination]." }
typeParam("reified R")
typeParam("C : MutableCollection<in R>")
inline(true)
receiverAsterisk(true)
returns("C")
exclude(ArraysOfPrimitives, Strings)
body {
"""
for (element in this) if (element is R) destination.add(element)
return destination
"""
}
}
templates add f("filterIsInstance()") {
doc { "Returns a list containing all elements that are instances of specified type parameter R." }
typeParam("reified R")
returns("List<@kotlin.internal.NoInfer R>")
inline(true)
receiverAsterisk(true)
body {
"""
return filterIsInstanceTo(ArrayList<R>())
"""
}
exclude(ArraysOfPrimitives, Strings)
doc(Sequences) { "Returns a sequence containing all elements that are instances of specified type parameter R." }
returns(Sequences) { "Sequence<@kotlin.internal.NoInfer R>" }
inline(true)
receiverAsterisk(true)
body(Sequences) {
"""
@Suppress("UNCHECKED_CAST")
return filter { it is R } as Sequence<R>
"""
}
}
templates add f("asList()") {
only(ArraysOfObjects, ArraysOfPrimitives)
doc { "Returns a [List] that wraps the original array." }