A couple of other things to consider:
1. C-style array declaration is not allowed in patterns.
Wish we could phase out C-style array decls entirely...
2. For local variable declaration, the initializer can omit `new int[]` part:
int data[] = {1, 2, 3}
Good catch. For some reason I was thinking this was only for fields,
but it works for locals too. There's a future story about collection
literals, but it is unlikely we'll be able to retcon exactly this
syntax. (#include "bikeshed-deterrent.h")
We may be able to address this by including a conversion from an array
initializer to the target type of a pattern in an unconditional pattern
assignment context.
3. Local variable type may affect the initializer type (e.g.
List<String> list = List.of()). What about patterns? Can we say that a
`List<String> list` pattern is a total pattern over `List.of()`
expression type?
Yes, patterns have a notion of a target type, which is the type they
have declared as their matchee. For a type pattern `T t`, that target
type is T. We already evaluate whether the pattern is applicable to the
matchee using this type.