Skip to content

Commit

Permalink
Replace resource filter with predicate
Browse files Browse the repository at this point in the history
  • Loading branch information
mpkorstanje committed Jun 14, 2024
1 parent 862cb3b commit f5d892b
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 131 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ List<Class<?>> scanForClassesInClasspathRoot(URI root, ClassFilter classFilter)
return findClassesForUri(root, PackageUtils.DEFAULT_PACKAGE_NAME, classFilter);
}

List<Resource> scanForResourcesInPackage(String basePackageName, ResourceFilter resourceFilter) {
List<Resource> scanForResourcesInPackage(String basePackageName, Predicate<Resource> resourceFilter) {
Preconditions.condition(
PackageUtils.DEFAULT_PACKAGE_NAME.equals(basePackageName) || isNotBlank(basePackageName),
"basePackageName must not be null or blank");
Expand All @@ -105,7 +105,7 @@ List<Resource> scanForResourcesInPackage(String basePackageName, ResourceFilter
return findResourcesForUris(roots, basePackageName, resourceFilter);
}

List<Resource> scanForResourcesInClasspathRoot(URI root, ResourceFilter resourceFilter) {
List<Resource> scanForResourcesInClasspathRoot(URI root, Predicate<Resource> resourceFilter) {
Preconditions.notNull(root, "root must not be null");
Preconditions.notNull(resourceFilter, "resourceFilter must not be null");

Expand Down Expand Up @@ -139,7 +139,7 @@ private List<Class<?>> findClassesForUri(URI baseUri, String basePackageName, Cl
* Recursively scan for resources in all the supplied source directories.
*/
private List<Resource> findResourcesForUris(List<URI> baseUris, String basePackageName,
ResourceFilter resourceFilter) {
Predicate<Resource> resourceFilter) {
// @formatter:off
return baseUris.stream()
.map(baseUri -> findResourcesForUri(baseUri, basePackageName, resourceFilter))
Expand All @@ -149,7 +149,8 @@ private List<Resource> findResourcesForUris(List<URI> baseUris, String basePacka
// @formatter:on
}

private List<Resource> findResourcesForUri(URI baseUri, String basePackageName, ResourceFilter resourceFilter) {
private List<Resource> findResourcesForUri(URI baseUri, String basePackageName,
Predicate<Resource> resourceFilter) {
List<Resource> resources = new ArrayList<>();
// @formatter:off
walkFilesForUri(baseUri, ClasspathFilters.resourceFiles(),
Expand Down Expand Up @@ -202,7 +203,7 @@ private void processClassFileSafely(Path baseDir, String basePackageName, ClassF
}
}

private void processResourceFileSafely(Path baseDir, String basePackageName, ResourceFilter resourceFilter,
private void processResourceFileSafely(Path baseDir, String basePackageName, Predicate<Resource> resourceFilter,
Path resourceFile, Consumer<Resource> resourceConsumer) {
try {
String fullyQualifiedResourceName = determineFullyQualifiedResourceName(baseDir, basePackageName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;

import org.apiguardian.api.API;
import org.junit.platform.commons.logging.Logger;
Expand Down Expand Up @@ -108,7 +109,7 @@ public static List<Class<?>> findAllClassesInModule(String moduleName, ClassFilt
* but potentially empty
*/
@API(status = INTERNAL, since = "1.11")
public static List<Resource> findAllResourcesInModule(String moduleName, ResourceFilter filter) {
public static List<Resource> findAllResourcesInModule(String moduleName, Predicate<Resource> filter) {
Preconditions.notBlank(moduleName, "Module name must not be null or empty");
Preconditions.notNull(filter, "Resource filter must not be null");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1052,15 +1052,6 @@ public static List<Class<?>> findAllClassesInClasspathRoot(URI root, Predicate<C
return findAllClassesInClasspathRoot(root, ClassFilter.of(classNameFilter, classFilter));
}

/**
* @since 1.11
* @see #findAllResourcesInClasspathRoot(URI, Predicate)
*/
public static List<Resource> findAllResourcesInClasspathRoot(URI root, Predicate<Resource> resourceFilter) {
// unmodifiable since returned by public, non-internal method(s)
return findAllResourcesInClasspathRoot(root, ResourceFilter.of(resourceFilter));
}

/**
* @since 1.10
* @see org.junit.platform.commons.support.ReflectionSupport#streamAllClassesInClasspathRoot(URI, Predicate, Predicate)
Expand All @@ -1070,14 +1061,6 @@ public static Stream<Class<?>> streamAllClassesInClasspathRoot(URI root, Predica
return streamAllClassesInClasspathRoot(root, ClassFilter.of(classNameFilter, classFilter));
}

/**
* @since 1.11
* @see #streamAllResourcesInClasspathRoot(URI, Predicate)
*/
public static Stream<Resource> streamAllResourcesInClasspathRoot(URI root, Predicate<Resource> resourceFilter) {
return streamAllResourcesInClasspathRoot(root, ResourceFilter.of(resourceFilter));
}

/**
* @since 1.1
*/
Expand All @@ -1088,7 +1071,7 @@ public static List<Class<?>> findAllClassesInClasspathRoot(URI root, ClassFilter
/**
* @since 1.11
*/
public static List<Resource> findAllResourcesInClasspathRoot(URI root, ResourceFilter resourceFilter) {
public static List<Resource> findAllResourcesInClasspathRoot(URI root, Predicate<Resource> resourceFilter) {
return Collections.unmodifiableList(classpathScanner.scanForResourcesInClasspathRoot(root, resourceFilter));
}

Expand All @@ -1102,7 +1085,7 @@ public static Stream<Class<?>> streamAllClassesInClasspathRoot(URI root, ClassFi
/**
* @since 1.11
*/
public static Stream<Resource> streamAllResourcesInClasspathRoot(URI root, ResourceFilter resourceFilter) {
public static Stream<Resource> streamAllResourcesInClasspathRoot(URI root, Predicate<Resource> resourceFilter) {
return findAllResourcesInClasspathRoot(root, resourceFilter).stream();
}

Expand All @@ -1115,15 +1098,6 @@ public static List<Class<?>> findAllClassesInPackage(String basePackageName, Pre
return findAllClassesInPackage(basePackageName, ClassFilter.of(classNameFilter, classFilter));
}

/**
* @since 1.11
* @see org.junit.platform.commons.support.ReflectionSupport#findAllClassesInPackage(String, Predicate, Predicate)
*/
public static List<Resource> findAllResourcesInPackage(String basePackageName, Predicate<Resource> resourceFilter) {
// unmodifiable since returned by public, non-internal method(s)
return findAllResourcesInPackage(basePackageName, ResourceFilter.of(resourceFilter));
}

/**
* since 1.10
* @see org.junit.platform.commons.support.ReflectionSupport#streamAllClassesInPackage(String, Predicate, Predicate)
Expand All @@ -1133,15 +1107,6 @@ public static Stream<Class<?>> streamAllClassesInPackage(String basePackageName,
return streamAllClassesInPackage(basePackageName, ClassFilter.of(classNameFilter, classFilter));
}

/**
* since 1.11
* @see #streamAllResourcesInPackage(String, Predicate)
*/
public static Stream<Resource> streamAllResourcesInPackage(String basePackageName,
Predicate<Resource> resourceFilter) {
return streamAllResourcesInPackage(basePackageName, ResourceFilter.of(resourceFilter));
}

/**
* @since 1.1
*/
Expand All @@ -1152,7 +1117,7 @@ public static List<Class<?>> findAllClassesInPackage(String basePackageName, Cla
/**
* @since 1.11
*/
public static List<Resource> findAllResourcesInPackage(String basePackageName, ResourceFilter resourceFilter) {
public static List<Resource> findAllResourcesInPackage(String basePackageName, Predicate<Resource> resourceFilter) {
return Collections.unmodifiableList(
classpathScanner.scanForResourcesInPackage(basePackageName, resourceFilter));
}
Expand All @@ -1167,7 +1132,8 @@ public static Stream<Class<?>> streamAllClassesInPackage(String basePackageName,
/**
* @since 1.11
*/
public static Stream<Resource> streamAllResourcesInPackage(String basePackageName, ResourceFilter resourceFilter) {
public static Stream<Resource> streamAllResourcesInPackage(String basePackageName,
Predicate<Resource> resourceFilter) {
return findAllResourcesInPackage(basePackageName, resourceFilter).stream();
}

Expand All @@ -1181,15 +1147,6 @@ public static List<Class<?>> findAllClassesInModule(String moduleName, Predicate
return findAllClassesInModule(moduleName, ClassFilter.of(classNameFilter, classFilter));
}

/**
* @since 1.11
* @see #findAllResourcesInModule(String, Predicate)
*/
public static List<Resource> findAllResourcesInModule(String moduleName, Predicate<Resource> resourceFilter) {
// unmodifiable since returned by public, non-internal method(s)
return findAllResourcesInModule(moduleName, ResourceFilter.of(resourceFilter));
}

/**
* @since 1.10
* @see org.junit.platform.commons.support.ReflectionSupport#streamAllClassesInModule(String, Predicate, Predicate)
Expand All @@ -1199,14 +1156,6 @@ public static Stream<Class<?>> streamAllClassesInModule(String moduleName, Predi
return streamAllClassesInModule(moduleName, ClassFilter.of(classNameFilter, classFilter));
}

/**
* @since 1.11
* @see #streamAllResourcesInModule(String, Predicate)
*/
public static Stream<Resource> streamAllResourcesInModule(String moduleName, Predicate<Resource> resourceFilter) {
return streamAllResourcesInModule(moduleName, ResourceFilter.of(resourceFilter));
}

/**
* @since 1.1.1
*/
Expand All @@ -1217,7 +1166,7 @@ public static List<Class<?>> findAllClassesInModule(String moduleName, ClassFilt
/**
* @since 1.11
*/
public static List<Resource> findAllResourcesInModule(String moduleName, ResourceFilter resourceFilter) {
public static List<Resource> findAllResourcesInModule(String moduleName, Predicate<Resource> resourceFilter) {
return Collections.unmodifiableList(ModuleUtils.findAllResourcesInModule(moduleName, resourceFilter));
}

Expand All @@ -1231,7 +1180,7 @@ public static Stream<Class<?>> streamAllClassesInModule(String moduleName, Class
/**
* @since 1.11
*/
public static Stream<Resource> streamAllResourcesInModule(String moduleName, ResourceFilter resourceFilter) {
public static Stream<Resource> streamAllResourcesInModule(String moduleName, Predicate<Resource> resourceFilter) {
return findAllResourcesInModule(moduleName, resourceFilter).stream();
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public static List<Class<?>> findAllClassesInModule(String moduleName, ClassFilt
* but potentially empty
*/
@API(status = INTERNAL, since = "1.11")
public static List<Resource> findAllResourcesInModule(String moduleName, ResourceFilter filter) {
public static List<Resource> findAllResourcesInModule(String moduleName, Predicate<Resource> filter) {
Preconditions.notBlank(moduleName, "Module name must not be null or empty");
Preconditions.notNull(filter, "Resource filter must not be null");

Expand Down Expand Up @@ -185,7 +185,8 @@ private static List<Class<?>> scan(Set<ModuleReference> references, ClassFilter
* Scan for classes using the supplied set of module references, class
* filter, and loader.
*/
private static List<Resource> scan(Set<ModuleReference> references, ResourceFilter filter, ClassLoader loader) {
private static List<Resource> scan(Set<ModuleReference> references, Predicate<Resource> filter,
ClassLoader loader) {
logger.debug(() -> "Scanning " + references.size() + " module references: " + references);
ModuleReferenceResourceScanner scanner = new ModuleReferenceResourceScanner(filter, loader);
List<Resource> classes = new ArrayList<>();
Expand Down Expand Up @@ -266,10 +267,10 @@ private Class<?> loadClassUnchecked(String binaryName) {
*/
static class ModuleReferenceResourceScanner {

private final ResourceFilter resourceFilter;
private final Predicate<Resource> resourceFilter;
private final ClassLoader classLoader;

ModuleReferenceResourceScanner(ResourceFilter resourceFilter, ClassLoader classLoader) {
ModuleReferenceResourceScanner(Predicate<Resource> resourceFilter, ClassLoader classLoader) {
this.resourceFilter = resourceFilter;
this.classLoader = classLoader;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ void findAllResourcesInClasspathRootPreconditions() {
var path = Path.of(".").toUri();
assertPreconditionViolationException("root",
() -> ReflectionSupport.findAllResourcesInClasspathRoot(null, allResources));
assertPreconditionViolationException("resource predicate",
assertPreconditionViolationException("resourceFilter",
() -> ReflectionSupport.findAllResourcesInClasspathRoot(path, null));
}

Expand Down Expand Up @@ -190,7 +190,7 @@ void findAllResourcesInPackageDelegates() {
void findAllResourcesInPackagePreconditions() {
assertPreconditionViolationExceptionForString("basePackageName",
() -> ReflectionSupport.findAllResourcesInPackage(null, allResources));
assertPreconditionViolationException("resource predicate",
assertPreconditionViolationException("resourceFilter",
() -> ReflectionSupport.findAllResourcesInPackage("org.junit", null));
}

Expand Down Expand Up @@ -222,7 +222,7 @@ void findAllResourcesInModulePreconditions() {
var exception = assertThrows(PreconditionViolationException.class,
() -> ReflectionSupport.findAllResourcesInModule(null, allResources));
assertEquals("Module name must not be null or empty", exception.getMessage());
assertPreconditionViolationException("resource predicate",
assertPreconditionViolationException("Resource filter",
() -> ReflectionSupport.findAllResourcesInModule("org.junit.platform.commons", null));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
class ClasspathScannerTests {

private static final ClassFilter allClasses = ClassFilter.of(type -> true);
private static final ResourceFilter allResources = ResourceFilter.of(type -> true);
private static final Predicate<Resource> allResources = type -> true;

private final List<Class<?>> loadedClasses = new ArrayList<>();

Expand Down Expand Up @@ -146,9 +146,7 @@ void scanForResourcesInClasspathRootWhenGenericRuntimeExceptionOccurs(LogRecordL
}

private void assertResourcesScannedWhenExceptionIsThrown(Predicate<Resource> filter) {
var resourceFilter = ResourceFilter.of(filter);
var resources = this.classpathScanner.scanForResourcesInClasspathRoot(getTestClasspathResourceRoot(),
resourceFilter);
var resources = this.classpathScanner.scanForResourcesInClasspathRoot(getTestClasspathResourceRoot(), filter);
assertThat(resources).hasSizeGreaterThanOrEqualTo(150);
}

Expand Down Expand Up @@ -345,7 +343,7 @@ void scanForClassesInDefaultPackage() {

@Test
void scanForResourcesInDefaultPackage() {
var resourceFilter = ResourceFilter.of(this::inDefaultPackage);
Predicate<Resource> resourceFilter = this::inDefaultPackage;
var resources = classpathScanner.scanForResourcesInPackage("", resourceFilter);

assertThat(resources).as("number of resources found in default package").isNotEmpty();
Expand All @@ -362,17 +360,17 @@ void scanForClassesInPackageWithFilter() {

@Test
void scanForResourcesInPackageWithFilter() {
var thisResourceOnly = ResourceFilter.of(
resource -> "org/junit/platform/commons/example.resource".equals(resource.getName()));
Predicate<Resource> thisResourceOnly = resource -> "org/junit/platform/commons/example.resource".equals(
resource.getName());
var resources = classpathScanner.scanForResourcesInPackage("org.junit.platform.commons", thisResourceOnly);
assertThat(resources).extracting(Resource::getName).containsExactly(
"org/junit/platform/commons/example.resource");
}

@Test
void resourcesCanBeRead() throws IOException {
var thisResourceOnly = ResourceFilter.of(
resource -> "org/junit/platform/commons/example.resource".equals(resource.getName()));
Predicate<Resource> thisResourceOnly = resource -> "org/junit/platform/commons/example.resource".equals(
resource.getName());
var resources = classpathScanner.scanForResourcesInPackage("org.junit.platform.commons", thisResourceOnly);
Resource resource = resources.get(0);

Expand Down

0 comments on commit f5d892b

Please sign in to comment.