diff --git a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt index b8eb527a971..e6fa5550c2e 100644 --- a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt +++ b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt @@ -766,7 +766,7 @@ class KPackage(model: KModel, val descriptor: NamespaceDescriptor, /** Returns a relative path like ../.. for each path in the name */ public val nameAsRelativePath: String get() { - val answer = namePaths.map{ ".." }.join("/") + val answer = namePaths.map{ ".." }.makeString("/") return if (answer.length == 0) "" else answer + "/" } @@ -922,7 +922,7 @@ class KFunction(val descriptor: CallableDescriptor, val owner: KClassOrPackage, var annotations: List = arrayList(), var sourceLine: Int = 2): KAnnotated(owner.model, descriptor), Comparable { - public val parameterTypeText: String = parameters.map{ it.aType.name }.join(", ") + public val parameterTypeText: String = parameters.map{ it.aType.name }.makeString(", ") override fun compareTo(other: KFunction): Int { var answer = name.compareTo(other.name) @@ -946,7 +946,7 @@ class KFunction(val descriptor: CallableDescriptor, val owner: KClassOrPackage, /** Returns a list of generic type parameter names kinds like "A, I" */ public val typeParametersText: String - get() = typeParameters.map{ it.name }.join(", ") + get() = typeParameters.map{ it.name }.makeString(", ") } class KProperty(val owner: KClassOrPackage, val descriptor: PropertyDescriptor, val name: String, diff --git a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/KDocTemplate.kt b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/KDocTemplate.kt index 2fc676b51a9..193ac17a269 100644 --- a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/KDocTemplate.kt +++ b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/KDocTemplate.kt @@ -113,7 +113,7 @@ abstract class KDocTemplate() : TextTemplate() { } open fun typeArguments(arguments: List, val prefix: String = "<", val postfix: String = ">", val empty: String = ""): String { - val text = arguments.map() { link(it) }.join(", ") + val text = arguments.map() { link(it) }.makeString(", ") return if (text.length() == 0) empty else "$prefix$text$postfix" } diff --git a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageTemplateSupport.kt b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageTemplateSupport.kt index 838fd32d81b..142d80f4c77 100644 --- a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageTemplateSupport.kt +++ b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageTemplateSupport.kt @@ -124,7 +124,7 @@ abstract class PackageTemplateSupport(open val pkg: KPackage) : KDocTemplate() { println("""
""")
         println("""""")
         printAnnotations(function.annotations)
-        print("""${function.modifiers.join(" ")} $funKeyword""")
+        print("""${function.modifiers.makeString(" ")} $funKeyword""")
 
         printTypeParameters(function, " ")
         printReceiverType(function, " ", ".", " ")
diff --git a/libraries/kotlin-install/pom.xml b/libraries/kotlin-install/pom.xml
index 2d6cdb6efb0..6d5cb19f168 100644
--- a/libraries/kotlin-install/pom.xml
+++ b/libraries/kotlin-install/pom.xml
@@ -133,7 +133,7 @@
                             dartc
                             ${project.version}
                             jar
-                            ${kotlin-sdk}/lib/js/dartc.jar
+                            ${kotlin-sdk}/lib/js/${dart.name}.jar
                             true
                             true
                         
diff --git a/libraries/kotlin-java/src/test/java/test/kotlin/jtests/CollectionTest.java b/libraries/kotlin-java/src/test/java/test/kotlin/jtests/CollectionTest.java
index f2f80bf7efa..3530409ff15 100644
--- a/libraries/kotlin-java/src/test/java/test/kotlin/jtests/CollectionTest.java
+++ b/libraries/kotlin-java/src/test/java/test/kotlin/jtests/CollectionTest.java
@@ -17,7 +17,7 @@ public class CollectionTest extends TestCase {
     public void testCollections() throws Exception {
         List list = arrayList("foo", "bar");
 
-        String text = join(list, ",", "(", ")");
+        String text = makeString(list, ",", "(", ")");
         System.out.println("Have text: " + text);
         assertEquals("(foo,bar)", text);
 
@@ -29,6 +29,6 @@ public class CollectionTest extends TestCase {
         });
 
         System.out.println("Filtered list is " + actual);
-        assertEquals("(bar)", join(actual, ",", "(", ")"));
+        assertEquals("(bar)", makeString(actual, ",", "(", ")"));
     }
 }
diff --git a/libraries/pom.xml b/libraries/pom.xml
index f1a1e5f49b3..6b6570d036e 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -12,17 +12,19 @@
 
     
         UTF-8
+        ${project.basedir}/..
+
+        3.3.1
+        dart-r3300
+        11.0.2
         4.10
         0.2.3.8
-        ${project.basedir}/..
         ${project-root}/../dist/kotlinc
         1.6
         1.6
+        2.4
         1.1.0
         2.5
-        2.4
-        3.3.1
-        11.0.2
     
 
 
diff --git a/libraries/stdlib/src/generated/ArraysFromJLangIterablesLazy.kt b/libraries/stdlib/src/generated/ArraysFromJLangIterablesLazy.kt
index 4e4d7b2024d..9e5b7f7d59c 100644
--- a/libraries/stdlib/src/generated/ArraysFromJLangIterablesLazy.kt
+++ b/libraries/stdlib/src/generated/ArraysFromJLangIterablesLazy.kt
@@ -61,19 +61,3 @@ public inline fun  Array.take(n: Int): List {
  * @includeFunctionBody ../../test/CollectionTest.kt takeWhile
  */
 public inline fun  Array.takeWhile(predicate: (T) -> Boolean): List = takeWhileTo(ArrayList(), predicate)
-
-/**
- * Creates a string from all the elements separated using the *separator* and using the given *prefix* and *postfix* if supplied
- *
- * @includeFunctionBody ../../test/CollectionTest.kt join
- */
-public inline fun  Array.join(separator: String = ", ", prefix: String = "", postfix: String = "") : String {
-    val buffer = StringBuilder(prefix)
-    var first = true
-    for (element in this) {
-        if (first) first = false else buffer.append(separator)
-        buffer.append(element)
-    }
-    buffer.append(postfix)
-    return buffer.toString().sure()
-}
diff --git a/libraries/stdlib/src/generated/StandardFromJLangIterablesLazy.kt b/libraries/stdlib/src/generated/StandardFromJLangIterablesLazy.kt
index 4510fa4866c..b4c66b93d7a 100644
--- a/libraries/stdlib/src/generated/StandardFromJLangIterablesLazy.kt
+++ b/libraries/stdlib/src/generated/StandardFromJLangIterablesLazy.kt
@@ -61,19 +61,3 @@ public inline fun  Iterable.take(n: Int): List {
  * @includeFunctionBody ../../test/CollectionTest.kt takeWhile
  */
 public inline fun  Iterable.takeWhile(predicate: (T) -> Boolean): List = takeWhileTo(ArrayList(), predicate)
-
-/**
- * Creates a string from all the elements separated using the *separator* and using the given *prefix* and *postfix* if supplied
- *
- * @includeFunctionBody ../../test/CollectionTest.kt join
- */
-public inline fun  Iterable.join(separator: String = ", ", prefix: String = "", postfix: String = "") : String {
-    val buffer = StringBuilder(prefix)
-    var first = true
-    for (element in this) {
-        if (first) first = false else buffer.append(separator)
-        buffer.append(element)
-    }
-    buffer.append(postfix)
-    return buffer.toString().sure()
-}
diff --git a/libraries/stdlib/src/kotlin/Iterators.kt b/libraries/stdlib/src/kotlin/Iterators.kt
index 37c824e2bc1..84e8435185d 100644
--- a/libraries/stdlib/src/kotlin/Iterators.kt
+++ b/libraries/stdlib/src/kotlin/Iterators.kt
@@ -142,20 +142,3 @@ private class TakeWhileIterator(val iterator: java.util.Iterator, val pred
         done()
     }
 }
-
-/**
- * Creates a string from the first *n (= limit)* elements separated using the *separator* and using the given *prefix* and *postfix* if supplied
- *
- * @includeFunctionBody ../../test/iterators/IteratorsTest.kt joinConcatenatesTheFirstNElementsAboveAThreshold
- */
-public inline fun  java.util.Iterator.join(separator: String = ", ", prefix: String = "", postfix: String = "", limit: Int? = null) : String {
-    val buffer = StringBuilder(prefix)
-    var first = true; var count = 0
-    for (element in this) {
-        if (first) first = false else buffer.append(separator)
-        if (limit == null || ++count <= limit) buffer.append(element) else break
-    }
-    if (limit != null && count > limit) buffer.append("...")
-    return buffer.append(postfix).toString().sure()
-}
-
diff --git a/libraries/stdlib/src/kotlin/JLangIterables.kt b/libraries/stdlib/src/kotlin/JLangIterables.kt
index d113cbd2bd4..f0a3160c7e3 100644
--- a/libraries/stdlib/src/kotlin/JLangIterables.kt
+++ b/libraries/stdlib/src/kotlin/JLangIterables.kt
@@ -2,6 +2,16 @@ package kotlin
 
 import java.util.*
 
+/**
+ * Returns *true* if all elements match the given *predicate*
+ *
+ * @includeFunctionBody ../../test/CollectionTest.kt all
+ */
+public inline fun  java.lang.Iterable.all(predicate: (T) -> Boolean) : Boolean {
+    for (element in this) if (!predicate(element)) return false
+    return true
+}
+
 /**
  * Returns *true* if any elements match the given *predicate*
  *
@@ -13,13 +23,22 @@ public inline fun  java.lang.Iterable.any(predicate: (T) -> Boolean) : Boo
 }
 
 /**
- * Returns *true* if all elements match the given *predicate*
+ * Appends the string from all the elements separated using the *separator* and using the given *prefix* and *postfix* if supplied
  *
- * @includeFunctionBody ../../test/CollectionTest.kt all
+ * @includeFunctionBody ../../test/CollectionTest.kt makeString
  */
-public inline fun  java.lang.Iterable.all(predicate: (T) -> Boolean) : Boolean {
-    for (element in this) if (!predicate(element)) return false
-    return true
+public inline fun  java.lang.Iterable.appendString(buffer: Appendable, separator: String = ", ", prefix: String = "", postfix: String = "", limit: Int = -1): Unit {
+    buffer.append(prefix)
+    var count = 0
+    for (element in this) {
+        if (++count > 1) buffer.append(separator)
+        if (limit < 0 || count <= limit) {
+            val text = if (element == null) "null" else element.toString()
+            buffer.append(text)
+        } else break
+    }
+    if (limit >= 0 && count > limit) buffer.append("...")
+    buffer.append(postfix)
 }
 
 /**
@@ -129,6 +148,17 @@ public inline fun  java.lang.Iterable.groupBy(result: Map> =
     return result
 }
 
+/**
+ * Creates a string from all the elements separated using the *separator* and using the given *prefix* and *postfix* if supplied
+ *
+ * @includeFunctionBody ../../test/CollectionTest.kt appendString
+ */
+public inline fun  java.lang.Iterable.makeString(separator: String = ", ", prefix: String = "", postfix: String = "", limit: Int = -1): String {
+    val buffer = StringBuilder()
+    appendString(buffer, separator, prefix, postfix, limit)
+    return buffer.toString().sure()
+}
+
 /** Returns a list containing the first elements that satisfy the given *predicate* */
 public inline fun > java.lang.Iterable.takeWhileTo(result: L, predicate: (T) -> Boolean) : L {
     for (element in this) if (predicate(element)) result.add(element) else break
diff --git a/libraries/stdlib/src/kotlin/JLangIterablesLazy.kt b/libraries/stdlib/src/kotlin/JLangIterablesLazy.kt
index 2151c88ab51..5829abe2dd5 100644
--- a/libraries/stdlib/src/kotlin/JLangIterablesLazy.kt
+++ b/libraries/stdlib/src/kotlin/JLangIterablesLazy.kt
@@ -58,19 +58,3 @@ public inline fun  java.lang.Iterable.take(n: Int): List {
  * @includeFunctionBody ../../test/CollectionTest.kt takeWhile
  */
 public inline fun  java.lang.Iterable.takeWhile(predicate: (T) -> Boolean): List = takeWhileTo(ArrayList(), predicate)
-
-/**
- * Creates a string from all the elements separated using the *separator* and using the given *prefix* and *postfix* if supplied
- *
- * @includeFunctionBody ../../test/CollectionTest.kt join
- */
-public inline fun  java.lang.Iterable.join(separator: String = ", ", prefix: String = "", postfix: String = "") : String {
-    val buffer = StringBuilder(prefix)
-    var first = true
-    for (element in this) {
-        if (first) first = false else buffer.append(separator)
-        buffer.append(element)
-    }
-    buffer.append(postfix)
-    return buffer.toString().sure()
-}
diff --git a/libraries/stdlib/src/kotlin/dom/Dom.kt b/libraries/stdlib/src/kotlin/dom/Dom.kt
index 6cb6de510b0..37d81f17283 100644
--- a/libraries/stdlib/src/kotlin/dom/Dom.kt
+++ b/libraries/stdlib/src/kotlin/dom/Dom.kt
@@ -89,7 +89,7 @@ get() {
     return answer
 }
 set(value) {
-    this.classes = value.join(" ")
+    this.classes = value.makeString(" ")
 }
 
 
diff --git a/libraries/stdlib/src/kotlin/dom/DomJVM.kt b/libraries/stdlib/src/kotlin/dom/DomJVM.kt
index 8719102fa69..97431099d8d 100644
--- a/libraries/stdlib/src/kotlin/dom/DomJVM.kt
+++ b/libraries/stdlib/src/kotlin/dom/DomJVM.kt
@@ -56,7 +56,7 @@ public fun Node.writeXmlString(writer: Writer, xmlDeclaration: Boolean): Unit {
 /** Converts the collection of nodes to an XML String */
 public fun nodesToXmlString(nodes: Iterable, xmlDeclaration: Boolean = false): String {
     // TODO this should work...
-    // return this.map{it.toXmlString()}.join("")
+    // return this.map{it.toXmlString()}.makeString("")
     val builder = StringBuilder()
     for (n in nodes) {
         builder.append(n.toXmlString(xmlDeclaration))
diff --git a/libraries/stdlib/src/kotlin/nullable/Nullables.kt b/libraries/stdlib/src/kotlin/nullable/Nullables.kt
index 00f1d159f5d..a41e65dab05 100644
--- a/libraries/stdlib/src/kotlin/nullable/Nullables.kt
+++ b/libraries/stdlib/src/kotlin/nullable/Nullables.kt
@@ -122,7 +122,7 @@ public inline fun  T?.groupBy(result: Map> = HashMap
 
 
 /** Creates a String from the nullable or item with the given prefix and postfix if supplied */
-public inline fun  T?.join(separator: String, prefix: String = "", postfix: String = ""): String {
+public inline fun  T?.makeString(separator: String = ", ", prefix: String = "", postfix: String = ""): String {
     val buffer = StringBuilder(prefix)
     var first = true
     if (this != null) {
diff --git a/libraries/stdlib/test/CollectionTest.kt b/libraries/stdlib/test/CollectionTest.kt
index 1e38889e780..86d061e8b74 100644
--- a/libraries/stdlib/test/CollectionTest.kt
+++ b/libraries/stdlib/test/CollectionTest.kt
@@ -8,6 +8,16 @@ import org.junit.Test
 
 class CollectionTest {
 
+    Test fun all() {
+        val data = arrayList("foo", "bar")
+        assertTrue {
+            data.all{it.length == 3}
+        }
+        assertNot {
+            data.all{s -> s.startsWith("b")}
+        }
+    }
+
     Test fun any() {
         val data = arrayList("foo", "bar")
         assertTrue {
@@ -18,14 +28,12 @@ class CollectionTest {
         }
     }
 
-    Test fun all() {
+
+    Test fun appendString() {
         val data = arrayList("foo", "bar")
-        assertTrue {
-            data.all{it.length == 3}
-        }
-        assertNot {
-            data.all{s -> s.startsWith("b")}
-        }
+        val buffer = StringBuilder()
+        val text = data.appendString(buffer, "-", "{", "}")
+        assertEquals("{foo-bar}", buffer.toString())
     }
 
     Test fun count() {
@@ -157,7 +165,7 @@ class CollectionTest {
         val characters = data.flatMap{ it.toCharList() }
         println("Got list of characters ${characters}")
         assertEquals(7, characters.size())
-        val text = characters.join("")
+        val text = characters.makeString("")
         assertEquals("foobarx", text)
     }
 
@@ -223,9 +231,10 @@ class CollectionTest {
 
     }
 
-    Test fun join() {
+
+    Test fun makeString() {
         val data = arrayList("foo", "bar")
-        val text = data.join("-", "<", ">")
+        val text = data.makeString("-", "<", ">")
         assertEquals("", text)
     }
 
diff --git a/libraries/stdlib/test/iterators/IteratorsTest.kt b/libraries/stdlib/test/iterators/IteratorsTest.kt
index 810b96fdf4a..43cc51920bf 100644
--- a/libraries/stdlib/test/iterators/IteratorsTest.kt
+++ b/libraries/stdlib/test/iterators/IteratorsTest.kt
@@ -48,12 +48,12 @@ class IteratorsTest {
     }
 
     Test fun joinConcatenatesTheFirstNElementsAboveAThreshold() {
-        assertEquals("13, 21, 34, 55, 89, ...", fibonacci().filter { it > 10 }.join(separator = ", ", limit = 5))
+        assertEquals("13, 21, 34, 55, 89, ...", fibonacci().filter { it > 10 }.makeString(separator = ", ", limit = 5))
     }
 
     Test fun toStringJoinsNoMoreThanTheFirstTenElements() {
-        assertEquals("0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...", fibonacci().join(limit = 10))
-        assertEquals("13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...", fibonacci().filter {  it > 10 }.join(limit = 10))
-        assertEquals("144, 233, 377, 610, 987", fibonacci().filter { it > 100 }.takeWhile { it < 1000 }.join())
+        assertEquals("0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...", fibonacci().makeString(limit = 10))
+        assertEquals("13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...", fibonacci().filter {  it > 10 }.makeString(limit = 10))
+        assertEquals("144, 233, 377, 610, 987", fibonacci().filter { it > 100 }.takeWhile { it < 1000 }.makeString())
     }
 }
diff --git a/libraries/stdlib/test/language/StringExpressionExampleTest.kt b/libraries/stdlib/test/language/StringExpressionExampleTest.kt
index 4a8181e575f..6260599d5df 100644
--- a/libraries/stdlib/test/language/StringExpressionExampleTest.kt
+++ b/libraries/stdlib/test/language/StringExpressionExampleTest.kt
@@ -17,7 +17,7 @@ fun customerTemplate(customer: Customer) = """
 
 

Hello ${customer.name}

    -${customer.products.map{ productSnippet(it) }.join("\n")} +${customer.products.map{ productSnippet(it) }.makeString("\n")}

lets do some kool stuff