diff --git a/headless-services/commons/commons-rewrite/pom.xml b/headless-services/commons/commons-rewrite/pom.xml
index 07d258bc8..2c9fd116f 100644
--- a/headless-services/commons/commons-rewrite/pom.xml
+++ b/headless-services/commons/commons-rewrite/pom.xml
@@ -61,6 +61,11 @@
rewrite-groovy
${rewrite-version}
+
+ org.openrewrite
+ rewrite-kotlin
+ ${rewrite-kotlin-version}
+
org.openrewrite
rewrite-gradle
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ProjectParser.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ProjectParser.java
index 916ee90c3..2e3c4421c 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ProjectParser.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ProjectParser.java
@@ -28,7 +28,6 @@ import org.openrewrite.SourceFile;
import org.openrewrite.internal.ListUtils;
import org.openrewrite.java.JavaParser;
import org.openrewrite.java.marker.JavaSourceSet;
-import org.openrewrite.java.tree.J.CompilationUnit;
import org.openrewrite.marker.Marker;
import org.openrewrite.properties.PropertiesParser;
import org.openrewrite.text.PlainTextParser;
@@ -64,8 +63,8 @@ public abstract class ProjectParser {
Collection mainClasspath = ss.classpath();
javaParser.setClasspath(mainClasspath);
- List javaSources = ListUtils.map(javaParser.parseInputs(
- () -> getInputs(ss.javaSources.stream()).iterator(), projectDir, ctx).map(CompilationUnit.class::cast).collect(Collectors.toList()), addProvenance(projectProvenance));
+ List javaSources = ListUtils.map(javaParser.parseInputs(
+ () -> getInputs(ss.javaSources.stream()).iterator(), projectDir, ctx).collect(Collectors.toList()), addProvenance(projectProvenance));
JavaSourceSet javaSourceSet = ORAstUtils.addJavaSourceSet(javaSources, ss.name(),
mainClasspath);
sources.addAll(javaSources);
diff --git a/headless-services/commons/pom.xml b/headless-services/commons/pom.xml
index 987cc5d07..d9439418e 100644
--- a/headless-services/commons/pom.xml
+++ b/headless-services/commons/pom.xml
@@ -114,6 +114,7 @@
8.9.0-SNAPSHOT
+ 1.5.1
5.1.0-SNAPSHOT
1.3.2
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
index 673ba0663..96780a5f1 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
@@ -37,6 +37,7 @@ import org.eclipse.lsp4j.ApplyWorkspaceEditParams;
import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.eclipse.lsp4j.WorkspaceEdit;
import org.openrewrite.InMemoryExecutionContext;
+import org.openrewrite.ParseExceptionResult;
import org.openrewrite.Parser;
import org.openrewrite.Recipe;
import org.openrewrite.RecipeRun;
@@ -50,6 +51,7 @@ import org.openrewrite.config.YamlResourceLoader;
import org.openrewrite.internal.InMemoryLargeSourceSet;
import org.openrewrite.java.JavaParser;
import org.openrewrite.maven.MavenParser;
+import org.openrewrite.tree.ParseError;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.boot.app.BootJavaConfig;
@@ -368,12 +370,28 @@ public class RewriteRecipeRepository {
return null;
});
List sources = projectParser.parse(absoluteProjectDir, new InMemoryExecutionContext());
+ reportParseErrors(sources.stream().filter(ParseError.class::isInstance).map(ParseError.class::cast).collect(Collectors.toList()));
progressTask.progressEvent("Computing changes...");
RecipeRun reciperun = r.run(new InMemoryLargeSourceSet(sources), new InMemoryExecutionContext(e -> log.error("Recipe execution failed", e)));
List results = reciperun.getChangeset().getAllResults();
return ORDocUtils.createWorkspaceEdit(absoluteProjectDir, server.getTextDocumentService(), results);
}
+ private void reportParseErrors(List parseErrors) {
+ if (!parseErrors.isEmpty()) {
+ for (ParseError err : parseErrors) {
+ ParseExceptionResult parseException = err.getMarkers().findFirst(ParseExceptionResult.class).get();
+ if (parseException == null) {
+ log.warn("OpenRewrite failed to parse '{}' with unknown error", err.getSourcePath());
+ } else {
+ log.warn("OpenRewrite parser '{}' failed to parse '{}' with error:\n{}", parseException.getParserType(), err.getSourcePath(), parseException.getMessage());
+ }
+ }
+ server.getMessageService().warning("Failed to parse %d files (See Language Server :\n%s".formatted(parseErrors.size(), parseErrors
+ .stream().map(pe -> pe.getSourcePath().toFile().toString()).collect(Collectors.joining("\n"))));
+ }
+ }
+
private CompletableFuture> listProjectRefactoringRecipes(String uri) {
if (uri != null) {
/*