You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
*[#5264](https://github.com/pmd/pmd/pull/5264): Fix #5261: \[java] Fix NPE with empty pattern list - [Clément Fournier](https://github.com/oowekyala) (@oowekyala)
84
89
*[#5269](https://github.com/pmd/pmd/pull/5269): Fix #5253: \[java] Support Boolean wrapper class for BooleanGetMethodName rule - [Aryant Tripathi](https://github.com/Aryant-Tripathi) (@Aryant-Tripathi)
Copy file name to clipboardExpand all lines: pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/SwitchStmtsShouldHaveDefault.xml
+137Lines changed: 137 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -19,6 +19,19 @@ public class Foo {
19
19
]]></code>
20
20
</test-code>
21
21
22
+
<test-code>
23
+
<description>empty switch is ok</description>
24
+
<expected-problems>0</expected-problems>
25
+
<code><![CDATA[
26
+
public class Foo {
27
+
void bar() {
28
+
int x = 2;
29
+
switch (x) { } // this is ok. The empty switch is detected by EmptyControlStatement
30
+
}
31
+
}
32
+
]]></code>
33
+
</test-code>
34
+
22
35
<test-code>
23
36
<description>simple ok case</description>
24
37
<expected-problems>0</expected-problems>
@@ -240,4 +253,128 @@ public enum GradeSystem {
240
253
}
241
254
]]></code>
242
255
</test-code>
256
+
257
+
<test-code>
258
+
<description>[java] SwitchStmtsShouldHaveDefault false positive with pattern matching #4813</description>
259
+
<expected-problems>0</expected-problems>
260
+
<code><![CDATA[
261
+
public sealed interface AcceptableResult permits Success, Warning {
262
+
public String message();
263
+
}
264
+
public final class Success implements AcceptableResult {
265
+
@Override
266
+
public String message() {
267
+
return "Success!";
268
+
}
269
+
}
270
+
public abstract class Failure {
271
+
abstract public String message();
272
+
}
273
+
public non-sealed class Warning extends Failure implements AcceptableResult {
274
+
@Override
275
+
public String message() {
276
+
return "Oopsie";
277
+
}
278
+
}
279
+
public class ProviderWarning extends Warning {
280
+
@Override
281
+
public String message() {
282
+
return "Ohoh";
283
+
}
284
+
}
285
+
public class Example {
286
+
public void test(AcceptableResult result) {
287
+
switch (result) {
288
+
case Warning failure -> System.out.println("WARNING " + failure.message());
289
+
case Success success -> System.out.println(success.message());
290
+
}
291
+
}
292
+
public void test2(AcceptableResult result) {
293
+
switch (result) {
294
+
case ProviderWarning failure: System.out.println("Provider WARNING " + failure.message()); break;
295
+
case Warning failure: System.out.println("WARNING " + failure.message()); break;
296
+
case Success success: System.out.println(success.message()); break;
297
+
}
298
+
}
299
+
public void test3(AcceptableResult result) {
300
+
switch (result) {
301
+
case ProviderWarning failure -> System.out.println("Provider WARNING " + failure.message());
302
+
case Success success -> System.out.println(success.message());
303
+
default -> System.out.println("default case");
304
+
}
305
+
}
306
+
}
307
+
]]></code>
308
+
</test-code>
309
+
310
+
<test-code>
311
+
<description>[java] SwitchStmtsShouldHaveDefault false positive with pattern matching #4813, example 2</description>
312
+
<expected-problems>0</expected-problems>
313
+
<code><![CDATA[
314
+
sealed interface S permits A, B {}
315
+
final class A implements S {}
316
+
sealed abstract class B implements S permits C, D {}
317
+
final class C extends B {}
318
+
final class D extends B {}
319
+
public class Example2 {
320
+
static int testSealedExhaustive(S s) {
321
+
switch(s) {
322
+
case A a -> { return 1; }
323
+
case C c -> { return 2; }
324
+
case D d -> { return 3; }
325
+
// case B b -> { return 4; } // not explicitly necessary, but possible
326
+
}
327
+
}
328
+
}
329
+
]]></code>
330
+
</test-code>
331
+
332
+
<test-code>
333
+
<description>With Record Patterns #4813</description>
334
+
<expected-problems>0</expected-problems>
335
+
<code><![CDATA[
336
+
record R(int i) {}
337
+
338
+
public class SwitchWithRecordPattern {
339
+
public void check(R r) {
340
+
switch(r) {
341
+
case R(int a) -> System.out.println(a);
342
+
}
343
+
}
344
+
}
345
+
]]></code>
346
+
</test-code>
347
+
348
+
<test-code>
349
+
<description>Multiple Case Constants</description>
0 commit comments