Skip to content

Commit 2c43283

Browse files
Laurens-Wtimtebeek
andauthored
Apply Kotlin style class reference in AddMockitoExtensionIfAnnotationsUsed (#890)
* Apply Kotlin style class reference on Kotlin source files * Minor improvement * Use `preVisit` to stop another unnecessary traversal * Remove unused imports * Remove excess newline --------- Co-authored-by: Tim te Beek <tim@moderne.io>
1 parent e9dab31 commit 2c43283

File tree

2 files changed

+90
-14
lines changed

2 files changed

+90
-14
lines changed

src/main/java/org/openrewrite/java/testing/mockito/AddMockitoExtensionIfAnnotationsUsed.java

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
1716
package org.openrewrite.java.testing.mockito;
1817

18+
import org.jspecify.annotations.Nullable;
1919
import org.openrewrite.ExecutionContext;
2020
import org.openrewrite.Recipe;
21+
import org.openrewrite.Tree;
2122
import org.openrewrite.TreeVisitor;
2223
import org.openrewrite.java.JavaIsoVisitor;
2324
import org.openrewrite.java.JavaParser;
@@ -26,6 +27,10 @@
2627
import org.openrewrite.java.search.FindTypes;
2728
import org.openrewrite.java.search.IsLikelyTest;
2829
import org.openrewrite.java.tree.J;
30+
import org.openrewrite.kotlin.KotlinIsoVisitor;
31+
import org.openrewrite.kotlin.KotlinParser;
32+
import org.openrewrite.kotlin.KotlinTemplate;
33+
import org.openrewrite.kotlin.tree.K;
2934

3035
import static java.util.Comparator.comparing;
3136
import static org.openrewrite.Preconditions.*;
@@ -60,20 +65,52 @@ public TreeVisitor<?, ExecutionContext> getVisitor() {
6065
// prevent addition if present
6166
not(hasExtendedWithAnnotation),
6267
or(hasAnyMockitoAnnotation)),
63-
new JavaIsoVisitor<ExecutionContext>() {
68+
new TreeVisitor<Tree, ExecutionContext>() {
6469
@Override
65-
public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext ctx) {
66-
67-
maybeAddImport("org.mockito.junit.jupiter.MockitoExtension");
68-
maybeAddImport("org.junit.jupiter.api.extension.ExtendWith");
69-
70-
return JavaTemplate.builder("@ExtendWith(MockitoExtension.class)")
71-
.imports("org.mockito.junit.jupiter.MockitoExtension")
72-
.imports("org.junit.jupiter.api.extension.ExtendWith")
73-
.javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "junit-jupiter-api", "mockito-junit-jupiter"))
74-
.build()
75-
.apply(getCursor(), classDecl.getCoordinates().addAnnotation(comparing(J.Annotation::getSimpleName)));
70+
public @Nullable Tree preVisit(Tree tree, ExecutionContext ctx) {
71+
stopAfterPreVisit();
72+
if (tree instanceof J.CompilationUnit) {
73+
return getJavaVisitor().visit(tree, ctx);
74+
}
75+
if (tree instanceof K.CompilationUnit) {
76+
return getKotlinVisitor().visit(tree, ctx);
77+
}
78+
return tree;
7679
}
7780
});
7881
}
82+
83+
private JavaIsoVisitor<ExecutionContext> getJavaVisitor() {
84+
return new JavaIsoVisitor<ExecutionContext>() {
85+
@Override
86+
public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext ctx) {
87+
maybeAddImport("org.mockito.junit.jupiter.MockitoExtension");
88+
maybeAddImport("org.junit.jupiter.api.extension.ExtendWith");
89+
90+
return JavaTemplate.builder("@ExtendWith(MockitoExtension.class)")
91+
.imports("org.mockito.junit.jupiter.MockitoExtension")
92+
.imports("org.junit.jupiter.api.extension.ExtendWith")
93+
.javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "junit-jupiter-api", "mockito-junit-jupiter"))
94+
.build()
95+
.apply(getCursor(), classDecl.getCoordinates().addAnnotation(comparing(J.Annotation::getSimpleName)));
96+
}
97+
};
98+
}
99+
100+
private KotlinIsoVisitor<ExecutionContext> getKotlinVisitor() {
101+
return new KotlinIsoVisitor<ExecutionContext>() {
102+
@Override
103+
public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext ctx) {
104+
maybeAddImport("org.mockito.junit.jupiter.MockitoExtension");
105+
maybeAddImport("org.junit.jupiter.api.extension.ExtendWith");
106+
107+
return KotlinTemplate.builder("@ExtendWith(MockitoExtension::class)")
108+
.imports("org.mockito.junit.jupiter.MockitoExtension")
109+
.imports("org.junit.jupiter.api.extension.ExtendWith")
110+
.parser(KotlinParser.builder().classpathFromResources(ctx, "junit-jupiter-api", "mockito-junit-jupiter"))
111+
.build()
112+
.apply(getCursor(), classDecl.getCoordinates().addAnnotation(comparing(J.Annotation::getSimpleName)));
113+
}
114+
};
115+
}
79116
}

src/test/java/org/openrewrite/java/testing/mockito/AddMockitoExtensionIfAnnotationsUsedTest.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ public void defaults(RecipeSpec spec) {
3434
spec.recipe(new AddMockitoExtensionIfAnnotationsUsed())
3535
.parser(JavaParser.fromJavaVersion()
3636
.classpathFromResources(new InMemoryExecutionContext(), "junit-jupiter-api", "mockito-junit-jupiter", "mockito-core")
37-
.dependsOn("public class Service {}"));
37+
.dependsOn("public class Service {}"))
38+
.parser(KotlinParser.builder()
39+
.classpathFromResources(new InMemoryExecutionContext(), "junit-jupiter-api", "mockito-junit-jupiter", "mockito-core")
40+
.dependsOn("class Service"));
3841
}
3942

4043
@DocumentExample
@@ -214,4 +217,40 @@ fun test() {}
214217
)
215218
);
216219
}
220+
221+
@Test
222+
void addForMockKotlin() {
223+
rewriteRun(
224+
//language=java
225+
kotlin(
226+
"""
227+
import org.junit.jupiter.api.Test
228+
import org.mockito.Mock
229+
230+
class Test {
231+
@Mock
232+
lateinit var service: Service
233+
234+
@Test
235+
fun test() {}
236+
}
237+
""",
238+
"""
239+
import org.junit.jupiter.api.Test
240+
import org.junit.jupiter.api.extension.ExtendWith
241+
import org.mockito.Mock
242+
import org.mockito.junit.jupiter.MockitoExtension
243+
244+
@ExtendWith(MockitoExtension::class)
245+
class Test {
246+
@Mock
247+
lateinit var service: Service
248+
249+
@Test
250+
fun test() {}
251+
}
252+
"""
253+
)
254+
);
255+
}
217256
}

0 commit comments

Comments
 (0)