From d21588cb603f77ecb261c4914ae71fc3f7e95acf Mon Sep 17 00:00:00 2001 From: Travis Keep Date: Thu, 28 Mar 2013 21:04:41 +0000 Subject: [PATCH] ICU-10017 Do defensive copy of TimeUnitAmount objects in TimePeriod.forAmounts. X-SVN-Rev: 33474 --- icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java b/icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java index d406b7f7921..5bac6f6dc7b 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/TimePeriod.java @@ -67,7 +67,10 @@ public final class TimePeriod implements Iterable { throw new IllegalArgumentException( "Only one TimeUnitAmount per unit allowed."); } - fields[index] = tua; + // This line is necessary to guarantee immutability of the TimePeriod + // class. A Number object, which is in TimeUnitAmount, need not be immutable, + // but Double is immutable. + fields[index] = new TimeUnitAmount(tua.getNumber().doubleValue(), tua.getTimeUnit()); size++; } return new TimePeriod(fields, size, computeHash(fields)); -- 2.40.0