Skip to content

Commit ce794c1

Browse files
authored
Merge pull request scala/scala#9322 from SethTisue/backport-9292
[backport] Make the CharSequence wrappers in Predef non-implicit, for JDK 15
2 parents 9657efd + bd98eaa commit ce794c1

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

library/src/scala/Predef.scala

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ import scala.io.StdIn
9797
* @groupprio implicit-classes-any 70
9898
* @groupdesc implicit-classes-any These implicit classes add useful extension methods to every type.
9999
*
100-
* @groupname implicit-classes-char CharSequence Conversions
101-
* @groupprio implicit-classes-char 80
102-
* @groupdesc implicit-classes-char These implicit classes add CharSequence methods to Array[Char] and IndexedSeq[Char] instances.
100+
* @groupname char-sequence-wrappers CharSequence Wrappers
101+
* @groupprio char-sequence-wrappers 80
102+
* @groupdesc char-sequence-wrappers Wrappers that implements CharSequence and were implicit classes.
103103
*
104104
* @groupname conversions-java-to-anyval Java to Scala
105105
* @groupprio conversions-java-to-anyval 90
@@ -349,22 +349,28 @@ object Predef extends LowPriorityImplicits with DeprecatedPredef {
349349
// and `@deprecatedName(Symbol("<none>"), "2.12.0")` crashes scalac with
350350
// scala.reflect.internal.Symbols$CyclicReference: illegal cyclic reference involving object Symbol
351351
// in run/repl-no-imports-no-predef-power.scala.
352-
/** @group implicit-classes-char */
353-
implicit final class SeqCharSequence(@deprecated("will be made private", "2.12.0") @deprecatedName(null, "2.12.0") val __sequenceOfChars: scala.collection.IndexedSeq[Char]) extends CharSequence {
352+
/** @group char-sequence-wrappers */
353+
final class SeqCharSequence(@deprecated("will be made private", "2.12.0") @deprecatedName(null, "2.12.0") val __sequenceOfChars: scala.collection.IndexedSeq[Char]) extends CharSequence {
354354
def length: Int = __sequenceOfChars.length
355355
def charAt(index: Int): Char = __sequenceOfChars(index)
356356
def subSequence(start: Int, end: Int): CharSequence = new SeqCharSequence(__sequenceOfChars.slice(start, end))
357357
override def toString = __sequenceOfChars mkString ""
358358
}
359359

360-
/** @group implicit-classes-char */
361-
implicit final class ArrayCharSequence(@deprecated("will be made private", "2.12.0") @deprecatedName(null, "2.12.0") val __arrayOfChars: Array[Char]) extends CharSequence {
360+
/** @group char-sequence-wrappers */
361+
def SeqCharSequence(sequenceOfChars: scala.collection.IndexedSeq[Char]): SeqCharSequence = new SeqCharSequence(sequenceOfChars)
362+
363+
/** @group char-sequence-wrappers */
364+
final class ArrayCharSequence(@deprecated("will be made private", "2.12.0") @deprecatedName(null, "2.12.0") val __arrayOfChars: Array[Char]) extends CharSequence {
362365
def length: Int = __arrayOfChars.length
363366
def charAt(index: Int): Char = __arrayOfChars(index)
364367
def subSequence(start: Int, end: Int): CharSequence = new runtime.ArrayCharSequence(__arrayOfChars, start, end)
365368
override def toString = __arrayOfChars mkString ""
366369
}
367370

371+
/** @group char-sequence-wrappers */
372+
def ArrayCharSequence(arrayOfChars: Array[Char]): ArrayCharSequence = new ArrayCharSequence(arrayOfChars)
373+
368374
implicit val StringCanBuildFrom: CanBuildFrom[String, Char, String] = new CanBuildFrom[String, Char, String] {
369375
def apply(from: String) = apply()
370376
def apply() = mutable.StringBuilder.newBuilder

library/src/scala/collection/mutable/StringBuilder.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,15 @@ final class StringBuilder(private val underlying: JavaStringBuilder)
447447
* @return the string assembled by this StringBuilder
448448
*/
449449
def result(): String = toString
450+
451+
452+
/** Tests whether this builder is empty.
453+
*
454+
* This method is required for JDK15+ compatibility
455+
*
456+
* @return `true` if this builder contains nothing, `false` otherwise.
457+
*/
458+
override def isEmpty: Boolean = underlying.length() == 0
450459
}
451460

452461
object StringBuilder {

0 commit comments

Comments
 (0)