diff options
author | Som Snytt <som.snytt@gmail.com> | 2015-03-02 23:09:47 -0800 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2015-03-02 23:53:28 -0800 |
commit | 17caf79d158ca13776dff6d7461bba362b7a2f2f (patch) | |
tree | 509806eae49225f555fcb97efaade0fa29a4fc26 /src/library/scala/sys | |
parent | 178e8df9b6a91375a6162721a0cbc2d90bcc7451 (diff) | |
download | scala-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.scala | 11 |
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) = |