|
32 | 32 | import org.openrewrite.SourceFile;
|
33 | 33 |
|
34 | 34 | import java.nio.file.Path;
|
| 35 | +import java.nio.file.PathMatcher; |
35 | 36 | import java.util.ArrayList;
|
36 | 37 | import java.util.List;
|
37 | 38 | import java.util.Optional;
|
| 39 | +import java.util.function.Predicate; |
38 | 40 | import java.util.stream.Collectors;
|
| 41 | +import java.util.stream.Stream; |
39 | 42 |
|
40 | 43 | @RequiredArgsConstructor
|
41 | 44 | public class ApplicationModule {
|
@@ -112,6 +115,11 @@ public ResourceSet getMainResourceSet() {
|
112 | 115 | return new ResourceSet(projectResourceSet, projectRootDir, modulePath, mainResourceSet);
|
113 | 116 | }
|
114 | 117 |
|
| 118 | + public ResourceSet getTestResourceSet() { |
| 119 | + Path testResourceSet = buildFile.getTestResourceFolder(); |
| 120 | + return new ResourceSet(projectResourceSet, projectRootDir, modulePath, testResourceSet); |
| 121 | + } |
| 122 | + |
115 | 123 | public List<ApplicationModule> getModules() {
|
116 | 124 | Optional<MavenResolutionResult> mavenResolution = MavenBuildFileUtil.findMavenResolution(((OpenRewriteMavenBuildFile) buildFile).getSourceFile());
|
117 | 125 | List<MavenResolutionResult> modulesMarker = mavenResolution.get().getModules();
|
@@ -145,4 +153,47 @@ private List<RewriteSourceFileHolder<? extends SourceFile>> getModuleResources()
|
145 | 153 | .filter(r -> r.getAbsolutePath().toString().startsWith(projectRootDir.resolve(modulePath).toString()))
|
146 | 154 | .collect(Collectors.toList());
|
147 | 155 | }
|
| 156 | + |
| 157 | + public <T> T searchMainResources(ProjectResourceFinder<T> finder) { |
| 158 | + ProjectResourceSet resourceSet = new ImmutableFilteringProjectResourceSet(projectResourceSet, (RewriteSourceFileHolder<? extends SourceFile> r) -> r.getAbsolutePath().normalize().startsWith(getMainResourceSet().getAbsolutePath().toAbsolutePath().normalize())); |
| 159 | + return finder.apply(resourceSet); |
| 160 | + } |
| 161 | + |
| 162 | + public <T> T searchMainJava(ProjectResourceFinder<T> finder) { |
| 163 | + ProjectResourceSet resourceSet = new ImmutableFilteringProjectResourceSet(projectResourceSet, (RewriteSourceFileHolder<? extends SourceFile> r) -> r.getAbsolutePath().normalize().startsWith(getMainJavaSourceSet().getAbsolutePath().toAbsolutePath().normalize())); |
| 164 | + return finder.apply(resourceSet); |
| 165 | + } |
| 166 | + |
| 167 | + public <T> T searchTestResources(ProjectResourceFinder<T> finder) { |
| 168 | + ProjectResourceSet resourceSet = new ImmutableFilteringProjectResourceSet(projectResourceSet, (RewriteSourceFileHolder<? extends SourceFile> r) -> r.getAbsolutePath().normalize().startsWith(getTestResourceSet().getAbsolutePath().toAbsolutePath().normalize())); |
| 169 | + return finder.apply(resourceSet); |
| 170 | + } |
| 171 | + |
| 172 | + public <T> T searchTestJava(ProjectResourceFinder<T> finder) { |
| 173 | + ProjectResourceSet resourceSet = new ImmutableFilteringProjectResourceSet(projectResourceSet, (RewriteSourceFileHolder<? extends SourceFile> r) -> r.getAbsolutePath().normalize().startsWith(getTestJavaSourceSet().getAbsolutePath().toAbsolutePath().normalize())); |
| 174 | + return finder.apply(resourceSet); |
| 175 | + } |
| 176 | + |
| 177 | + /** |
| 178 | + * Class provides filtering on the list of resources in a {@code ProjectResourceSet}. |
| 179 | + * As all read methods rely on {@code stream()}, only this stream has to be filtered. :fingers_crossed: |
| 180 | + * |
| 181 | + * It's a private inner class as it is currently only used here and quite hacky overwriting only parts of |
| 182 | + * {@code ProjectResourceSet} with a lot of assumptions of the inner workings of other classes. |
| 183 | + */ |
| 184 | + private class ImmutableFilteringProjectResourceSet extends ProjectResourceSet{ |
| 185 | + private final ProjectResourceSet projectResourceSet; |
| 186 | + private final Predicate<RewriteSourceFileHolder<? extends SourceFile>> predicate; |
| 187 | + |
| 188 | + public ImmutableFilteringProjectResourceSet(ProjectResourceSet projectResourceSet, Predicate<RewriteSourceFileHolder<? extends SourceFile>> predicate) { |
| 189 | + this.projectResourceSet = projectResourceSet; |
| 190 | + this.predicate = predicate; |
| 191 | + } |
| 192 | + |
| 193 | + @Override |
| 194 | + public Stream<RewriteSourceFileHolder<? extends SourceFile>> stream() { |
| 195 | + return projectResourceSet.stream() |
| 196 | + .filter(this.predicate); |
| 197 | + } |
| 198 | + } |
148 | 199 | }
|
0 commit comments