JavaSourceSet marker name (main or test)
This commit is contained in:
@@ -47,6 +47,7 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.ide.vscode.commons.java.IClasspathUtil;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
|
||||
import org.springframework.ide.vscode.commons.rewrite.maven.MavenProjectParser;
|
||||
import org.springframework.ide.vscode.commons.util.ExceptionUtil;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
|
||||
@@ -418,5 +419,11 @@ public class ORAstUtils {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static String getSourceSetName(IJavaProject project, Path sourcePath) {
|
||||
if (IClasspathUtil.getProjectTestJavaSources(project.getClasspath()).anyMatch(f -> sourcePath.startsWith(f.toPath()))) {
|
||||
return MavenProjectParser.TEST;
|
||||
} else {
|
||||
return MavenProjectParser.MAIN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,9 @@ import org.slf4j.LoggerFactory;
|
||||
*/
|
||||
public class MavenProjectParser {
|
||||
|
||||
private static final Pattern mavenWrapperVersionPattern = Pattern.compile(".*apache-maven/(.*?)/.*");
|
||||
public static final String TEST = "test";
|
||||
public static final String MAIN = "main";
|
||||
private static final Pattern mavenWrapperVersionPattern = Pattern.compile(".*apache-maven/(.*?)/.*");
|
||||
private static final Logger logger = LoggerFactory.getLogger(MavenProjectParser.class);
|
||||
|
||||
private final MavenParser mavenParser;
|
||||
@@ -123,7 +125,7 @@ public class MavenProjectParser {
|
||||
sourceFiles.add(addProjectProvenance(maven, projectProvenance));
|
||||
|
||||
// List<Path> dependencies = downloadArtifacts(getResolvedPom(maven).getDependencies().get(Scope.Compile));
|
||||
javaParser.setSourceSet("main");
|
||||
javaParser.setSourceSet(MAIN);
|
||||
javaParser.setClasspath(dependencies);
|
||||
sourceFiles.addAll(ListUtils.map(javaParser.parseInputs(
|
||||
getJavaSources(getModel(maven).getRequested(), projectDirectory, ctx, parserInputProvider), projectDirectory, ctx), addProvenance(projectProvenance)));
|
||||
@@ -131,7 +133,7 @@ public class MavenProjectParser {
|
||||
parseResources(getResources(getModel(maven).getRequested(), projectDirectory, ctx, parserInputProvider), projectDirectory, sourceFiles, projectProvenance, javaParser.getSourceSet(ctx));
|
||||
|
||||
// List<Path> testDependencies = downloadArtifacts(maven.getModel().getDependencies(Scope.Test));
|
||||
javaParser.setSourceSet("test");
|
||||
javaParser.setSourceSet(TEST);
|
||||
// javaParser.setClasspath(testDependencies);
|
||||
sourceFiles.addAll(ListUtils.map(javaParser.parseInputs(
|
||||
getTestJavaSources(getModel(maven).getRequested(), projectDirectory, ctx, parserInputProvider), projectDirectory, ctx), addProvenance(projectProvenance)));
|
||||
|
||||
@@ -12,6 +12,7 @@ package org.springframework.ide.vscode.boot.java.rewrite;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.net.URI;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -225,14 +226,17 @@ public class RewriteCompilationUnitCache implements DocumentContentProvider, Dis
|
||||
logger.debug("Parsing CU {}", uri);
|
||||
JavaParser javaParser = loadJavaParser(project);
|
||||
|
||||
Input input = new Input(Paths.get(uri), () -> {
|
||||
Path sourcePath = Paths.get(uri);
|
||||
javaParser.setSourceSet(ORAstUtils.getSourceSetName(project, sourcePath));
|
||||
|
||||
Input input = new Input(sourcePath, () -> {
|
||||
try {
|
||||
return new ByteArrayInputStream(fetchContent(uri).getBytes());
|
||||
} catch (Exception e) {
|
||||
throw new IllegalStateException("Unexpected error fetching document content");
|
||||
}
|
||||
});
|
||||
List<CompilationUnit> cus = ORAstUtils.parseInputs(javaParser, List.of(input));
|
||||
List<CompilationUnit> cus = ORAstUtils.parseInputs(javaParser, List.of(input));
|
||||
CompilationUnit cu = cus.get(0);
|
||||
|
||||
if (cu != null) {
|
||||
|
||||
@@ -279,16 +279,6 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
|
||||
return l;
|
||||
}
|
||||
|
||||
public List<RecipeCodeActionDescriptor> getApplicableCodeActionRecipeDescriptors(IJavaProject project, List<RecipeCodeActionDescriptor> descriptors) {
|
||||
List<RecipeCodeActionDescriptor> filtered = new ArrayList<>(descriptors.size());
|
||||
for (RecipeCodeActionDescriptor d : descriptors) {
|
||||
if (d.isApplicable(project)) {
|
||||
filtered.add(d);
|
||||
}
|
||||
}
|
||||
return filtered;
|
||||
}
|
||||
|
||||
public CompilationUnit mark(List<? extends RecipeCodeActionDescriptor> descriptors, CompilationUnit compilationUnit) {
|
||||
CompilationUnit cu = compilationUnit;
|
||||
for (RecipeCodeActionDescriptor d : descriptors) {
|
||||
|
||||
@@ -12,6 +12,7 @@ package org.springframework.ide.vscode.boot.java.rewrite;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.net.URI;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -37,6 +38,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.ide.vscode.boot.app.BootJavaConfig;
|
||||
import org.springframework.ide.vscode.boot.java.reconcilers.JavaReconciler;
|
||||
import org.springframework.ide.vscode.commons.java.IClasspathUtil;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.java.SpringProjectUtil;
|
||||
import org.springframework.ide.vscode.commons.languageserver.quickfix.Quickfix.QuickfixData;
|
||||
@@ -50,6 +52,7 @@ import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDes
|
||||
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
|
||||
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
|
||||
import org.springframework.ide.vscode.commons.rewrite.java.ORAstUtils;
|
||||
import org.springframework.ide.vscode.commons.rewrite.maven.MavenProjectParser;
|
||||
import org.springframework.ide.vscode.commons.util.text.IDocument;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
|
||||
@@ -136,26 +139,46 @@ public class RewriteReconciler implements JavaReconciler {
|
||||
public Map<IDocument, Collection<ReconcileProblem>> reconcile(IJavaProject project, List<TextDocument> docs,
|
||||
Function<TextDocument, IProblemCollector> problemCollectorFactory) {
|
||||
Map<IDocument, Collection<ReconcileProblem>> allProblems = new HashMap<>();
|
||||
List<Path> testSourceFolders = IClasspathUtil.getProjectTestJavaSources(project.getClasspath()).map(f -> f.toPath()).collect(Collectors.toList());
|
||||
List<TextDocument> testSources = new ArrayList<>(docs.size());
|
||||
List<TextDocument> mainSources = new ArrayList<>(docs.size());
|
||||
for (TextDocument d : docs) {
|
||||
Path p = Paths.get(URI.create(d.getUri()));
|
||||
if (testSourceFolders.stream().anyMatch(t -> p.startsWith(t))) {
|
||||
testSources.add(d);
|
||||
} else {
|
||||
mainSources.add(d);
|
||||
}
|
||||
}
|
||||
JavaParser javaParser = ORAstUtils.createJavaParser(project);
|
||||
javaParser.setSourceSet(MavenProjectParser.MAIN);
|
||||
allProblems.putAll(doReconcile(project, mainSources, problemCollectorFactory, javaParser));
|
||||
javaParser.setSourceSet(MavenProjectParser.TEST);
|
||||
allProblems.putAll(doReconcile(project, testSources, problemCollectorFactory, javaParser));
|
||||
return allProblems;
|
||||
}
|
||||
|
||||
private Map<IDocument, Collection<ReconcileProblem>> doReconcile(IJavaProject project, List<TextDocument> docs,
|
||||
Function<TextDocument, IProblemCollector> problemCollectorFactory, JavaParser javaParser) {
|
||||
Map<IDocument, Collection<ReconcileProblem>> allProblems = new HashMap<>();
|
||||
|
||||
if (config.isRewriteReconcileEnabled()) {
|
||||
if (javaParser != null && config.isRewriteReconcileEnabled()) {
|
||||
try {
|
||||
List<RecipeCodeActionDescriptor> descriptors = getProblemRecipeDescriptors(project);
|
||||
|
||||
JavaParser javaParser = ORAstUtils.createJavaParser(project);
|
||||
if (javaParser != null) {
|
||||
List<CompilationUnit> cus = ORAstUtils.parseInputs(javaParser, docs.stream().map(d -> new Parser.Input(Paths.get(URI.create(d.getUri())), () -> {
|
||||
return new ByteArrayInputStream(d.get().getBytes());
|
||||
})).collect(Collectors.toList()));
|
||||
|
||||
if (!descriptors.isEmpty()) {
|
||||
|
||||
for(int i = 0; i < cus.size(); i++) {
|
||||
final IDocument doc = docs.get(i);
|
||||
List<ReconcileProblem> problems = new ArrayList<>();
|
||||
collectProblems(descriptors, doc, cus.get(i), problems::add);
|
||||
if (!problems.isEmpty()) {
|
||||
allProblems.put(doc, problems);
|
||||
}
|
||||
|
||||
List<CompilationUnit> cus = ORAstUtils.parseInputs(javaParser,
|
||||
docs.stream().map(d -> new Parser.Input(Paths.get(URI.create(d.getUri())), () -> {
|
||||
return new ByteArrayInputStream(d.get().getBytes());
|
||||
})).collect(Collectors.toList()));
|
||||
|
||||
if (!descriptors.isEmpty()) {
|
||||
|
||||
for (int i = 0; i < cus.size(); i++) {
|
||||
final IDocument doc = docs.get(i);
|
||||
List<ReconcileProblem> problems = new ArrayList<>();
|
||||
collectProblems(descriptors, doc, cus.get(i), problems::add);
|
||||
if (!problems.isEmpty()) {
|
||||
allProblems.put(doc, problems);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -196,7 +219,7 @@ public class RewriteReconciler implements JavaReconciler {
|
||||
List<FixAssistMarker> markers = t.getMarkers().findAll(FixAssistMarker.class);
|
||||
for (FixAssistMarker m : markers) {
|
||||
for (ReconcileProblem problem : createProblems(doc, m, t)) {
|
||||
problemHandler.accept(problem);;
|
||||
problemHandler.accept(problem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,11 @@ import org.openrewrite.SourceFile;
|
||||
import org.openrewrite.Tree;
|
||||
import org.openrewrite.java.JavaIsoVisitor;
|
||||
import org.openrewrite.java.JavaVisitor;
|
||||
import org.openrewrite.java.marker.JavaSourceSet;
|
||||
import org.openrewrite.java.spring.AutowiredFieldIntoConstructorParameterVisitor;
|
||||
import org.openrewrite.java.tree.J.Block;
|
||||
import org.openrewrite.java.tree.J.ClassDeclaration;
|
||||
import org.openrewrite.java.tree.J.CompilationUnit;
|
||||
import org.openrewrite.java.tree.J.MethodDeclaration;
|
||||
import org.openrewrite.java.tree.J.VariableDeclarations;
|
||||
import org.openrewrite.java.tree.JavaType.FullyQualified;
|
||||
@@ -41,6 +43,7 @@ import org.springframework.ide.vscode.commons.rewrite.java.AnnotationHierarchies
|
||||
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
|
||||
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
|
||||
import org.springframework.ide.vscode.commons.rewrite.java.ORAstUtils;
|
||||
import org.springframework.ide.vscode.commons.rewrite.maven.MavenProjectParser;
|
||||
|
||||
public class AutowiredFieldIntoConstructorParameterCodeAction implements RecipeCodeActionDescriptor {
|
||||
|
||||
@@ -52,6 +55,15 @@ public class AutowiredFieldIntoConstructorParameterCodeAction implements RecipeC
|
||||
public JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext) {
|
||||
return new JavaIsoVisitor<>() {
|
||||
|
||||
@Override
|
||||
public CompilationUnit visitCompilationUnit(CompilationUnit cu, ExecutionContext p) {
|
||||
JavaSourceSet sourceSet = cu.getMarkers().findFirst(JavaSourceSet.class).orElse(null);
|
||||
if (sourceSet != null && MavenProjectParser.TEST.equals(sourceSet.getName())) {
|
||||
return cu;
|
||||
}
|
||||
return super.visitCompilationUnit(cu, p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VariableDeclarations visitVariableDeclarations(VariableDeclarations multiVariable,
|
||||
ExecutionContext p) {
|
||||
|
||||
Reference in New Issue
Block a user