8270006: Switches with 'case null:' should be exhaustive
Reviewed-by: vromero
This commit is contained in:
parent
8f798b8222
commit
4f70759175
src/jdk.compiler/share/classes/com/sun/tools/javac/comp
test/langtools/tools/javac/patterns
@ -664,7 +664,11 @@ public class Flow {
|
||||
ListBuffer<PendingExit> prevPendingExits = pendingExits;
|
||||
pendingExits = new ListBuffer<>();
|
||||
scan(tree.selector);
|
||||
Set<Symbol> constants = tree.patternSwitch ? new HashSet<>() : null;
|
||||
boolean exhaustiveSwitch = tree.patternSwitch ||
|
||||
tree.cases.stream()
|
||||
.flatMap(c -> c.labels.stream())
|
||||
.anyMatch(l -> TreeInfo.isNull(l));
|
||||
Set<Symbol> constants = exhaustiveSwitch ? new HashSet<>() : null;
|
||||
for (List<JCCase> l = tree.cases; l.nonEmpty(); l = l.tail) {
|
||||
alive = Liveness.ALIVE;
|
||||
JCCase c = l.head;
|
||||
@ -686,7 +690,7 @@ public class Flow {
|
||||
l.tail.head.pos(),
|
||||
Warnings.PossibleFallThroughIntoCase);
|
||||
}
|
||||
if (!tree.hasTotalPattern && tree.patternSwitch &&
|
||||
if (!tree.hasTotalPattern && exhaustiveSwitch &&
|
||||
!TreeInfo.isErrorEnumSwitch(tree.selector, tree.cases) &&
|
||||
(constants == null || !isExhaustive(tree.selector.type, constants))) {
|
||||
log.error(tree, Errors.NotExhaustiveStatement);
|
||||
|
@ -185,4 +185,9 @@ public class SwitchErrors {
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
void exhaustiveAndNull(String s) {
|
||||
switch (s) {
|
||||
case null: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ SwitchErrors.java:91:9: compiler.err.not.exhaustive.statement
|
||||
SwitchErrors.java:97:9: compiler.err.not.exhaustive.statement
|
||||
SwitchErrors.java:104:9: compiler.err.not.exhaustive.statement
|
||||
SwitchErrors.java:164:9: compiler.err.not.exhaustive.statement
|
||||
SwitchErrors.java:189:9: compiler.err.not.exhaustive.statement
|
||||
- compiler.note.preview.filename: SwitchErrors.java, DEFAULT
|
||||
- compiler.note.preview.recompile
|
||||
44 errors
|
||||
45 errors
|
||||
|
Loading…
x
Reference in New Issue
Block a user