diff --git a/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/PreferAssertj.java b/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/PreferAssertj.java index 121defb99..af8dd9bb0 100644 --- a/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/PreferAssertj.java +++ b/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/PreferAssertj.java @@ -70,6 +70,11 @@ public final class PreferAssertj extends BugChecker implements BugChecker.Method "junit.framework.TestCase", "junit.framework.Assert"); + // Must match everything otherwise matched by this check, used to avoid + // additional checks for each method invocation. + private static final Matcher FAST_CHECK = MethodMatchers.staticMethod() + .onClassAny(LEGACY_ASSERT_CLASSES); + private static final Matcher ASSERT_TRUE = MethodMatchers.staticMethod() .onClassAny(LEGACY_ASSERT_CLASSES) @@ -223,6 +228,11 @@ public final class PreferAssertj extends BugChecker implements BugChecker.Method @Override @SuppressWarnings({"CyclomaticComplexity", "MethodLength"}) public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState state) { + // We check a lot of methods, the fast check allows us to quickly rule out most invocations + // without individually checking each of the more specific patterns. + if (!FAST_CHECK.matches(tree, state)) { + return Description.NO_MATCH; + } if (ASSERT_TRUE.matches(tree, state)) { return withAssertThat(tree, state, 0, (assertThat, fix) -> fix.replace(tree, assertThat + ".isTrue()")); } diff --git a/changelog/@unreleased/pr-875.v2.yml b/changelog/@unreleased/pr-875.v2.yml new file mode 100644 index 000000000..af40b446f --- /dev/null +++ b/changelog/@unreleased/pr-875.v2.yml @@ -0,0 +1,5 @@ +type: improvement +improvement: + description: Improve performannce of error prone PreferAssertj check + links: + - https://github.com/palantir/gradle-baseline/pull/875