JavaSourceSet marker name (main or test)

This commit is contained in:
aboyko
2022-11-22 22:22:29 -05:00
parent 0f6c455589
commit c76044cf65
6 changed files with 72 additions and 34 deletions

View File

@@ -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;
}
}
}

View File

@@ -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)));

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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);
}
}
}

View File

@@ -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) {