Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.openrewrite.java.trait.Annotated;
import org.openrewrite.java.tree.*;
import org.openrewrite.marker.Markers;
import org.openrewrite.marker.SearchResult;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -39,6 +40,9 @@

public class TemporaryFolderToTempDir extends Recipe {

private static final MethodMatcher RULE_CHAIN_OUTER_RULE = new MethodMatcher("org.junit.rules.RuleChain outerRule(org.junit.rules.TestRule)");
private static final MethodMatcher RULE_CHAIN_AROUND = new MethodMatcher("org.junit.rules.RuleChain around(org.junit.rules.TestRule)");

@Getter
final String displayName = "Use JUnit Jupiter `@TempDir`";

Expand All @@ -48,9 +52,27 @@ public class TemporaryFolderToTempDir extends Recipe {
@Override
public TreeVisitor<?, ExecutionContext> getVisitor() {
return Preconditions.check(
new UsesType<>("org.junit.rules.TemporaryFolder", false),
Preconditions.and(
new UsesType<>("org.junit.rules.TemporaryFolder", false),
Preconditions.not(new UsesTemporaryFolderInRuleChain())
),
new TemporaryFolderToTempDirVisitor());
}

private static class UsesTemporaryFolderInRuleChain extends JavaIsoVisitor<ExecutionContext> {
@Override
public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, ExecutionContext ctx) {
J.MethodInvocation mi = super.visitMethodInvocation(method, ctx);
if (RULE_CHAIN_OUTER_RULE.matches(mi) || RULE_CHAIN_AROUND.matches(mi)) {
for (Expression arg : mi.getArguments()) {
if (TypeUtils.isOfClassType(arg.getType(), "org.junit.rules.TemporaryFolder")) {
return SearchResult.found(mi);
}
}
}
return mi;
}
}
}

class TemporaryFolderToTempDirVisitor extends JavaVisitor<ExecutionContext> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -864,4 +864,53 @@ private static File newFolder(File root, String... subDirs) throws IOException {
)
);
}

@Test
void temporaryFolderInRuleChainShouldNotBeConverted() {
//language=java
rewriteRun(
java(
"""
import org.junit.Rule;
import org.junit.rules.RuleChain;
import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestRule;

public class MyTest {
private TemporaryFolder tempFolder = new TemporaryFolder();

@Rule
public RuleChain chain = RuleChain.outerRule(tempFolder);
}
"""
)
);
}

@Test
void temporaryFolderInRuleChainAroundShouldNotBeConverted() {
//language=java
rewriteRun(
java(
"""
import org.junit.Rule;
import org.junit.rules.RuleChain;
import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestRule;
import org.junit.rules.ExternalResource;

public class MyTest {
private TemporaryFolder tempFolder = new TemporaryFolder();
private ExternalResource otherRule = new ExternalResource() {
@Override
protected void before() {}
};

@Rule
public RuleChain chain = RuleChain.outerRule(otherRule).around(tempFolder);
}
"""
)
);
}
}