Skip to content

Commit 1ad73c2

Browse files
cushonError Prone Team
authored and
Error Prone Team
committed
Handle yield in Reachability
PiperOrigin-RevId: 737678874
1 parent b1b521f commit 1ad73c2

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

check_api/src/main/java/com/google/errorprone/util/Reachability.java

+12
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.sun.source.tree.TryTree;
5151
import com.sun.source.tree.VariableTree;
5252
import com.sun.source.tree.WhileLoopTree;
53+
import com.sun.source.tree.YieldTree;
5354
import com.sun.source.util.SimpleTreeVisitor;
5455
import com.sun.tools.javac.code.Symbol.MethodSymbol;
5556
import com.sun.tools.javac.tree.JCTree;
@@ -419,6 +420,12 @@ public Boolean visitReturn(ReturnTree tree, Void unused) {
419420
return false;
420421
}
421422

423+
/* A yield statement cannot complete normally. */
424+
@Override
425+
public Boolean visitYield(YieldTree tree, Void unused) {
426+
return false;
427+
}
428+
422429
/* A throw statement cannot complete normally. */
423430
@Override
424431
public Boolean visitThrow(ThrowTree tree, Void unused) {
@@ -459,5 +466,10 @@ public Boolean visitTry(TryTree that, Void unused) {
459466
}
460467
return completes;
461468
}
469+
470+
@Override
471+
protected Boolean defaultAction(Tree tree, Void unused) {
472+
throw new IllegalStateException(tree.getKind().toString());
473+
}
462474
}
463475
}

core/src/test/java/com/google/errorprone/bugpatterns/PatternMatchingInstanceofTest.java

+29
Original file line numberDiff line numberDiff line change
@@ -698,4 +698,33 @@ public Class stringify(Object o) {
698698
""")
699699
.doTest(BugCheckerRefactoringTestHelper.TestMode.TEXT_MATCH);
700700
}
701+
702+
@Test
703+
public void switchExpression() {
704+
assume().that(Runtime.version().feature()).isAtLeast(21);
705+
helper
706+
.addInputLines(
707+
"Test.java",
708+
"""
709+
class T {
710+
interface Filter {
711+
Object child();
712+
}
713+
714+
int f(Object o) {
715+
return switch (o) {
716+
case Filter filter -> {
717+
if (!(filter.child() instanceof Integer)) {
718+
yield 0;
719+
}
720+
yield 1;
721+
}
722+
default -> 2;
723+
};
724+
}
725+
}
726+
""")
727+
.expectUnchanged()
728+
.doTest();
729+
}
701730
}

0 commit comments

Comments
 (0)