Handle sources with parse errors gracefully when Recipe applied
This commit is contained in:
@@ -61,6 +61,11 @@
|
||||
<artifactId>rewrite-groovy</artifactId>
|
||||
<version>${rewrite-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.openrewrite</groupId>
|
||||
<artifactId>rewrite-kotlin</artifactId>
|
||||
<version>${rewrite-kotlin-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.openrewrite</groupId>
|
||||
<artifactId>rewrite-gradle</artifactId>
|
||||
|
||||
@@ -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<Path> mainClasspath = ss.classpath();
|
||||
javaParser.setClasspath(mainClasspath);
|
||||
|
||||
List<CompilationUnit> javaSources = ListUtils.map(javaParser.parseInputs(
|
||||
() -> getInputs(ss.javaSources.stream()).iterator(), projectDir, ctx).map(CompilationUnit.class::cast).collect(Collectors.toList()), addProvenance(projectProvenance));
|
||||
List<SourceFile> 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);
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
|
||||
<!-- Rewrite specific properties -->
|
||||
<rewrite-version>8.9.0-SNAPSHOT</rewrite-version>
|
||||
<rewrite-kotlin-version>1.5.1</rewrite-kotlin-version>
|
||||
<rewrite-spring-version>5.1.0-SNAPSHOT</rewrite-spring-version>
|
||||
<rewrite-gradle-tooling-api-version>1.3.2</rewrite-gradle-tooling-api-version>
|
||||
|
||||
|
||||
@@ -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<SourceFile> 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<Result> results = reciperun.getChangeset().getAllResults();
|
||||
return ORDocUtils.createWorkspaceEdit(absoluteProjectDir, server.getTextDocumentService(), results);
|
||||
}
|
||||
|
||||
private void reportParseErrors(List<ParseError> 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<List<Recipe>> listProjectRefactoringRecipes(String uri) {
|
||||
if (uri != null) {
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user