Skip to content

Commit 3e98dd0

Browse files
committed
cherry pick 4378c96
1 parent cd802dc commit 3e98dd0

File tree

3 files changed

+52
-9
lines changed

3 files changed

+52
-9
lines changed

compiler/src/dotty/tools/dotc/config/Properties.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,19 @@ trait PropertiesTrait {
4545

4646
def propIsSet(name: String): Boolean = System.getProperty(name) != null
4747
def propIsSetTo(name: String, value: String): Boolean = propOrNull(name) == value
48-
def propOrElse(name: String, alt: String): String = System.getProperty(name, alt)
48+
def propOrElse(name: String, alt: => String): String = Option(System.getProperty(name)).getOrElse(alt)
4949
def propOrEmpty(name: String): String = propOrElse(name, "")
5050
def propOrNull(name: String): String = propOrElse(name, null)
5151
def propOrNone(name: String): Option[String] = Option(propOrNull(name))
5252
def propOrFalse(name: String): Boolean = propOrNone(name) exists (x => List("yes", "on", "true") contains x.toLowerCase)
5353
def setProp(name: String, value: String): String = System.setProperty(name, value)
5454
def clearProp(name: String): String = System.clearProperty(name)
5555

56-
def envOrElse(name: String, alt: String): String = Option(System getenv name) getOrElse alt
56+
def envOrElse(name: String, alt: => String): String = Option(System getenv name) getOrElse alt
5757
def envOrNone(name: String): Option[String] = Option(System getenv name)
5858

5959
// for values based on propFilename
60-
def scalaPropOrElse(name: String, alt: String): String = scalaProps.getProperty(name, alt)
60+
def scalaPropOrElse(name: String, alt: => String): String = scalaProps.getProperty(name, alt)
6161
def scalaPropOrEmpty(name: String): String = scalaPropOrElse(name, "")
6262
def scalaPropOrNone(name: String): Option[String] = Option(scalaProps.getProperty(name))
6363

compiler/src/dotty/tools/dotc/config/WrappedProperties.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ trait WrappedProperties extends PropertiesTrait {
1414
protected def propCategory: String = "wrapped"
1515
protected def pickJarBasedOn: Class[?] = this.getClass
1616

17-
override def propIsSet(name: String): Boolean = wrap(super.propIsSet(name)) exists (x => x)
18-
override def propOrElse(name: String, alt: String): String = wrap(super.propOrElse(name, alt)) getOrElse alt
19-
override def setProp(name: String, value: String): String = wrap(super.setProp(name, value)).orNull
20-
override def clearProp(name: String): String = wrap(super.clearProp(name)).orNull
21-
override def envOrElse(name: String, alt: String): String = wrap(super.envOrElse(name, alt)) getOrElse alt
22-
override def envOrNone(name: String): Option[String] = wrap(super.envOrNone(name)).flatten
17+
override def propIsSet(name: String): Boolean = wrap(super.propIsSet(name)) exists (x => x)
18+
override def propOrElse(name: String, alt: => String): String = wrap(super.propOrElse(name, alt)) getOrElse alt
19+
override def setProp(name: String, value: String): String = wrap(super.setProp(name, value)).orNull
20+
override def clearProp(name: String): String = wrap(super.clearProp(name)).orNull
21+
override def envOrElse(name: String, alt: => String): String = wrap(super.envOrElse(name, alt)) getOrElse alt
22+
override def envOrNone(name: String): Option[String] = wrap(super.envOrNone(name)).flatten
2323

2424
def systemProperties: Iterator[(String, String)] = {
2525
import scala.jdk.CollectionConverters.*
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package dotty.tools.dotc.config
2+
3+
import org.junit.Before
4+
import org.junit.Test
5+
import org.junit.Assert._
6+
7+
class PropertiesTest {
8+
final val TestProperty = "dotty.tools.dotc.config.PropertiesTest.__test_property__"
9+
10+
@Before
11+
def beforeEach(): Unit = {
12+
Properties.clearProp(TestProperty)
13+
}
14+
15+
@Test
16+
def testPropOrNone(): Unit = {
17+
assertEquals(Properties.propOrNone(TestProperty), None)
18+
19+
Properties.setProp(TestProperty, "foo")
20+
21+
assertEquals(Properties.propOrNone(TestProperty), Some("foo"))
22+
}
23+
24+
@Test
25+
def testPropOrElse(): Unit = {
26+
assertEquals(Properties.propOrElse(TestProperty, "bar"), "bar")
27+
28+
Properties.setProp(TestProperty, "foo")
29+
30+
var done = false
31+
assertEquals(Properties.propOrElse(TestProperty, { done = true; "bar" }), "foo")
32+
assertTrue("Does not evaluate alt if not needed", done == false)
33+
}
34+
35+
@Test
36+
def testEnvOrElse(): Unit = {
37+
assertEquals(Properties.envOrElse("_PropertiesTest_NOT_DEFINED", "test"), "test")
38+
39+
var done = false
40+
assertNotEquals(Properties.envOrElse("JAVA_HOME", { done = true; "bar" }), "bar")
41+
assertTrue("Does not evaluate alt if not needed", done == false)
42+
}
43+
}

0 commit comments

Comments
 (0)