mirror of
https://github.com/jlengrand/error-prone-support.git
synced 2026-03-10 08:11:25 +00:00
Add support for renaming setup and teardown methods
This commit is contained in:
@@ -7,6 +7,7 @@ import static com.google.errorprone.matchers.Matchers.isType;
|
||||
import static java.util.function.Predicate.not;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.errorprone.BugPattern;
|
||||
import com.google.errorprone.VisitorState;
|
||||
@@ -22,6 +23,7 @@ import com.google.errorprone.util.ASTHelpers;
|
||||
import com.sun.source.tree.AnnotationTree;
|
||||
import com.sun.source.tree.MethodTree;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import javax.lang.model.element.Modifier;
|
||||
|
||||
@@ -59,6 +61,13 @@ public final class JUnitMethodDeclarationCheck extends BugChecker implements Met
|
||||
isType("org.junit.jupiter.api.AfterEach"),
|
||||
isType("org.junit.jupiter.api.BeforeAll"),
|
||||
isType("org.junit.jupiter.api.BeforeEach")));
|
||||
private static final ImmutableMap<String, String> REPLACEMENTS =
|
||||
ImmutableMap.<String, String>builder()
|
||||
.put("org.junit.jupiter.api.AfterAll", "afterAll")
|
||||
.put("org.junit.jupiter.api.AfterEach", "tearDown")
|
||||
.put("org.junit.jupiter.api.BeforeAll", "beforeAll")
|
||||
.put("org.junit.jupiter.api.BeforeEach", "setUp")
|
||||
.build();
|
||||
|
||||
@Override
|
||||
public Description matchMethod(MethodTree tree, VisitorState state) {
|
||||
@@ -83,9 +92,32 @@ public final class JUnitMethodDeclarationCheck extends BugChecker implements Met
|
||||
tryCanonicalizeMethodName(tree, state).ifPresent(builder::merge);
|
||||
}
|
||||
|
||||
if (SETUP_OR_TEARDOWN_METHOD.matches(tree, state)) {
|
||||
tryCanonicalizeSetupOrTeardownMethod(tree, state).ifPresent(builder::merge);
|
||||
}
|
||||
|
||||
return builder.isEmpty() ? Description.NO_MATCH : describeMatch(tree, builder.build());
|
||||
}
|
||||
|
||||
private static Optional<SuggestedFix> tryCanonicalizeSetupOrTeardownMethod(
|
||||
MethodTree tree, VisitorState state) {
|
||||
Symbol.MethodSymbol symbol = ASTHelpers.getSymbol(tree);
|
||||
|
||||
return symbol.getAnnotationMirrors().stream()
|
||||
.map(compound -> compound.getAnnotationType().toString())
|
||||
.filter(REPLACEMENTS::containsKey)
|
||||
.filter(
|
||||
e ->
|
||||
!symbol
|
||||
.getSimpleName()
|
||||
.toString()
|
||||
.startsWith(
|
||||
Objects.requireNonNull(
|
||||
REPLACEMENTS.get(e)))) // , tree.getName().toString()))
|
||||
.findFirst()
|
||||
.map(e -> SuggestedFixes.renameMethod(tree, REPLACEMENTS.get(e), state));
|
||||
}
|
||||
|
||||
private static Optional<SuggestedFix> tryCanonicalizeMethodName(
|
||||
MethodTree tree, VisitorState state) {
|
||||
return Optional.ofNullable(ASTHelpers.getSymbol(tree))
|
||||
|
||||
@@ -24,15 +24,15 @@ public final class JUnitMethodDeclarationCheckTest {
|
||||
"import org.junit.jupiter.params.ParameterizedTest;",
|
||||
"",
|
||||
"class A {",
|
||||
" @BeforeAll void setUp1() {}",
|
||||
" @BeforeAll void beforeAll1() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
" @BeforeAll public void setUp2() {}",
|
||||
" @BeforeAll public void beforeAll2() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
" @BeforeAll protected void setUp3() {}",
|
||||
" @BeforeAll protected void beforeAll3() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
" @BeforeAll private void setUp4() {}",
|
||||
" @BeforeAll private void beforeAll4() {}",
|
||||
"",
|
||||
" @BeforeEach void setup5() {}",
|
||||
" @BeforeEach void setUp5() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
" @BeforeEach public void setUp6() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
@@ -48,13 +48,13 @@ public final class JUnitMethodDeclarationCheckTest {
|
||||
" // BUG: Diagnostic contains:",
|
||||
" @AfterEach private void tearDown4() {}",
|
||||
"",
|
||||
" @AfterAll void tearDown5() {}",
|
||||
" @AfterAll void afterAll5() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
" @AfterAll public void tearDown6() {}",
|
||||
" @AfterAll public void afterAll6() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
" @AfterAll protected void tearDown7() {}",
|
||||
" @AfterAll protected void afterAll7() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
" @AfterAll private void tearDown8() {}",
|
||||
" @AfterAll private void afterAll8() {}",
|
||||
"",
|
||||
" @Test void method1() {}",
|
||||
" // BUG: Diagnostic contains:",
|
||||
@@ -92,11 +92,11 @@ public final class JUnitMethodDeclarationCheckTest {
|
||||
"import org.junit.jupiter.params.ParameterizedTest;",
|
||||
"",
|
||||
"class B extends A {",
|
||||
" @Override @BeforeAll void setUp1() {}",
|
||||
" @Override @BeforeAll public void setUp2() {}",
|
||||
" @Override @BeforeAll protected void setUp3() {}",
|
||||
" @Override @BeforeAll void beforeAll1() {}",
|
||||
" @Override @BeforeAll public void beforeAll2() {}",
|
||||
" @Override @BeforeAll protected void beforeAll3() {}",
|
||||
"",
|
||||
" @Override @BeforeEach void setup5() {}",
|
||||
" @Override @BeforeEach void setUp5() {}",
|
||||
" @Override @BeforeEach public void setUp6() {}",
|
||||
" @Override @BeforeEach protected void setUp7() {}",
|
||||
"",
|
||||
@@ -104,9 +104,9 @@ public final class JUnitMethodDeclarationCheckTest {
|
||||
" @Override @AfterEach public void tearDown2() {}",
|
||||
" @Override @AfterEach protected void tearDown3() {}",
|
||||
"",
|
||||
" @Override @AfterAll void tearDown5() {}",
|
||||
" @Override @AfterAll public void tearDown6() {}",
|
||||
" @Override @AfterAll protected void tearDown7() {}",
|
||||
" @Override @AfterAll void afterAll5() {}",
|
||||
" @Override @AfterAll public void afterAll6() {}",
|
||||
" @Override @AfterAll protected void afterAll7() {}",
|
||||
"",
|
||||
" @Override @Test void method1() {}",
|
||||
" @Override @Test void testMethod2() {}",
|
||||
@@ -163,10 +163,10 @@ public final class JUnitMethodDeclarationCheckTest {
|
||||
"import org.junit.jupiter.params.ParameterizedTest;",
|
||||
"",
|
||||
"class A {",
|
||||
" @BeforeAll void setUp1() {}",
|
||||
" @BeforeEach void setUp2() {}",
|
||||
" @AfterEach void setUp3() {}",
|
||||
" @AfterAll void setUp4() {}",
|
||||
" @BeforeAll void beforeAll() {}",
|
||||
" @BeforeEach void setUp() {}",
|
||||
" @AfterEach void tearDown() {}",
|
||||
" @AfterAll void afterAll() {}",
|
||||
"",
|
||||
" @Test void foo() {}",
|
||||
" @ParameterizedTest void bar() {}",
|
||||
@@ -177,4 +177,36 @@ public final class JUnitMethodDeclarationCheckTest {
|
||||
"}")
|
||||
.doTest(TestMode.TEXT_MATCH);
|
||||
}
|
||||
|
||||
@Test
|
||||
void replaceSetupAndTeardownMethods() {
|
||||
refactoringTestHelper
|
||||
.addInputLines(
|
||||
"in/A.java",
|
||||
"import org.junit.jupiter.api.AfterAll;",
|
||||
"import org.junit.jupiter.api.AfterEach;",
|
||||
"import org.junit.jupiter.api.BeforeAll;",
|
||||
"import org.junit.jupiter.api.BeforeEach;",
|
||||
"",
|
||||
"class A {",
|
||||
" @BeforeAll public void setUp1() {}",
|
||||
" @BeforeEach protected void setUp2() {}",
|
||||
" @AfterEach private void setUp3() {}",
|
||||
" @AfterAll private void setUp4() {}",
|
||||
"}")
|
||||
.addOutputLines(
|
||||
"out/A.java",
|
||||
"import org.junit.jupiter.api.AfterAll;",
|
||||
"import org.junit.jupiter.api.AfterEach;",
|
||||
"import org.junit.jupiter.api.BeforeAll;",
|
||||
"import org.junit.jupiter.api.BeforeEach;",
|
||||
"",
|
||||
"class A {",
|
||||
" @BeforeAll void beforeAll() {}",
|
||||
" @BeforeEach void setUp() {}",
|
||||
" @AfterEach void tearDown() {}",
|
||||
" @AfterAll void afterAll() {}",
|
||||
"}")
|
||||
.doTest(TestMode.TEXT_MATCH);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user