@@ -136,6 +136,159 @@ class CodeActionTest extends DottyTest:
136136 afterPhase = " patternMatcher"
137137 )
138138
139+ @ Test def removeNN =
140+ val ctxx = newContext
141+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
142+ checkCodeAction(
143+ code =
144+ """ |val s: String|Null = "foo".nn
145+ |""" .stripMargin,
146+ title = " Remove unnecessary .nn" ,
147+ expected =
148+ """ |val s: String|Null = "foo"
149+ |""" .stripMargin,
150+ ctxx = ctxx
151+ )
152+
153+
154+ @ Test def removeNN2 =
155+ val ctxx = newContext
156+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
157+ checkCodeAction(
158+ code =
159+ """ val s: String|Null = null.nn
160+ |""" .stripMargin,
161+ title = " Remove unnecessary .nn" ,
162+ expected =
163+ """ val s: String|Null = null
164+ |""" .stripMargin,
165+ ctxx = ctxx
166+ )
167+
168+ @ Test def addNN1 =
169+ val ctxx = newContext
170+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
171+ checkCodeAction(
172+ code =
173+ """ val s: String|Null = ???
174+ | val t: String = s""" .stripMargin,
175+ title = " Add .nn" ,
176+ expected =
177+ """ val s: String|Null = ???
178+ | val t: String = s.nn""" .stripMargin,
179+ ctxx = ctxx
180+ )
181+
182+ @ Test def addNN2 =
183+ val ctxx = newContext
184+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
185+ checkCodeAction(
186+ code =
187+ """ implicit class infixOpTest(val s1: String) extends AnyVal {
188+ | def q(s2: String): String | Null = null
189+ |}
190+ | val s: String = ???
191+ | val t: String = s q s""" .stripMargin,
192+ title = " Add .nn" ,
193+ expected =
194+ """ implicit class infixOpTest(val s1: String) extends AnyVal {
195+ | def q(s2: String): String | Null = null
196+ |}
197+ | val s: String = ???
198+ | val t: String = (s q s).nn""" .stripMargin,
199+ ctxx = ctxx
200+ )
201+
202+ @ Test def addNN3 =
203+ val ctxx = newContext
204+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
205+ checkCodeAction(
206+ code =
207+ """ implicit class infixOpTest(val s1: String) extends AnyVal {
208+ | def q(s2: String, s3: String): String | Null = null
209+ |}
210+ | val s: String = ???
211+ | val t: String = s q (s, s)""" .stripMargin,
212+ title = " Add .nn" ,
213+ expected =
214+ """ implicit class infixOpTest(val s1: String) extends AnyVal {
215+ | def q(s2: String, s3: String): String | Null = null
216+ |}
217+ | val s: String = ???
218+ | val t: String = (s q (s, s)).nn""" .stripMargin,
219+ ctxx = ctxx
220+ )
221+
222+ @ Test def addNN4 =
223+ val ctxx = newContext
224+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
225+ checkCodeAction(
226+ code =
227+ """ implicit class infixOpTest(val s1: String) extends AnyVal {
228+ | def q(s2: String, s3: String): String | Null = null
229+ |}
230+ | val s: String = ???
231+ | val t: String = s.q(s, s)""" .stripMargin,
232+ title = " Add .nn" ,
233+ expected =
234+ """ implicit class infixOpTest(val s1: String) extends AnyVal {
235+ | def q(s2: String, s3: String): String | Null = null
236+ |}
237+ | val s: String = ???
238+ | val t: String = s.q(s, s).nn""" .stripMargin,
239+ ctxx = ctxx
240+ )
241+
242+ @ Test def addNN5 =
243+ val ctxx = newContext
244+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
245+ checkCodeAction(
246+ code =
247+ """ val s: String | Null = ???
248+ |val t: String = s match {
249+ | case _: String => "foo"
250+ | case _ => s
251+ |}""" .stripMargin,
252+ title = " Add .nn" ,
253+ expected =
254+ """ val s: String | Null = ???
255+ |val t: String = s match {
256+ | case _: String => "foo"
257+ | case _ => s.nn
258+ |}""" .stripMargin,
259+ ctxx = ctxx
260+ )
261+
262+ @ Test def addNN6 =
263+ val ctxx = newContext
264+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
265+ checkCodeAction(
266+ code =
267+ """ val s: String | Null = ???
268+ |val t: String = if (s != null) "foo" else s""" .stripMargin,
269+ title = " Add .nn" ,
270+ expected =
271+ """ val s: String | Null = ???
272+ |val t: String = if (s != null) "foo" else s.nn""" .stripMargin,
273+ ctxx = ctxx
274+ )
275+
276+ @ Test def addNN7 =
277+ val ctxx = newContext
278+ ctxx.setSetting(ctxx.settings.YexplicitNulls , true )
279+ checkCodeAction(
280+ code =
281+ """ given ctx: String | Null = null
282+ |def f(using c: String): String = c
283+ |val s: String = f(using ctx)""" .stripMargin,
284+ title = " Add .nn" ,
285+ expected =
286+ """ given ctx: String | Null = null
287+ |def f(using c: String): String = c
288+ |val s: String = f(using ctx.nn)""" .stripMargin,
289+ ctxx = ctxx
290+ )
291+
139292 // Make sure we're not using the default reporter, which is the ConsoleReporter,
140293 // meaning they will get reported in the test run and that's it.
141294 private def newContext =
0 commit comments