From 6a201073b14af1166c90ce8f5e9c463ec66fe917 Mon Sep 17 00:00:00 2001 From: Justin Van Patten Date: Thu, 8 Dec 2016 16:39:28 -0800 Subject: [PATCH] Make TimeZoneInfo.AdjustmentRule fields readonly (dotnet/coreclr#8528) AdjustmentRule is immutable. Help enforce this by making its fields readonly. Commit migrated from https://github.com/dotnet/coreclr/commit/d8cd756f2dd5027f2df69ad62cca3c6aec6340ad --- .../src/mscorlib/src/System/TimeZoneInfo.cs | 80 ++++++++++--------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/src/coreclr/src/mscorlib/src/System/TimeZoneInfo.cs b/src/coreclr/src/mscorlib/src/System/TimeZoneInfo.cs index 2552d07bb0889..7acffb5e0e86f 100644 --- a/src/coreclr/src/mscorlib/src/System/TimeZoneInfo.cs +++ b/src/coreclr/src/mscorlib/src/System/TimeZoneInfo.cs @@ -4475,13 +4475,13 @@ sealed public class AdjustmentRule : IEquatable, ISerializable, { // ---- SECTION: members supporting exposed properties -------------* - private DateTime m_dateStart; - private DateTime m_dateEnd; - private TimeSpan m_daylightDelta; - private TransitionTime m_daylightTransitionStart; - private TransitionTime m_daylightTransitionEnd; - private TimeSpan m_baseUtcOffsetDelta; // delta from the default Utc offset (utcOffset = defaultUtcOffset + m_baseUtcOffsetDelta) - private bool m_noDaylightTransitions; + private readonly DateTime m_dateStart; + private readonly DateTime m_dateEnd; + private readonly TimeSpan m_daylightDelta; + private readonly TransitionTime m_daylightTransitionStart; + private readonly TransitionTime m_daylightTransitionEnd; + private readonly TimeSpan m_baseUtcOffsetDelta; // delta from the default Utc offset (utcOffset = defaultUtcOffset + m_baseUtcOffsetDelta) + private readonly bool m_noDaylightTransitions; // ---- SECTION: public properties --------------* public DateTime DateStart { @@ -4566,33 +4566,29 @@ sealed public class AdjustmentRule : IEquatable, ISerializable, // -------- SECTION: constructors -----------------* - private AdjustmentRule() { } - - - // -------- SECTION: factory methods -----------------* - - static internal AdjustmentRule CreateAdjustmentRule( - DateTime dateStart, - DateTime dateEnd, - TimeSpan daylightDelta, - TransitionTime daylightTransitionStart, - TransitionTime daylightTransitionEnd, - bool noDaylightTransitions) { + private AdjustmentRule( + DateTime dateStart, + DateTime dateEnd, + TimeSpan daylightDelta, + TransitionTime daylightTransitionStart, + TransitionTime daylightTransitionEnd, + TimeSpan baseUtcOffsetDelta, + bool noDaylightTransitions) + { ValidateAdjustmentRule(dateStart, dateEnd, daylightDelta, daylightTransitionStart, daylightTransitionEnd, noDaylightTransitions); - AdjustmentRule rule = new AdjustmentRule(); + m_dateStart = dateStart; + m_dateEnd = dateEnd; + m_daylightDelta = daylightDelta; + m_daylightTransitionStart = daylightTransitionStart; + m_daylightTransitionEnd = daylightTransitionEnd; + m_baseUtcOffsetDelta = baseUtcOffsetDelta; + m_noDaylightTransitions = noDaylightTransitions; + } - rule.m_dateStart = dateStart; - rule.m_dateEnd = dateEnd; - rule.m_daylightDelta = daylightDelta; - rule.m_daylightTransitionStart = daylightTransitionStart; - rule.m_daylightTransitionEnd = daylightTransitionEnd; - rule.m_baseUtcOffsetDelta = TimeSpan.Zero; - rule.m_noDaylightTransitions = noDaylightTransitions; - return rule; - } + // -------- SECTION: factory methods -----------------* static public AdjustmentRule CreateAdjustmentRule( DateTime dateStart, @@ -4601,8 +4597,14 @@ sealed public class AdjustmentRule : IEquatable, ISerializable, TransitionTime daylightTransitionStart, TransitionTime daylightTransitionEnd) { - return CreateAdjustmentRule(dateStart, dateEnd, daylightDelta, - daylightTransitionStart, daylightTransitionEnd, noDaylightTransitions: false); + return new AdjustmentRule( + dateStart, + dateEnd, + daylightDelta, + daylightTransitionStart, + daylightTransitionEnd, + baseUtcOffsetDelta: TimeSpan.Zero, + noDaylightTransitions: false); } static internal AdjustmentRule CreateAdjustmentRule( @@ -4612,12 +4614,16 @@ sealed public class AdjustmentRule : IEquatable, ISerializable, TransitionTime daylightTransitionStart, TransitionTime daylightTransitionEnd, TimeSpan baseUtcOffsetDelta, - bool noDaylightTransitions) { - AdjustmentRule rule = CreateAdjustmentRule(dateStart, dateEnd, daylightDelta, - daylightTransitionStart, daylightTransitionEnd, noDaylightTransitions); - - rule.m_baseUtcOffsetDelta = baseUtcOffsetDelta; - return rule; + bool noDaylightTransitions) + { + return new AdjustmentRule( + dateStart, + dateEnd, + daylightDelta, + daylightTransitionStart, + daylightTransitionEnd, + baseUtcOffsetDelta, + noDaylightTransitions); } // ----- SECTION: internal utility methods ----------------*