diff options
author | Martin Odersky <odersky@gmail.com> | 2013-02-01 17:52:00 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-02-01 17:52:00 +0100 |
commit | abc8f5e1c382b1ead761976227878c4c38ebfbf5 (patch) | |
tree | b135a1bd0945f375e256af8e4ddfbd818c567865 /src/dotty/tools/dotc/config/WrappedProperties.scala | |
parent | 5610fe1abbb8e4cb005d644f37669f872327828b (diff) | |
download | dotty-abc8f5e1c382b1ead761976227878c4c38ebfbf5.tar.gz dotty-abc8f5e1c382b1ead761976227878c4c38ebfbf5.tar.bz2 dotty-abc8f5e1c382b1ead761976227878c4c38ebfbf5.zip |
Added config package with settings, platform.
Diffstat (limited to 'src/dotty/tools/dotc/config/WrappedProperties.scala')
-rw-r--r-- | src/dotty/tools/dotc/config/WrappedProperties.scala | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/config/WrappedProperties.scala b/src/dotty/tools/dotc/config/WrappedProperties.scala new file mode 100644 index 000000000..07972b99b --- /dev/null +++ b/src/dotty/tools/dotc/config/WrappedProperties.scala @@ -0,0 +1,34 @@ +package dotty.tools +package dotc +package config + +import java.security.AccessControlException + +/** For placing a wrapper function around property functions. + * Motivated by places like google app engine throwing exceptions + * on property lookups. + */ +trait WrappedProperties extends PropertiesTrait { + def wrap[T](body: => T): Option[T] + + protected def propCategory = "wrapped" + protected def pickJarBasedOn = this.getClass + + override def propIsSet(name: String) = wrap(super.propIsSet(name)) exists (x => x) + override def propOrElse(name: String, alt: String) = wrap(super.propOrElse(name, alt)) getOrElse alt + override def setProp(name: String, value: String) = wrap(super.setProp(name, value)).orNull + override def clearProp(name: String) = wrap(super.clearProp(name)).orNull + override def envOrElse(name: String, alt: String) = wrap(super.envOrElse(name, alt)) getOrElse alt + override def envOrNone(name: String) = wrap(super.envOrNone(name)).flatten + + def systemProperties: Iterator[(String, String)] = { + import scala.collection.JavaConverters._ + wrap(System.getProperties.asScala.iterator) getOrElse Iterator.empty + } +} + +object WrappedProperties { + object AccessControl extends WrappedProperties { + def wrap[T](body: => T) = try Some(body) catch { case _: AccessControlException => None } + } +} |