|
1 | 1 | --- |
2 | 2 | hide: |
3 | 3 | - toc |
| 4 | +approved: RB |
4 | 5 | --- |
5 | 6 |
|
6 | 7 | # Java Coverage |
@@ -60,7 +61,7 @@ together with the relevant **JLS** section. |
60 | 61 | | `switch` statement | Java 1.0 (1996) | selector types widened: `enum` ([JSR 201](https://jcp.org/en/jsr/detail?id=201){target="_blank" rel="noopener"}, Java 5), `String` ([JSR 334](https://jcp.org/en/jsr/detail?id=334){target="_blank" rel="noopener"}, Java 7), both under [§14.11](https://docs.oracle.com/javase/specs/jls/se21/html/jls-14.html#jls-14.11){target="_blank" rel="noopener"}; arrow labels ([JEP 361](https://openjdk.org/jeps/361){target="_blank" rel="noopener"}, Java 14) & patterns ([JEP 441](https://openjdk.org/jeps/441){target="_blank" rel="noopener"}, Java 21); see below | :material-check-bold:{ style="color:#2e9e44" } | Lowered to an `if`-cascade. Integer selectors work; an `enum` selector needs *qualified* case labels (`case E.C:`); the standard unqualified `case C:` fails to resolve (see *Strings in `switch`* for `String`). | |
61 | 62 | | `instanceof` type test | Java 1.0 (1996) | pattern binding added Java 16 ([JEP 394](https://openjdk.org/jeps/394){target="_blank" rel="noopener"}, see below) | :material-check-bold:{ style="color:#2e9e44" } | Plain type test only; the pattern-binding form is separate. | |
62 | 63 | | Floating point (`float`, `double`) | Java 1.0 (1996) | strict-by-default restored in Java 17 ([JEP 306](https://openjdk.org/jeps/306){target="_blank" rel="noopener"}, [§15.4](https://docs.oracle.com/javase/specs/jls/se21/html/jls-15.html#jls-15.4){target="_blank" rel="noopener"}) | :material-check-bold:{ style="color:#2e9e44" } | Full taclet theory (`rules/float/`), including `strictfp`. | |
63 | | -| Generics | Java 5 (2004), [JSR 14](https://jcp.org/en/jsr/detail?id=14){target="_blank" rel="noopener"} | diamond ([JSR 334](https://jcp.org/en/jsr/detail?id=334){target="_blank" rel="noopener"}, Java 7, [§15.9.1](https://docs.oracle.com/javase/specs/jls/se21/html/jls-15.html#jls-15.9.1){target="_blank" rel="noopener"}), improved inference ([JSR 335](https://jcp.org/en/jsr/detail?id=335){target="_blank" rel="noopener"}, Java 8, [§18](https://docs.oracle.com/javase/specs/jls/se21/html/jls-18.html){target="_blank" rel="noopener"}), `var` lambda params ([JEP 323](https://openjdk.org/jeps/323){target="_blank" rel="noopener"}, Java 11) | :material-minus:{ style="color:#9aa0a6" } | Not supported in any form: `<T>`, `<T extends S>`, `<?>`, generic methods and diamond `<>`. See *[Programs with generics](../RemoveGenerics.md)*. | |
| 64 | +| Generics | Java 5 (2004), [JSR 14](https://jcp.org/en/jsr/detail?id=14){target="_blank" rel="noopener"} | diamond ([JSR 334](https://jcp.org/en/jsr/detail?id=334){target="_blank" rel="noopener"}, Java 7, [§15.9.1](https://docs.oracle.com/javase/specs/jls/se21/html/jls-15.html#jls-15.9.1){target="_blank" rel="noopener"}), improved inference ([JSR 335](https://jcp.org/en/jsr/detail?id=335){target="_blank" rel="noopener"}, Java 8, [§18](https://docs.oracle.com/javase/specs/jls/se21/html/jls-18.html){target="_blank" rel="noopener"}), `var` lambda params ([JEP 323](https://openjdk.org/jeps/323){target="_blank" rel="noopener"}, Java 11) | :material-minus:{ style="color:#9aa0a6" } | Not supported in any form: `<T>`, `<T extends S>`, wildcards, generic methods and diamond `<>`. See *[Programs with generics](../RemoveGenerics.md)*. | |
64 | 65 | | Enhanced `for` (for-each) | Java 5 (2004), [JSR 201](https://jcp.org/en/jsr/detail?id=201){target="_blank" rel="noopener"} | [§14.14.2](https://docs.oracle.com/javase/specs/jls/se21/html/jls-14.html#jls-14.14.2){target="_blank" rel="noopener"} (stable) | :material-check-bold:{ style="color:#2e9e44" } | Rewritten to an indexed / iterator loop. | |
65 | 66 | | Autoboxing / unboxing | Java 5 (2004), [JSR 201](https://jcp.org/en/jsr/detail?id=201){target="_blank" rel="noopener"} | [§5.1.7](https://docs.oracle.com/javase/specs/jls/se21/html/jls-5.html#jls-5.1.7){target="_blank" rel="noopener"}, [§5.1.8](https://docs.oracle.com/javase/specs/jls/se21/html/jls-5.html#jls-5.1.8){target="_blank" rel="noopener"} | :material-minus:{ style="color:#9aa0a6" } | Parses, but boxing/unboxing is not modelled (method resolution assumes its absence), so reasoning would be unsound. | |
66 | 67 | | Enums | Java 5 (2004), [JSR 201](https://jcp.org/en/jsr/detail?id=201){target="_blank" rel="noopener"} | [§8.9](https://docs.oracle.com/javase/specs/jls/se21/html/jls-8.html#jls-8.9){target="_blank" rel="noopener"} (stable) | ( :material-check-bold:{ style="color:#d19a00" } ) | Desugared to classes; declarations (including constant-specific bodies) load. Calculus support only partial. See also the `switch` row for the enum-label caveat. | |
|
0 commit comments