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
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
rootProject.version = "9.10.0"
group = 'javasabr'
group = 'javasabr.rlib'

subprojects {

Expand Down
5 changes: 5 additions & 0 deletions rlib-classpath/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

dependencies {
api projects.rlibCommon
testImplementation projects.rlibLoggerImpl
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package javasabr.rlib.common.classpath;

import java.lang.annotation.Annotation;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.function.Predicate;
import javasabr.rlib.common.classpath.impl.ClassPathScannerImpl;
import javasabr.rlib.common.util.array.Array;
import org.jspecify.annotations.Nullable;

/**
* @author JavaSaBr
*/
public interface ClassPathScanner {

String JAR_EXTENSION = ".jar";

@Nullable ClassPathScanner NULL_SCANNER = null;

ClassPathScanner EMPTY_SCANNER = new ClassPathScannerImpl(ClassPathScanner.class.getClassLoader()) {

@Override
public void addClasses(Array<Class<?>> classes) {}

@Override
public void addAdditionalPath(String path) {}

@Override
public void addAdditionalPaths(String[] paths) {}

@Override
public void addResources(Array<String> resources) {}

@Override
public void scan(Predicate<String> filter) {}
};

URLClassLoader EMPTY_CLASS_LOADER = new URLClassLoader(new URL[0], ClassPathScanner.class.getClassLoader());

@Nullable URLClassLoader NULL_CLASS_LOADER = null;

void addClasses(Array<Class<?>> classes);

void addResources(Array<String> resources);

void useSystemClassPath(boolean useSystemClasspath);

default <T> Array<Class<T>> findImplementations(Class<T> interfaceClass) {
Array<Class<T>> result = Array.ofType(Class.class);
findImplementationsTo(result, interfaceClass);
return result;
}

<T> void findImplementationsTo(Array<Class<T>> container, Class<T> interfaceClass);

default <T> Array<Class<T>> findInherited(Class<T> parentClass) {
Array<Class<T>> result = Array.ofType(Class.class);
findInheritedTo(result, parentClass);
return result;
}

<T> void findInheritedTo(Array<Class<T>> container, Class<T> parentClass);

default Array<Class<?>> findAnnotated(Class<? extends Annotation> annotationClass) {
Array<Class<?>> result = Array.ofType(Class.class);
findAnnotatedTo(result, annotationClass);
return result;
}

void findAnnotatedTo(Array<Class<?>> container, Class<? extends Annotation> annotationClass);

void foundClassesTo(Array<Class<?>> container);

void foundResourcesTo(Array<String> container);

Array<Class<?>> foundClasses();

Array<String> foundResources();

default void scan() {
scan(null);
}

void scan(@Nullable Predicate<String> filter);

void addAdditionalPath(String path);

void addAdditionalPaths(String[] paths);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package javasabr.rlib.common.classpath;

import javasabr.rlib.common.classpath.impl.ClassPathScannerImpl;
import javasabr.rlib.common.classpath.impl.ManifestClassPathScannerImpl;

/**
* @author JavaSaBr
*/
public final class ClassPathScannerFactory {

public static ClassPathScanner newDefaultScanner() {
return new ClassPathScannerImpl(ClassPathScannerFactory.class.getClassLoader());
}

public static ClassPathScanner newDefaultScanner(ClassLoader classLoader) {
return new ClassPathScannerImpl(classLoader);
}

public static ClassPathScanner newDefaultScanner(
ClassLoader classLoader,
String[] additionalPaths) {
var scanner = new ClassPathScannerImpl(classLoader);
scanner.addAdditionalPaths(additionalPaths);
return scanner;
}

public static ClassPathScanner newManifestScanner(Class<?> rootClass) {
return new ManifestClassPathScannerImpl(
ClassPathScannerFactory.class.getClassLoader(),
rootClass,
"Class-Path");
}

public static ClassPathScanner newManifestScanner(Class<?> rootClass, String classPathKey) {
return new ManifestClassPathScannerImpl(
ClassPathScannerFactory.class.getClassLoader(),
rootClass,
classPathKey);
}

private ClassPathScannerFactory() {
throw new RuntimeException();
}
}
Loading
Loading