-
Notifications
You must be signed in to change notification settings - Fork 380
Closed
Labels
Description
Reproducer based on scala-java-time
trait TemporalAccessor {
def isSupported(field: TemporalField): Boolean
def range(field: TemporalField): ValueRange
}
final class Month extends TemporalAccessor {
override def isSupported(field: TemporalField): Boolean = field.## == 0
override def range(field: TemporalField): ValueRange =
if (field eq ChronoField.MONTH_OF_YEAR) field.range
else field.rangeRefinedBy(this)
}
object Month {
lazy val JANUARY = new Month()
}
trait TemporalField {
def range: ValueRange
def rangeRefinedBy(temporal: TemporalAccessor): ValueRange
}
final class ValueRange
final class ChronoField extends TemporalField {
def range: ValueRange = new ValueRange()
def rangeRefinedBy(temporal: TemporalAccessor): ValueRange = new ValueRange()
}
object ChronoField {
lazy val MONTH_OF_YEAR = new ChronoField()
}
object JulianFields {
lazy val JULIAN_DAY: TemporalField = new Field()
private final class Field extends TemporalField {
override def range: ValueRange = new ValueRange()
override def rangeRefinedBy(temporal: TemporalAccessor): ValueRange =
new ValueRange()
}
}
import util.Try
object Test {
def main(args: Array[String]): Unit = {
val sample = Month.JANUARY
val field = JulianFields.JULIAN_DAY
assert(Try(sample.range(field)).isSuccess)
assert(
Try(sample.range(null)).failed.toOption
.exists(_.isInstanceOf[NullPointerException])
)
}
}
sideeffffect