Skip to content

Commit dfd9cec

Browse files
authored
HasSourceSet should match any SourceFile, not just Java files (#6989)
The visitor used JavaIsoVisitor and checked for JavaSourceFile, which meant resource files (YAML, properties, etc.) in a source set were never matched. Change to a generic TreeVisitor that checks the JavaSourceSet marker on any SourceFile.
1 parent 9ce116a commit dfd9cec

2 files changed

Lines changed: 49 additions & 12 deletions

File tree

rewrite-java-test/src/test/java/org/openrewrite/java/search/HasSourceSetTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.openrewrite.test.RewriteTest;
2020

2121
import static org.openrewrite.java.Assertions.*;
22+
import static org.openrewrite.test.SourceSpecs.text;
2223

2324
class HasSourceSetTest implements RewriteTest {
2425

@@ -59,4 +60,45 @@ class Test {
5960
)
6061
);
6162
}
63+
64+
@Test
65+
void mainResources() {
66+
rewriteRun(
67+
spec -> spec.recipe(new HasSourceSet("main")),
68+
srcMainResources(
69+
text(
70+
"app.name=test",
71+
"~~>app.name=test",
72+
spec -> spec.path("application.properties")
73+
)
74+
)
75+
);
76+
}
77+
78+
@Test
79+
void testResourcesNotMatchedByMain() {
80+
rewriteRun(
81+
spec -> spec.recipe(new HasSourceSet("main")),
82+
srcTestResources(
83+
text(
84+
"app.name=test",
85+
spec -> spec.path("application.properties")
86+
)
87+
)
88+
);
89+
}
90+
91+
@Test
92+
void testResources() {
93+
rewriteRun(
94+
spec -> spec.recipe(new HasSourceSet("test")),
95+
srcTestResources(
96+
text(
97+
"app.name=test",
98+
"~~>app.name=test",
99+
spec -> spec.path("application.properties")
100+
)
101+
)
102+
);
103+
}
62104
}

rewrite-java/src/main/java/org/openrewrite/java/search/HasSourceSet.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,9 @@
1919
import lombok.Value;
2020
import org.jspecify.annotations.Nullable;
2121
import org.openrewrite.*;
22-
import org.openrewrite.java.JavaIsoVisitor;
2322
import org.openrewrite.java.marker.JavaSourceSet;
24-
import org.openrewrite.java.tree.J;
25-
import org.openrewrite.java.tree.JavaSourceFile;
2623
import org.openrewrite.marker.SearchResult;
2724

28-
import static java.util.Objects.requireNonNull;
29-
3025
@Value
3126
@EqualsAndHashCode(callSuper = false)
3227
public class HasSourceSet extends Recipe {
@@ -43,18 +38,18 @@ public class HasSourceSet extends Recipe {
4338

4439
@Override
4540
public TreeVisitor<?, ExecutionContext> getVisitor() {
46-
return new JavaIsoVisitor<ExecutionContext>() {
41+
return new TreeVisitor<Tree, ExecutionContext>() {
4742
@Override
48-
public J visit(@Nullable Tree tree, ExecutionContext ctx) {
49-
if (tree instanceof JavaSourceFile) {
50-
JavaSourceFile cu = (JavaSourceFile) requireNonNull(tree);
51-
if (cu.getMarkers().findFirst(JavaSourceSet.class)
43+
public @Nullable Tree visit(@Nullable Tree tree, ExecutionContext ctx) {
44+
if (tree instanceof SourceFile) {
45+
SourceFile sf = (SourceFile) tree;
46+
if (sf.getMarkers().findFirst(JavaSourceSet.class)
5247
.filter(s -> s.getName().equals(sourceSet))
5348
.isPresent()) {
54-
return SearchResult.found(cu);
49+
return SearchResult.found(sf);
5550
}
5651
}
57-
return (J) tree;
52+
return tree;
5853
}
5954
};
6055
}

0 commit comments

Comments
 (0)