diff --git a/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgument.java b/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgument.java index a4c332221..c3f9506b5 100644 --- a/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgument.java +++ b/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgument.java @@ -80,7 +80,8 @@ public final class IllegalSafeLoggingArgument extends BugChecker .named("of"); private static Type resolveParameterType(Type input, ExpressionTree tree, VisitorState state) { - if (input instanceof TypeVar) { + // Important not to call getReceiver/getReceiverType on a NewClassTree, which throws. + if (input instanceof TypeVar && tree instanceof MethodInvocationTree) { TypeVar typeVar = (TypeVar) input; Type receiver = ASTHelpers.getReceiverType(tree); diff --git a/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgumentTest.java b/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgumentTest.java index 2f48a13ec..4d58fc746 100644 --- a/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgumentTest.java +++ b/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgumentTest.java @@ -1574,6 +1574,24 @@ public void testBindingToSafeMethodTypeVariable() { .doTest(); } + @Test + public void testTypeVariablesInConstructor() { + helper().addSourceLines( + "Test.java", + "import com.palantir.logsafe.*;", + "import java.util.*;", + "import java.util.function.*;", + "class Test {", + " static final class Foo {", + " Foo(T input) {}", + " }", + " static Foo f(Supplier value) {", + " return new Foo<>(value.get());", + " }", + "}") + .doTest(); + } + private CompilationTestHelper helper() { return CompilationTestHelper.newInstance(IllegalSafeLoggingArgument.class, getClass()); }