Skip to content

Commit 39a0bc6

Browse files
committed
Make container groups list collections rather than iterables.
1 parent f9133b7 commit 39a0bc6

File tree

5 files changed

+41
-22
lines changed

5 files changed

+41
-22
lines changed

java-compiler-testing/src/main/java/io/github/ascopes/jct/compilers/impl/JctCompilationFactoryImpl.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import java.io.IOException;
3131
import java.io.OutputStreamWriter;
3232
import java.util.Collection;
33-
import java.util.LinkedHashSet;
33+
import java.util.HashSet;
3434
import java.util.List;
3535
import java.util.Set;
3636
import javax.annotation.Nullable;
@@ -158,13 +158,10 @@ private Set<JavaFileObject> findCompilationUnits(JctFileManager fileManager) thr
158158
);
159159
}
160160

161-
var objects = new LinkedHashSet<JavaFileObject>();
161+
var objects = new HashSet<JavaFileObject>();
162162

163163
for (var location : locations) {
164-
var items = fileManager.list(location, "", Set.of(Kind.SOURCE), true);
165-
for (var fileObject : items) {
166-
objects.add(fileObject);
167-
}
164+
objects.addAll(fileManager.list(location, "", Set.of(Kind.SOURCE), true));
168165
}
169166

170167
if (objects.isEmpty()) {

java-compiler-testing/src/main/java/io/github/ascopes/jct/containers/PackageContainerGroup.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,11 @@ public interface PackageContainerGroup extends ContainerGroup {
193193
* @param kinds the kinds of file to look for.
194194
* @param recurse {@code true} to recurse subpackages, {@code false} to only consider the
195195
* given package.
196-
* @param collection the collection to fill.
197196
* @throws IOException if the file lookup fails due to an IO exception.
198197
*/
199-
void listFileObjects(
198+
Set<JavaFileObject> listFileObjects(
200199
String packageName,
201200
Set<? extends Kind> kinds,
202-
boolean recurse,
203-
Collection<JavaFileObject> collection
201+
boolean recurse
204202
) throws IOException;
205203
}

java-compiler-testing/src/main/java/io/github/ascopes/jct/containers/impl/AbstractPackageContainerGroup.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import java.io.IOException;
2929
import java.nio.file.Path;
3030
import java.util.ArrayList;
31-
import java.util.Collection;
31+
import java.util.HashSet;
3232
import java.util.LinkedHashSet;
3333
import java.util.List;
3434
import java.util.Locale;
@@ -259,15 +259,17 @@ public boolean isEmpty() {
259259
}
260260

261261
@Override
262-
public void listFileObjects(
262+
public Set<JavaFileObject> listFileObjects(
263263
String packageName,
264264
Set<? extends Kind> kinds,
265-
boolean recurse,
266-
Collection<JavaFileObject> collection
265+
boolean recurse
267266
) throws IOException {
267+
// XXX: could this be run in parallel?
268+
var collection = new HashSet<JavaFileObject>();
268269
for (var container : containers) {
269270
container.listFileObjects(packageName, kinds, recurse, collection);
270271
}
272+
return collection;
271273
}
272274

273275
/**

java-compiler-testing/src/main/java/io/github/ascopes/jct/filemanagers/JctFileManager.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@
1919
import io.github.ascopes.jct.containers.OutputContainerGroup;
2020
import io.github.ascopes.jct.containers.PackageContainerGroup;
2121
import io.github.ascopes.jct.workspaces.PathRoot;
22+
import java.io.IOException;
2223
import java.util.Collection;
24+
import java.util.Set;
2325
import javax.annotation.Nullable;
2426
import javax.annotation.concurrent.ThreadSafe;
2527
import javax.tools.JavaFileManager;
28+
import javax.tools.JavaFileObject;
29+
import javax.tools.JavaFileObject.Kind;
2630
import org.apiguardian.api.API;
2731
import org.apiguardian.api.API.Status;
2832

@@ -120,4 +124,25 @@ public interface JctFileManager extends JavaFileManager {
120124
* @return the output container impl.
121125
*/
122126
Collection<OutputContainerGroup> getOutputContainerGroups();
127+
128+
/**
129+
* List all file objects in the given location matching the given criteria.
130+
*
131+
* @param location the location to search in.
132+
* @param packageName the package name to search in, or {@code ""} to search in the root
133+
* location.
134+
* @param kinds the kinds of file to return, or
135+
* {@link Set#of} {@code (} {@link Kind#OTHER} {@code )} to find all files.
136+
* @param recurse {@code true} to recurse into subpackages, {@code false} to only check the
137+
* current package.
138+
* @return a collection of unique file objects that were found.
139+
* @throws IOException if an IO error occurs reading the file system.
140+
*/
141+
@Override
142+
Set<JavaFileObject> list(
143+
Location location,
144+
String packageName,
145+
Set<Kind> kinds,
146+
boolean recurse
147+
) throws IOException;
123148
}

java-compiler-testing/src/main/java/io/github/ascopes/jct/filemanagers/impl/JctFileManagerImpl.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.lang.module.ModuleFinder;
3535
import java.util.ArrayList;
3636
import java.util.Collection;
37+
import java.util.HashSet;
3738
import java.util.Iterator;
3839
import java.util.List;
3940
import java.util.Map;
@@ -440,7 +441,7 @@ public int isSupportedOption(String option) {
440441
}
441442

442443
@Override
443-
public Iterable<JavaFileObject> list(
444+
public Set<JavaFileObject> list(
444445
Location location,
445446
String packageName,
446447
Set<Kind> kinds,
@@ -449,13 +450,9 @@ public Iterable<JavaFileObject> list(
449450

450451
var group = getExistingPackageOrientedOrOutputGroup(location);
451452

452-
if (group == null) {
453-
return List.of();
454-
}
455-
456-
var files = new ArrayList<JavaFileObject>();
457-
group.listFileObjects(packageName, kinds, recurse, files);
458-
return files;
453+
return group == null
454+
? Set.of()
455+
: group.listFileObjects(packageName, kinds, recurse);
459456
}
460457

461458
@Override

0 commit comments

Comments
 (0)