summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/reflect
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/compiler/scala/tools/reflect
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/compiler/scala/tools/reflect')
-rw-r--r--src/compiler/scala/tools/reflect/WrappedProperties.scala5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/reflect/WrappedProperties.scala b/src/compiler/scala/tools/reflect/WrappedProperties.scala
index 523287fc66..348d000d15 100644
--- a/src/compiler/scala/tools/reflect/WrappedProperties.scala
+++ b/src/compiler/scala/tools/reflect/WrappedProperties.scala
@@ -30,9 +30,10 @@ trait WrappedProperties extends PropertiesTrait {
def systemProperties: List[(String, String)] = {
import scala.collection.JavaConverters._
wrap {
+ // SI-7269,7775 Avoid `ConcurrentModificationException` and nulls if another thread modifies properties
val props = System.getProperties
- // SI-7269 Be careful to avoid `ConcurrentModificationException` if another thread modifies the properties map
- props.stringPropertyNames().asScala.toList.map(k => (k, props.get(k).asInstanceOf[String]))
+ val it = props.stringPropertyNames().asScala.iterator map (k => (k, props getProperty k)) filter (_._2 ne null)
+ it.toList
} getOrElse Nil
}
}