From 8de18fd4e311332ad21abafab9db290100b36e12 Mon Sep 17 00:00:00 2001 From: aboyko Date: Wed, 9 Aug 2023 23:48:13 -0400 Subject: [PATCH] Missed Rewrite adoption fixes --- .../commons/rewrite/java/DefineMethod.java | 17 +++- .../commons/rewrite/java/ORAstUtils.java | 38 ++------- .../NoRequestMappingAnnotationCodeAction.java | 6 +- .../order/EventPublicationRegistryTests.java | 82 ------------------- 4 files changed, 26 insertions(+), 117 deletions(-) delete mode 100644 headless-services/spring-boot-language-server/src/test/resources/test-projects/spring-modulith-example-full/src/test/java/org/example/order/EventPublicationRegistryTests.java diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/DefineMethod.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/DefineMethod.java index ba43f2699..601321449 100644 --- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/DefineMethod.java +++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/DefineMethod.java @@ -18,12 +18,14 @@ import java.util.stream.Collectors; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; import org.openrewrite.TreeVisitor; +import org.openrewrite.internal.ListUtils; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.MethodMatcher; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; +import org.openrewrite.java.tree.JavaType.FullyQualified; public class DefineMethod extends Recipe { @@ -87,11 +89,22 @@ public class DefineMethod extends Recipe { .classpath(classpath.stream().map(s -> Paths.get(s)).collect(Collectors.toList()))) .imports(imports.toArray(new String[imports.size()])).build(); - J.Block body = t.apply(getCursor(), classDecl.getBody().getCoordinates().addMethodDeclaration((m, n) -> 1)); + // TODO: why did this return ClassDEclaration rather than Block??? Figure this out!!! + J.ClassDeclaration templateClass = t.apply(getCursor(), classDecl.getBody().getCoordinates().addMethodDeclaration((m, n) -> 1)); + FullyQualified classType = c.getType(); + if (classType != null) { + J.Block body = templateClass.getBody().withStatements(ListUtils.map(templateClass.getBody().getStatements(), s -> { + if (s instanceof J.MethodDeclaration) { + J.MethodDeclaration m = (J.MethodDeclaration) s; + return m.withMethodType(m.getMethodType().withDeclaringType(classType)); + } + return s; + })); + c = c.withBody(body); + } for (String fq : imports) { maybeAddImport(fq); } - c = c.withBody(body); } } return c; diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java index 06f432592..82aa89673 100644 --- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java +++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java @@ -12,8 +12,6 @@ package org.springframework.ide.vscode.commons.rewrite.java; import java.io.ByteArrayInputStream; import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.nio.channels.ClosedByInterruptException; import java.nio.file.Files; import java.nio.file.Path; @@ -39,6 +37,7 @@ import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaParser.Builder; import org.openrewrite.java.JavaParsingException; import org.openrewrite.java.JavaVisitor; +import org.openrewrite.java.RemoveUnusedImports; import org.openrewrite.java.UpdateSourcePositions; import org.openrewrite.java.marker.JavaSourceSet; import org.openrewrite.java.tree.J; @@ -377,27 +376,6 @@ public class ORAstUtils { return fqName; } - @SuppressWarnings("unchecked") - private static List> getAfterVisitors(TreeVisitor visitor) { - try { - Method m = TreeVisitor.class.getDeclaredMethod("getAfterVisit"); - m.setAccessible(true); - return (List>) m.invoke(visitor); - } catch (Exception e) { - return Collections.emptyList(); - } - } - - private static void makeVisitorNonTopLevel(TreeVisitor visitor) { - try { - Field f = TreeVisitor.class.getDeclaredField("afterVisit"); - f.setAccessible(true); - f.set(visitor, new ArrayList<>()); - } catch (Exception e) { - // ignore - } - } - public static Recipe nodeRecipe(JavaVisitor v, Predicate condition) { return new NodeRecipe((JavaVisitor) v, condition); } @@ -415,8 +393,13 @@ public class ORAstUtils { this.visitor = treeVisitor; this.condition = condition; } - + @Override + public List getRecipeList() { + return List.of(new RemoveUnusedImports()); + } + + @Override public String getDisplayName() { return ""; } @@ -430,12 +413,7 @@ public class ORAstUtils { if (tree instanceof J) { J t = (J) tree; if (condition.test(t)) { - makeVisitorNonTopLevel(visitor); - t = (J) visitor.visit(t, ctx, getCursor()); - for (TreeVisitor v : getAfterVisitors(visitor)) { - doAfterVisit(v); - } - return t; + return (J) visitor.visit(t, ctx, getCursor()); } } return super.visit(tree, ctx); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRequestMappingAnnotationCodeAction.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRequestMappingAnnotationCodeAction.java index 2a95eb75c..78103a2d4 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRequestMappingAnnotationCodeAction.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRequestMappingAnnotationCodeAction.java @@ -48,9 +48,9 @@ public class NoRequestMappingAnnotationCodeAction implements RecipeCodeActionDes String uri = getCursor().firstEnclosing(SourceFile.class).getSourcePath().toUri().toASCIIString(); FixAssistMarker fixAssistMarker = new FixAssistMarker(Tree.randomId(), getId()) .withFixes( - new FixDescriptor(ID, List.of(uri), RecipeCodeActionDescriptor.buildLabel(LABEL, RecipeScope.NODE)) - .withRangeScope(a.getMarkers().findFirst(Range.class).get()) - .withRecipeScope(RecipeScope.NODE), +// new FixDescriptor(ID, List.of(uri), RecipeCodeActionDescriptor.buildLabel(LABEL, RecipeScope.NODE)) +// .withRangeScope(a.getMarkers().findFirst(Range.class).get()) +// .withRecipeScope(RecipeScope.NODE), new FixDescriptor(ID, List.of(uri), RecipeCodeActionDescriptor.buildLabel(LABEL, RecipeScope.FILE)) .withRecipeScope(RecipeScope.FILE), new FixDescriptor(ID, List.of(uri), RecipeCodeActionDescriptor.buildLabel(LABEL, RecipeScope.PROJECT)) diff --git a/headless-services/spring-boot-language-server/src/test/resources/test-projects/spring-modulith-example-full/src/test/java/org/example/order/EventPublicationRegistryTests.java b/headless-services/spring-boot-language-server/src/test/resources/test-projects/spring-modulith-example-full/src/test/java/org/example/order/EventPublicationRegistryTests.java deleted file mode 100644 index 92adb7718..000000000 --- a/headless-services/spring-boot-language-server/src/test/resources/test-projects/spring-modulith-example-full/src/test/java/org/example/order/EventPublicationRegistryTests.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2022-2023 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.example.order; - -import static org.assertj.core.api.Assertions.*; - -import org.example.order.Order; -import org.example.order.OrderCompleted; -import org.example.order.OrderManagement; -import org.example.order.EventPublicationRegistryTests.FailingAsyncTransactionalEventListener; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; -import org.springframework.modulith.ApplicationModuleListener; -import org.springframework.modulith.events.EventPublicationRegistry; -import org.springframework.modulith.test.ApplicationModuleTest; -import org.springframework.modulith.test.Scenario; -import org.springframework.test.annotation.DirtiesContext; - -/** - * A show case for how the Spring Modulith application event publication registry keeps track of incomplete publications - * for failing transactional event listeners - * - * @author Oliver Drotbohm - */ -@ApplicationModuleTest -@Import(FailingAsyncTransactionalEventListener.class) -@DirtiesContext -@RequiredArgsConstructor -class EventPublicationRegistryTests { - - private final OrderManagement orders; - private final EventPublicationRegistry registry; - private final FailingAsyncTransactionalEventListener listener; - - @Test - void leavesPublicationIncompleteForFailingListener(Scenario scenario) throws Exception { - - var order = new Order(); - - scenario.stimulate(() -> orders.complete(order)) - .andWaitForStateChange(() -> listener.getEx()) - .andVerify(__ -> { - assertThat(registry.findIncompletePublications()).hasSize(1); - }); - } - - static class FailingAsyncTransactionalEventListener { - - @Getter Exception ex; - - @ApplicationModuleListener - void foo(OrderCompleted event) { - - var exception = new IllegalStateException("¯\\_(ツ)_/¯"); - - try { - - throw exception; - - } finally { - this.ex = exception; - } - } - } -}