This is an automated email from the ASF dual-hosted git repository.

pjfanning pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko.git


The following commit(s) were added to refs/heads/main by this push:
     new 61e165c23d use Locale.ROOT for toLowerCase/toUpperCase (#3159)
61e165c23d is described below

commit 61e165c23d0bb84fea710b09c3949e5d45894fd5
Author: PJ Fanning <[email protected]>
AuthorDate: Tue Jun 23 21:24:01 2026 +0100

    use Locale.ROOT for toLowerCase/toUpperCase (#3159)
    
    * use Locale.ROOT for toLowerCase/toUpperCase
    
    * Update SplitBrainResolverSettings.scala
    
    * missing import
    
    * Update AtLeastOnceDeliverySpec.scala
---
 .../pekko/actor/typed/TransformMessagesSpec.scala  |  3 ++-
 .../passivation/simulator/AccessPattern.scala      |  3 ++-
 .../passivation/simulator/SimulatorSettings.scala  | 23 ++++++++++------------
 .../scala/org/apache/pekko/cluster/Cluster.scala   |  3 ++-
 .../cluster/sbr/SplitBrainResolverSettings.scala   |  8 +++-----
 .../apache/pekko/cluster/ddata/DurableStore.scala  |  3 ++-
 .../apache/pekko/cluster/ddata/Replicator.scala    |  4 ++--
 .../typed/internal/EventSourcedSettings.scala      |  3 ++-
 .../state/internal/DurableStateSettings.scala      |  3 ++-
 .../pekko/persistence/fsm/PersistentFSM.scala      |  3 ++-
 .../persistence/AtLeastOnceDeliverySpec.scala      |  3 ++-
 .../org/apache/pekko/remote/RemoteSettings.scala   |  6 +++---
 .../scala/org/apache/pekko/testkit/TestKit.scala   |  3 ++-
 13 files changed, 36 insertions(+), 32 deletions(-)

diff --git 
a/actor-typed-tests/src/test/scala/org/apache/pekko/actor/typed/TransformMessagesSpec.scala
 
b/actor-typed-tests/src/test/scala/org/apache/pekko/actor/typed/TransformMessagesSpec.scala
index 9999d86885..72e8e0a7d8 100644
--- 
a/actor-typed-tests/src/test/scala/org/apache/pekko/actor/typed/TransformMessagesSpec.scala
+++ 
b/actor-typed-tests/src/test/scala/org/apache/pekko/actor/typed/TransformMessagesSpec.scala
@@ -26,6 +26,7 @@ import 
pekko.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit
 import pekko.actor.testkit.typed.scaladsl.TestProbe
 import pekko.actor.typed.scaladsl.Behaviors
 import pekko.actor.typed.scaladsl.adapter._
+import pekko.util.Helpers.toRootLowerCase
 
 import org.scalatest.wordspec.AnyWordSpecLike
 
@@ -143,7 +144,7 @@ class TransformMessagesSpec extends 
ScalaTestWithActorTestKit with AnyWordSpecLi
 
       def transform(behavior: Behavior[String]): Behavior[String] =
         behavior.transformMessages[String] {
-          case s => s.toLowerCase
+          case s => toRootLowerCase(s)
         }
 
       LoggingTestKit.error[ActorInitializationException].expect {
diff --git 
a/cluster-sharding/src/test/scala/org/apache/pekko/cluster/sharding/passivation/simulator/AccessPattern.scala
 
b/cluster-sharding/src/test/scala/org/apache/pekko/cluster/sharding/passivation/simulator/AccessPattern.scala
index 621f854b59..16b18e9be4 100644
--- 
a/cluster-sharding/src/test/scala/org/apache/pekko/cluster/sharding/passivation/simulator/AccessPattern.scala
+++ 
b/cluster-sharding/src/test/scala/org/apache/pekko/cluster/sharding/passivation/simulator/AccessPattern.scala
@@ -20,6 +20,7 @@ import pekko.NotUsed
 import pekko.cluster.sharding.ShardRegion.EntityId
 import pekko.stream.scaladsl._
 import pekko.util.ByteString
+import pekko.util.Helpers.toRootLowerCase
 
 trait AccessPattern {
   def isSynthetic: Boolean
@@ -137,7 +138,7 @@ object TraceFileReader {
    */
   final class Text(path: String) extends TraceFileReader(path: String) {
     override def entityIds: Source[EntityId, NotUsed] = lines.mapConcat { line 
=>
-      line.split("[^\\w-]+").filter(_.nonEmpty).map(_.toLowerCase)
+      line.split("[^\\w-]+").filter(_.nonEmpty).map(toRootLowerCase)
     }
   }
 
diff --git 
a/cluster-sharding/src/test/scala/org/apache/pekko/cluster/sharding/passivation/simulator/SimulatorSettings.scala
 
b/cluster-sharding/src/test/scala/org/apache/pekko/cluster/sharding/passivation/simulator/SimulatorSettings.scala
index 1b82c22618..53a32df5ef 100644
--- 
a/cluster-sharding/src/test/scala/org/apache/pekko/cluster/sharding/passivation/simulator/SimulatorSettings.scala
+++ 
b/cluster-sharding/src/test/scala/org/apache/pekko/cluster/sharding/passivation/simulator/SimulatorSettings.scala
@@ -13,13 +13,12 @@
 
 package org.apache.pekko.cluster.sharding.passivation.simulator
 
-import java.util.Locale
-
 import scala.collection.immutable
 import scala.jdk.CollectionConverters._
 
 import org.apache.pekko
 import pekko.japi.Util.immutableSeq
+import pekko.util.Helpers.toRootLowerCase
 
 import com.typesafe.config.Config
 
@@ -77,7 +76,7 @@ object SimulatorSettings {
     def apply(simulatorConfig: Config, strategy: String): StrategySettings = {
       val config = simulatorConfig.getConfig(strategy)
       val fallbackConfig = simulatorConfig.getConfig("strategy-defaults")
-      lowerCase(config.getString("strategy")) match {
+      toRootLowerCase(config.getString("strategy")) match {
         case "composite" =>
           val compositeConfig = 
config.getConfig("composite").withFallback(fallbackConfig.getConfig("composite"))
           Composite(
@@ -95,11 +94,11 @@ object SimulatorSettings {
 
     private def settings(strategyConfig: Config, fallbackConfig: Config): 
StrategySettings = {
       val config = strategyConfig.withFallback(fallbackConfig)
-      lowerCase(config.getString("strategy")) match {
+      toRootLowerCase(config.getString("strategy")) match {
         case "optimal"             => 
Optimal(config.getInt("optimal.per-region-limit"))
         case "least-recently-used" =>
           val limit = config.getInt("least-recently-used.per-region-limit")
-          val segmented = 
lowerCase(config.getString("least-recently-used.segmented.levels")) match {
+          val segmented = 
toRootLowerCase(config.getString("least-recently-used.segmented.levels")) match 
{
             case "off" | "none" => Nil
             case _              =>
               val levels = 
config.getInt("least-recently-used.segmented.levels")
@@ -129,7 +128,7 @@ object SimulatorSettings {
           extends AdmissionFilterSettings
 
       def apply(config: Config): AdmissionFilterSettings = {
-        lowerCase(config.getString("admission.filter")) match {
+        toRootLowerCase(config.getString("admission.filter")) match {
           case "frequency-sketch" =>
             FrequencySketchFilter(
               config.getInt("admission.frequency-sketch.width-multiplier"),
@@ -153,7 +152,7 @@ object SimulatorSettings {
           extends AdmissionOptimizerSettings
 
       def apply(config: Config): AdmissionOptimizerSettings = {
-        lowerCase(config.getString("admission.optimizer")) match {
+        toRootLowerCase(config.getString("admission.optimizer")) match {
           case "hill-climbing" =>
             HillClimbingOptimizer(
               config.getDouble("admission.hill-climbing.adjust-multiplier"),
@@ -184,7 +183,7 @@ object SimulatorSettings {
 
       def apply(patternConfig: Config): Synthetic = {
         val config = patternConfig.getConfig("synthetic")
-        val generator = lowerCase(config.getString("generator")) match {
+        val generator = toRootLowerCase(config.getString("generator")) match {
           case "sequence" =>
             val start = config.getLong("sequence.start")
             Sequence(start)
@@ -210,7 +209,7 @@ object SimulatorSettings {
             val max = config.getLong("zipfian.max")
             val constant = config.getDouble("zipfian.constant")
             val scrambled = config.getBoolean("zipfian.scrambled")
-            if (lowerCase(config.getString("zipfian.shifts")) != "off") {
+            if (toRootLowerCase(config.getString("zipfian.shifts")) != "off") {
               val shifts = config.getInt("zipfian.shifts")
               ShiftingZipfian(min, max, constant, shifts, scrambled)
             } else {
@@ -227,7 +226,7 @@ object SimulatorSettings {
       def apply(patternConfig: Config): Trace = {
         val config = patternConfig.getConfig("trace")
         val path = config.getString("path")
-        val format = lowerCase(config.getString("format"))
+        val format = toRootLowerCase(config.getString("format"))
         Trace(path, format)
       }
     }
@@ -243,7 +242,7 @@ object SimulatorSettings {
 
     def apply(simulatorConfig: Config, pattern: String): PatternSettings = {
       val config = 
simulatorConfig.getConfig(pattern).withFallback(simulatorConfig.getConfig("pattern-defaults"))
-      lowerCase(config.getString("pattern")) match {
+      toRootLowerCase(config.getString("pattern")) match {
         case "synthetic" => Synthetic(config)
         case "trace"     => Trace(config)
         case "joined"    => Joined(simulatorConfig, config)
@@ -251,6 +250,4 @@ object SimulatorSettings {
       }
     }
   }
-
-  private def lowerCase(s: String): String = s.toLowerCase(Locale.ROOT)
 }
diff --git a/cluster/src/main/scala/org/apache/pekko/cluster/Cluster.scala 
b/cluster/src/main/scala/org/apache/pekko/cluster/Cluster.scala
index 2a13a1a455..1bc7bc7cf1 100644
--- a/cluster/src/main/scala/org/apache/pekko/cluster/Cluster.scala
+++ b/cluster/src/main/scala/org/apache/pekko/cluster/Cluster.scala
@@ -40,6 +40,7 @@ import pekko.event.MarkerLoggingAdapter
 import pekko.japi.Util
 import pekko.pattern._
 import pekko.remote.{ UniqueAddress => _, _ }
+import pekko.util.Helpers.toRootLowerCase
 import pekko.util.Version
 
 import com.typesafe.config.{ Config, ConfigFactory }
@@ -60,7 +61,7 @@ object Cluster extends ExtensionId[Cluster] with 
ExtensionIdProvider {
    * INTERNAL API
    */
   private[cluster] final val isAssertInvariantsEnabled: Boolean =
-    System.getProperty("pekko.cluster.assert", "off").toLowerCase match {
+    toRootLowerCase(System.getProperty("pekko.cluster.assert", "off")) match {
       case "on" | "true" => true
       case _             => false
     }
diff --git 
a/cluster/src/main/scala/org/apache/pekko/cluster/sbr/SplitBrainResolverSettings.scala
 
b/cluster/src/main/scala/org/apache/pekko/cluster/sbr/SplitBrainResolverSettings.scala
index fa988b28aa..32370b4e59 100644
--- 
a/cluster/src/main/scala/org/apache/pekko/cluster/sbr/SplitBrainResolverSettings.scala
+++ 
b/cluster/src/main/scala/org/apache/pekko/cluster/sbr/SplitBrainResolverSettings.scala
@@ -13,7 +13,6 @@
 
 package org.apache.pekko.cluster.sbr
 
-import java.util.Locale
 import java.util.concurrent.TimeUnit
 
 import scala.concurrent.duration._
@@ -21,8 +20,7 @@ import scala.concurrent.duration._
 import org.apache.pekko
 import pekko.ConfigurationException
 import pekko.annotation.InternalApi
-import pekko.util.Helpers
-import pekko.util.Helpers.Requiring
+import pekko.util.Helpers.{ toRootLowerCase, Requiring }
 
 import com.typesafe.config.Config
 
@@ -55,7 +53,7 @@ import com.typesafe.config.Config
   }
 
   val DowningStrategy: String =
-    cc.getString("active-strategy").toLowerCase(Locale.ROOT) match {
+    toRootLowerCase(cc.getString("active-strategy")) match {
       case strategyName if allStrategyNames(strategyName) => strategyName
       case unknown                                        =>
         throw new ConfigurationException(
@@ -64,7 +62,7 @@ import com.typesafe.config.Config
 
   val DownAllWhenUnstable: FiniteDuration = {
     val key = "down-all-when-unstable"
-    Helpers.toRootLowerCase(cc.getString("down-all-when-unstable")) match {
+    toRootLowerCase(cc.getString("down-all-when-unstable")) match {
       case "on" =>
         // based on stable-after
         4.seconds.max(DowningStableAfter * 3 / 4)
diff --git 
a/distributed-data/src/main/scala/org/apache/pekko/cluster/ddata/DurableStore.scala
 
b/distributed-data/src/main/scala/org/apache/pekko/cluster/ddata/DurableStore.scala
index b894976894..40cf63a359 100644
--- 
a/distributed-data/src/main/scala/org/apache/pekko/cluster/ddata/DurableStore.scala
+++ 
b/distributed-data/src/main/scala/org/apache/pekko/cluster/ddata/DurableStore.scala
@@ -43,6 +43,7 @@ import pekko.serialization.SerializationExtension
 import pekko.serialization.SerializerWithStringManifest
 import pekko.util.ByteString
 import pekko.util.OptionVal
+import pekko.util.Helpers.toRootLowerCase
 
 import com.typesafe.config.Config
 
@@ -139,7 +140,7 @@ final class LmdbDurableStore(config: Config) extends Actor 
with ActorLogging {
   val serializer = 
serialization.serializerFor(classOf[DurableDataEnvelope]).asInstanceOf[SerializerWithStringManifest]
   val manifest = serializer.manifest(new 
DurableDataEnvelope(Replicator.Internal.DeletedData))
 
-  val writeBehindInterval = 
config.getString("lmdb.write-behind-interval").toLowerCase match {
+  val writeBehindInterval = 
toRootLowerCase(config.getString("lmdb.write-behind-interval")) match {
     case "off" => Duration.Zero
     case _     => config.getDuration("lmdb.write-behind-interval", 
MILLISECONDS).millis
   }
diff --git 
a/distributed-data/src/main/scala/org/apache/pekko/cluster/ddata/Replicator.scala
 
b/distributed-data/src/main/scala/org/apache/pekko/cluster/ddata/Replicator.scala
index 35393c4cb7..45f80f152c 100644
--- 
a/distributed-data/src/main/scala/org/apache/pekko/cluster/ddata/Replicator.scala
+++ 
b/distributed-data/src/main/scala/org/apache/pekko/cluster/ddata/Replicator.scala
@@ -14,7 +14,7 @@
 package org.apache.pekko.cluster.ddata
 
 import java.security.MessageDigest
-import java.util.Optional
+import java.util.{ Locale, Optional }
 import java.util.concurrent.ThreadLocalRandom
 import java.util.concurrent.TimeUnit
 import java.util.function.{ Function => JFunction }
@@ -145,7 +145,7 @@ object ReplicatorSettings {
    */
   @InternalApi private[pekko] def name(system: ActorSystem, modifier: 
Option[String]): String = {
     val name = 
system.settings.config.getString("pekko.cluster.distributed-data.name")
-    modifier.map(s => s + name.take(1).toUpperCase + 
name.drop(1)).getOrElse(name)
+    modifier.map(s => s + name.take(1).toUpperCase(Locale.ROOT) + 
name.drop(1)).getOrElse(name)
   }
 }
 
diff --git 
a/persistence-typed/src/main/scala/org/apache/pekko/persistence/typed/internal/EventSourcedSettings.scala
 
b/persistence-typed/src/main/scala/org/apache/pekko/persistence/typed/internal/EventSourcedSettings.scala
index 786212d070..58901e017a 100644
--- 
a/persistence-typed/src/main/scala/org/apache/pekko/persistence/typed/internal/EventSourcedSettings.scala
+++ 
b/persistence-typed/src/main/scala/org/apache/pekko/persistence/typed/internal/EventSourcedSettings.scala
@@ -16,6 +16,7 @@ package org.apache.pekko.persistence.typed.internal
 import org.apache.pekko
 import pekko.actor.typed.ActorSystem
 import pekko.annotation.InternalApi
+import pekko.util.Helpers.toRootLowerCase
 
 import com.typesafe.config.Config
 
@@ -53,7 +54,7 @@ import com.typesafe.config.Config
   ): EventSourcedSettings = {
     val typedConfig = config.getConfig("pekko.persistence.typed")
 
-    val stashOverflowStrategy = 
typedConfig.getString("stash-overflow-strategy").toLowerCase match {
+    val stashOverflowStrategy = 
toRootLowerCase(typedConfig.getString("stash-overflow-strategy")) match {
       case "drop"  => StashOverflowStrategy.Drop
       case "fail"  => StashOverflowStrategy.Fail
       case unknown =>
diff --git 
a/persistence-typed/src/main/scala/org/apache/pekko/persistence/typed/state/internal/DurableStateSettings.scala
 
b/persistence-typed/src/main/scala/org/apache/pekko/persistence/typed/state/internal/DurableStateSettings.scala
index 5071c659a7..5b12bfd646 100644
--- 
a/persistence-typed/src/main/scala/org/apache/pekko/persistence/typed/state/internal/DurableStateSettings.scala
+++ 
b/persistence-typed/src/main/scala/org/apache/pekko/persistence/typed/state/internal/DurableStateSettings.scala
@@ -22,6 +22,7 @@ import org.apache.pekko
 import pekko.actor.typed.ActorSystem
 import pekko.annotation.InternalApi
 import pekko.persistence.Persistence
+import pekko.util.Helpers.toRootLowerCase
 
 import com.typesafe.config.Config
 
@@ -56,7 +57,7 @@ import com.typesafe.config.Config
       customStashCapacity: Option[Int]): DurableStateSettings = {
     val typedConfig = config.getConfig("pekko.persistence.typed")
 
-    val stashOverflowStrategy = 
typedConfig.getString("stash-overflow-strategy").toLowerCase match {
+    val stashOverflowStrategy = 
toRootLowerCase(typedConfig.getString("stash-overflow-strategy")) match {
       case "drop"  => StashOverflowStrategy.Drop
       case "fail"  => StashOverflowStrategy.Fail
       case unknown =>
diff --git 
a/persistence/src/main/scala/org/apache/pekko/persistence/fsm/PersistentFSM.scala
 
b/persistence/src/main/scala/org/apache/pekko/persistence/fsm/PersistentFSM.scala
index 155ae429e4..78de37df71 100644
--- 
a/persistence/src/main/scala/org/apache/pekko/persistence/fsm/PersistentFSM.scala
+++ 
b/persistence/src/main/scala/org/apache/pekko/persistence/fsm/PersistentFSM.scala
@@ -26,6 +26,7 @@ import pekko.annotation.InternalApi
 import pekko.persistence.{ PersistentActor, RecoveryCompleted, SnapshotOffer }
 import pekko.persistence.fsm.PersistentFSM.FSMState
 import pekko.persistence.serialization.Message
+import pekko.util.Helpers.toRootLowerCase
 
 import com.typesafe.config.Config
 
@@ -48,7 +49,7 @@ private[pekko] object SnapshotAfter extends 
ExtensionId[SnapshotAfter] with Exte
  */
 private[pekko] class SnapshotAfter(config: Config) extends Extension {
   val key = "pekko.persistence.fsm.snapshot-after"
-  val snapshotAfterValue = config.getString(key).toLowerCase match {
+  val snapshotAfterValue = toRootLowerCase(config.getString(key)) match {
     case "off" => None
     case _     => Some(config.getInt(key))
   }
diff --git 
a/persistence/src/test/scala/org/apache/pekko/persistence/AtLeastOnceDeliverySpec.scala
 
b/persistence/src/test/scala/org/apache/pekko/persistence/AtLeastOnceDeliverySpec.scala
index 84759118f2..130b232f7b 100644
--- 
a/persistence/src/test/scala/org/apache/pekko/persistence/AtLeastOnceDeliverySpec.scala
+++ 
b/persistence/src/test/scala/org/apache/pekko/persistence/AtLeastOnceDeliverySpec.scala
@@ -13,6 +13,7 @@
 
 package org.apache.pekko.persistence
 
+import java.util.Locale
 import scala.concurrent.duration._
 import scala.util.Failure
 import scala.util.control.NoStackTrace
@@ -95,7 +96,7 @@ object AtLeastOnceDeliverySpec {
         if (payload.isEmpty)
           sender() ! InvalidReq
         else {
-          val destination = destinations(payload.take(1).toUpperCase)
+          val destination = 
destinations(payload.take(1).toUpperCase(Locale.ROOT))
           if (async)
             persistAsync(AcceptedReq(payload, destination)) { evt =>
               updateState(evt)
diff --git a/remote/src/main/scala/org/apache/pekko/remote/RemoteSettings.scala 
b/remote/src/main/scala/org/apache/pekko/remote/RemoteSettings.scala
index b0926bc09a..1c20795bb6 100644
--- a/remote/src/main/scala/org/apache/pekko/remote/RemoteSettings.scala
+++ b/remote/src/main/scala/org/apache/pekko/remote/RemoteSettings.scala
@@ -47,7 +47,7 @@ final class RemoteSettings(val config: Config) {
 
   @deprecated("Classic remoting is deprecated, use Artery", "Akka 2.6.0")
   val LogFrameSizeExceeding: Option[Int] = {
-    if 
(config.getString("pekko.remote.classic.log-frame-size-exceeding").toLowerCase 
== "off") None
+    if 
(toRootLowerCase(config.getString("pekko.remote.classic.log-frame-size-exceeding"))
 == "off") None
     else Some(getBytes("pekko.remote.classic.log-frame-size-exceeding").toInt)
   }
 
@@ -118,7 +118,7 @@ final class RemoteSettings(val config: Config) {
   @deprecated("Classic remoting is deprecated, use Artery", "Akka 2.6.0")
   val LogBufferSizeExceeding: Int = {
     val key = "pekko.remote.classic.log-buffer-size-exceeding"
-    config.getString(key).toLowerCase match {
+    toRootLowerCase(config.getString(key)) match {
       case "off" | "false" => Int.MaxValue
       case _               => config.getInt(key)
     }
@@ -152,7 +152,7 @@ final class RemoteSettings(val config: Config) {
   @deprecated("Classic remoting is deprecated, use Artery", "Akka 2.6.0")
   val QuarantineSilentSystemTimeout: FiniteDuration = {
     val key = "pekko.remote.classic.quarantine-after-silence"
-    config.getString(key).toLowerCase match {
+    toRootLowerCase(config.getString(key)) match {
       case "off" | "false" => Duration.Zero
       case _               =>
         config.getMillisDuration(key).requiring(_ > Duration.Zero, 
"quarantine-after-silence must be > 0")
diff --git a/testkit/src/main/scala/org/apache/pekko/testkit/TestKit.scala 
b/testkit/src/main/scala/org/apache/pekko/testkit/TestKit.scala
index d47f5ae763..02d712ad71 100644
--- a/testkit/src/main/scala/org/apache/pekko/testkit/TestKit.scala
+++ b/testkit/src/main/scala/org/apache/pekko/testkit/TestKit.scala
@@ -32,6 +32,7 @@ import pekko.actor.IllegalActorStateException
 import pekko.actor.Terminated
 import pekko.annotation.InternalApi
 import pekko.util.{ BoxedType, Timeout }
+import pekko.util.Helpers.toRootLowerCase
 
 object TestActor {
   type Ignore = Option[PartialFunction[Any, Boolean]]
@@ -915,7 +916,7 @@ trait TestKitBase {
     expectMsgType[ActorRef]
   }
 
-  private def format(u: TimeUnit, d: Duration) = "%.3f %s".format(d.toUnit(u), 
u.toString.toLowerCase)
+  private def format(u: TimeUnit, d: Duration) = "%.3f %s".format(d.toUnit(u), 
toRootLowerCase(u.toString))
 }
 
 /**


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to