@@ -30,7 +30,7 @@ static void Main(string[] args)
3030 {
3131 Id = "INTL0202" ,
3232 Severity = DiagnosticSeverity . Warning ,
33- Message = "Using the symbol 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
33+ Message = "Using 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' or 'new DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
3434 Locations =
3535 [
3636 new DiagnosticResultLocation ( "Test0.cs" , 10 , 38 )
@@ -71,7 +71,7 @@ static void Main(string[] args)
7171 {
7272 Id = "INTL0202" ,
7373 Severity = DiagnosticSeverity . Warning ,
74- Message = "Using the symbol 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
74+ Message = "Using 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' or 'new DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
7575 Locations =
7676 [
7777 new DiagnosticResultLocation ( "Test0.cs" , 17 , 17 )
@@ -101,6 +101,110 @@ static void Main(string[] args)
101101
102102 }
103103
104+ [ TestMethod ]
105+ public void UsageOfDateTimeOffsetConstructorWithDateTime_ProducesWarningMessage ( )
106+ {
107+ string source = @"
108+ using System;
109+
110+ namespace ConsoleApp44
111+ {
112+ class Program
113+ {
114+ static void Main(string[] args)
115+ {
116+ DateTimeOffset ofs = new DateTimeOffset(DateTime.Now);
117+ }
118+ }
119+ }" ;
120+
121+ VerifyCSharpDiagnostic ( source ,
122+ new DiagnosticResult
123+ {
124+ Id = "INTL0202" ,
125+ Severity = DiagnosticSeverity . Warning ,
126+ Message = "Using 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' or 'new DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
127+ Locations =
128+ [
129+ new DiagnosticResultLocation ( "Test0.cs" , 10 , 38 )
130+ ]
131+ } ) ;
132+
133+ }
134+
135+ [ TestMethod ]
136+ public void UsageOfDateTimeOffsetConstructorWithDateTimeAndTimeSpan_ProducesNothing ( )
137+ {
138+ string source = @"
139+ using System;
140+
141+ namespace ConsoleApp45
142+ {
143+ class Program
144+ {
145+ static void Main(string[] args)
146+ {
147+ DateTimeOffset ofs = new DateTimeOffset(DateTime.Now, TimeSpan.Zero);
148+ }
149+ }
150+ }" ;
151+
152+ VerifyCSharpDiagnostic ( source ) ;
153+
154+ }
155+
156+ [ TestMethod ]
157+ public void UsageOfDateTimeOffsetConstructorWithYearMonthDay_ProducesNothing ( )
158+ {
159+ string source = @"
160+ using System;
161+
162+ namespace ConsoleApp46
163+ {
164+ class Program
165+ {
166+ static void Main(string[] args)
167+ {
168+ DateTimeOffset ofs = new DateTimeOffset(2022, 2, 2, 0, 0, 0, TimeSpan.Zero);
169+ }
170+ }
171+ }" ;
172+
173+ VerifyCSharpDiagnostic ( source ) ;
174+
175+ }
176+
177+ [ TestMethod ]
178+ public void UsageOfDateTimeOffsetConstructorWithNewDateTime_ProducesWarningMessage ( )
179+ {
180+ string source = @"
181+ using System;
182+
183+ namespace ConsoleApp47
184+ {
185+ class Program
186+ {
187+ static void Main(string[] args)
188+ {
189+ DateTimeOffset dto = new DateTimeOffset(new DateTime(2022, 2, 2));
190+ }
191+ }
192+ }" ;
193+
194+ VerifyCSharpDiagnostic ( source ,
195+ new DiagnosticResult
196+ {
197+ Id = "INTL0202" ,
198+ Severity = DiagnosticSeverity . Warning ,
199+ Message = "Using 'DateTimeOffset.implicit operator DateTimeOffset(DateTime)' or 'new DateTimeOffset(DateTime)' can result in unpredictable behavior" ,
200+ Locations =
201+ [
202+ new DiagnosticResultLocation ( "Test0.cs" , 10 , 38 )
203+ ]
204+ } ) ;
205+
206+ }
207+
104208 protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer ( )
105209 {
106210 return new Analyzers . BanImplicitDateTimeToDateTimeOffsetConversion ( ) ;
0 commit comments