Skip to content

Commit a1c7a7c

Browse files
cushonError Prone Team
authored andcommitted
Fix a crash in AssertThrowsMinimizer
PiperOrigin-RevId: 929784982
1 parent b443634 commit a1c7a7c

2 files changed

Lines changed: 55 additions & 0 deletions

File tree

core/src/main/java/com/google/errorprone/bugpatterns/AssertThrowsMinimizer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@ private boolean needsHoisting(ExpressionTree tree, Type exceptionType, VisitorSt
258258
switch (tree) {
259259
case MethodInvocationTree methodInvocationTree -> methodInvocationTree.getArguments();
260260
case NewClassTree newClassTree -> newClassTree.getArguments();
261+
case MemberReferenceTree memberReferenceTree ->
262+
ImmutableList.of(memberReferenceTree.getQualifierExpression());
261263
default -> throw new AssertionError(tree.getKind());
262264
};
263265
if (arguments.stream().noneMatch(a -> needsHoisting(a, exceptionType, state))) {

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

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,59 @@ Bar m() {
749749
.doTest();
750750
}
751751

752+
@Test
753+
public void memberReference() {
754+
compilationHelper
755+
.addInputLines(
756+
"RpcClientContext.java",
757+
"""
758+
package com.google.net.rpc3.client;
759+
760+
public class RpcClientContext {
761+
public static RpcClientContext create() {
762+
return null;
763+
}
764+
}
765+
""")
766+
.expectUnchanged()
767+
.addInputLines(
768+
"Test.java",
769+
"""
770+
import static org.junit.Assert.assertThrows;
771+
772+
import com.google.net.rpc3.client.RpcClientContext;
773+
import java.util.function.Supplier;
774+
775+
class Test {
776+
void consume(Supplier<RpcClientContext> r) {}
777+
778+
void m() {
779+
assertThrows(IllegalArgumentException.class, () -> consume(RpcClientContext::create));
780+
}
781+
}
782+
""")
783+
.expectUnchanged()
784+
.doTest();
785+
}
786+
787+
@Test
788+
public void staticMethodCall_receiverIsNotHoisted() {
789+
compilationHelper
790+
.addInputLines(
791+
"Test.java",
792+
"""
793+
import static org.junit.Assert.assertThrows;
794+
795+
class Test {
796+
void f() {
797+
assertThrows(RuntimeException.class, () -> Helper.onlyUnchecked());
798+
}
799+
}
800+
""")
801+
.expectUnchanged()
802+
.doTest();
803+
}
804+
752805
@Test
753806
public void newArray() {
754807
compilationHelper

0 commit comments

Comments
 (0)