summaryrefslogtreecommitdiff
path: root/src/library/scala/sys
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2015-03-02 23:09:47 -0800
committerSom Snytt <som.snytt@gmail.com>2015-03-02 23:53:28 -0800
commit17caf79d158ca13776dff6d7461bba362b7a2f2f (patch)
tree509806eae49225f555fcb97efaade0fa29a4fc26 /src/library/scala/sys
parent178e8df9b6a91375a6162721a0cbc2d90bcc7451 (diff)
downloadscala-17caf79d158ca13776dff6d7461bba362b7a2f2f.tar.gz
scala-17caf79d158ca13776dff6d7461bba362b7a2f2f.tar.bz2
scala-17caf79d158ca13776dff6d7461bba362b7a2f2f.zip
SI-7775 Exclude nulls when iterating sys props
The previous fix to deal with concurrent modification of system properties doesn't handle null results introduced when a property is removed. This commit filters nulls for safety, and also adds a `names` method to `sys.SystemProperties`. The test is upgraded.
Diffstat (limited to 'src/library/scala/sys')
-rw-r--r--src/library/scala/sys/SystemProperties.scala11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/library/scala/sys/SystemProperties.scala b/src/library/scala/sys/SystemProperties.scala
index d2ebf8c044..6f8b13a89b 100644
--- a/src/library/scala/sys/SystemProperties.scala
+++ b/src/library/scala/sys/SystemProperties.scala
@@ -35,8 +35,15 @@ extends mutable.AbstractMap[String, String]
override def empty = new SystemProperties
override def default(key: String): String = null
- def iterator: Iterator[(String, String)] =
- wrapAccess(System.getProperties().asScala.iterator) getOrElse Iterator.empty
+ def iterator: Iterator[(String, String)] = wrapAccess {
+ val ps = System.getProperties()
+ names map (k => (k, ps getProperty k)) filter (_._2 ne null)
+ } getOrElse Iterator.empty
+
+ def names: Iterator[String] = wrapAccess (
+ System.getProperties().stringPropertyNames().asScala.iterator
+ ) getOrElse Iterator.empty
+
def get(key: String) =
wrapAccess(Option(System.getProperty(key))) flatMap (x => x)
override def contains(key: String) =