Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -158,13 +158,10 @@ private Set<JavaFileObject> findCompilationUnits(JctFileManager fileManager) thr
);
}

var objects = new LinkedHashSet<JavaFileObject>();
var objects = new HashSet<JavaFileObject>();

for (var location : locations) {
var items = fileManager.list(location, "", Set.of(Kind.SOURCE), true);
for (var fileObject : items) {
objects.add(fileObject);
}
objects.addAll(fileManager.list(location, "", Set.of(Kind.SOURCE), true));
}

if (objects.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,13 +193,11 @@ public interface PackageContainerGroup extends ContainerGroup {
* @param kinds the kinds of file to look for.
* @param recurse {@code true} to recurse subpackages, {@code false} to only consider the
* given package.
* @param collection the collection to fill.
* @throws IOException if the file lookup fails due to an IO exception.
*/
void listFileObjects(
Set<JavaFileObject> listFileObjects(
String packageName,
Set<? extends Kind> kinds,
boolean recurse,
Collection<JavaFileObject> collection
boolean recurse
) throws IOException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -259,15 +259,17 @@ public boolean isEmpty() {
}

@Override
public void listFileObjects(
public Set<JavaFileObject> listFileObjects(
String packageName,
Set<? extends Kind> kinds,
boolean recurse,
Collection<JavaFileObject> collection
boolean recurse
) throws IOException {
// XXX: could this be run in parallel?
var collection = new HashSet<JavaFileObject>();
for (var container : containers) {
container.listFileObjects(packageName, kinds, recurse, collection);
}
return collection;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,14 @@
import io.github.ascopes.jct.containers.OutputContainerGroup;
import io.github.ascopes.jct.containers.PackageContainerGroup;
import io.github.ascopes.jct.workspaces.PathRoot;
import java.io.IOException;
import java.util.Collection;
import java.util.Set;
import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.JavaFileObject.Kind;
import org.apiguardian.api.API;
import org.apiguardian.api.API.Status;

Expand Down Expand Up @@ -120,4 +124,25 @@ public interface JctFileManager extends JavaFileManager {
* @return the output container impl.
*/
Collection<OutputContainerGroup> getOutputContainerGroups();

/**
* List all file objects in the given location matching the given criteria.
*
* @param location the location to search in.
* @param packageName the package name to search in, or {@code ""} to search in the root
* location.
* @param kinds the kinds of file to return, or
* {@link Set#of} {@code (} {@link Kind#OTHER} {@code )} to find all files.
* @param recurse {@code true} to recurse into subpackages, {@code false} to only check the
* current package.
* @return a collection of unique file objects that were found.
* @throws IOException if an IO error occurs reading the file system.
*/
@Override
Set<JavaFileObject> list(
Location location,
String packageName,
Set<Kind> kinds,
boolean recurse
) throws IOException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import java.lang.module.ModuleFinder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -440,7 +441,7 @@ public int isSupportedOption(String option) {
}

@Override
public Iterable<JavaFileObject> list(
public Set<JavaFileObject> list(
Location location,
String packageName,
Set<Kind> kinds,
Expand All @@ -449,13 +450,9 @@ public Iterable<JavaFileObject> list(

var group = getExistingPackageOrientedOrOutputGroup(location);

if (group == null) {
return List.of();
}

var files = new ArrayList<JavaFileObject>();
group.listFileObjects(packageName, kinds, recurse, files);
return files;
return group == null
? Set.of()
: group.listFileObjects(packageName, kinds, recurse);
}

@Override
Expand Down