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
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ subprojects {
annotationProcessor libs.lombok

testImplementation libs.junit.api
testImplementation libs.junit.jupiter.params
testCompileOnly libs.lombok
testCompileOnly libs.jspecify
testRuntimeOnly libs.junit.engine
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jspecify = { module = "org.jspecify:jspecify", version.ref = "jspecify" }
lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" }
junit-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit-jupiter" }
junit-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit-jupiter" }
junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit-jupiter" }
junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit-platform-launcher" }
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }
Expand All @@ -33,5 +34,4 @@ angus-mail = { module = "org.eclipse.angus:angus-mail", version.ref = "angus-mai
testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" }

[bundles]
junit = ["junit-engine", "junit-api"]
mail = ["jakarta-mail-api", "angus-mail"]
1 change: 1 addition & 0 deletions rlib-classpath/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
dependencies {
api projects.rlibCommon
api projects.rlibIo
api projects.rlibCollections
testImplementation projects.rlibLoggerImpl
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import java.net.URLClassLoader;
import java.util.function.Predicate;
import javasabr.rlib.classpath.impl.ClassPathScannerImpl;
import javasabr.rlib.common.util.array.Array;
import javasabr.rlib.collections.array.Array;
import javasabr.rlib.collections.array.MutableArray;
import org.jspecify.annotations.Nullable;

/**
Expand Down Expand Up @@ -48,32 +49,32 @@ public void scan(Predicate<String> filter) {}
void useSystemClassPath(boolean useSystemClasspath);

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

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

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

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

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

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

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

void foundResourcesTo(Array<String> container);
void foundResourcesTo(MutableArray<String> container);

Array<Class<?>> foundClasses();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@
import java.util.jar.JarInputStream;
import java.util.zip.ZipException;
import javasabr.rlib.classpath.ClassPathScanner;
import javasabr.rlib.collections.array.Array;
import javasabr.rlib.collections.array.ArrayFactory;
import javasabr.rlib.collections.array.MutableArray;
import javasabr.rlib.io.impl.ReuseBytesInputStream;
import javasabr.rlib.io.impl.ReuseBytesOutputStream;
import javasabr.rlib.common.util.ArrayUtils;
import javasabr.rlib.common.util.array.Array;
import javasabr.rlib.common.util.array.ArrayFactory;
import javasabr.rlib.io.util.IoUtils;
import javasabr.rlib.logger.api.Logger;
import javasabr.rlib.logger.api.LoggerManager;
Expand All @@ -45,7 +46,7 @@ public class ClassPathScannerImpl implements ClassPathScanner {
private static final String MODULE_INFO_CLASS = "module-info.class";
private static final String META_INF_PREFIX = "META-INF";

final Array<String> additionalPaths;
final MutableArray<String> additionalPaths;
final ClassLoader loader;

Class<?>[] classes;
Expand All @@ -55,7 +56,7 @@ public class ClassPathScannerImpl implements ClassPathScanner {
boolean useSystemClassPath;

public ClassPathScannerImpl(ClassLoader classLoader) {
this.additionalPaths = ArrayFactory.newArray(String.class);
this.additionalPaths = MutableArray.ofType(String.class);
this.loader = classLoader;
this.classes = new Class[0];
this.resources = new String[0];
Expand All @@ -70,20 +71,20 @@ public void useSystemClassPath(boolean useSystemClassPath) {
public void addClasses(Array<Class<?>> classes) {
this.classes = ArrayUtils.combine(
this.classes,
classes.toArray(ArrayUtils.EMPTY_CLASS_ARRAY),
classes.toArray(),
Class.class);
}

@Override
public void addResources(Array<String> resources) {
this.resources = ArrayUtils.combine(
this.resources,
resources.toArray(ArrayUtils.EMPTY_STRING_ARRAY),
resources.toArray(),
String.class);
}

@Override
public <T> void findImplementationsTo(Array<Class<T>> container, Class<T> interfaceClass) {
public <T> void findImplementationsTo(MutableArray<Class<T>> container, Class<T> interfaceClass) {

if (!interfaceClass.isInterface()) {
throw new IllegalArgumentException("Class " + interfaceClass + " is not interface.");
Expand All @@ -100,7 +101,7 @@ public <T> void findImplementationsTo(Array<Class<T>> container, Class<T> interf
}

@Override
public <T> void findInheritedTo(Array<Class<T>> container, Class<T> parentClass) {
public <T> void findInheritedTo(MutableArray<Class<T>> container, Class<T> parentClass) {

if (Modifier.isFinal(parentClass.getModifiers())) {
throw new IllegalArgumentException("Class " + parentClass + " is final class.");
Expand All @@ -118,7 +119,7 @@ public <T> void findInheritedTo(Array<Class<T>> container, Class<T> parentClass)
}

@Override
public void findAnnotatedTo(Array<Class<?>> container, Class<? extends Annotation> annotationClass) {
public void findAnnotatedTo(MutableArray<Class<?>> container, Class<? extends Annotation> annotationClass) {
for (Class<?> klass : classes) {
if (klass.isInterface() ||
isAbstract(klass.getModifiers()) ||
Expand All @@ -131,35 +132,35 @@ public void findAnnotatedTo(Array<Class<?>> container, Class<? extends Annotatio
}

@Override
public void foundClassesTo(Array<Class<?>> container) {
public void foundClassesTo(MutableArray<Class<?>> container) {
container.addAll(classes);
}

@Override
public void foundResourcesTo(Array<String> container) {
public void foundResourcesTo(MutableArray<String> container) {
container.addAll(resources);
}

@Override
public Array<Class<?>> foundClasses() {
return Array.of(classes);
return Array.typed(Class.class, classes);
}

@Override
public Array<String> foundResources() {
return Array.of(resources);
return Array.typed(String.class, resources);
}

protected String[] calculatePathsToScan() {
protected Array<String> calculatePathsToScan() {

var systemClasspath = useSystemClassPath() ? classpathPaths() : ArrayUtils.EMPTY_STRING_ARRAY;
var capacity = additionalPaths.size() + systemClasspath.length;

var result = Array.ofType(String.class, capacity);
var result = ArrayFactory.mutableArray(String.class, capacity);
result.addAll(systemClasspath);
result.addAll(additionalPaths);

return result.toArray(String.class);
return result;
}

protected String[] classpathPaths() {
Expand All @@ -170,7 +171,7 @@ private void loadClass(
@Nullable Path rootPath,
@Nullable Path file,
String name,
Array<Class<?>> container) {
MutableArray<Class<?>> container) {

if (!name.endsWith(CLASS_EXTENSION)) {
return;
Expand Down Expand Up @@ -216,8 +217,8 @@ private void loadClass(

private void scanDirectory(
Path rootPath,
Array<Class<?>> classes,
Array<String> resources,
MutableArray<Class<?>> classes,
MutableArray<String> resources,
Path directory) {
LOGGER.debug(directory, "Scanning directory:[%s]"::formatted);
try (DirectoryStream<Path> stream = Files.newDirectoryStream(directory)) {
Expand Down Expand Up @@ -264,7 +265,7 @@ private void scanDirectory(
}
}

private void scanJar(Array<Class<?>> classes, Array<String> resources, Path jarFile) {
private void scanJar(MutableArray<Class<?>> classes, MutableArray<String> resources, Path jarFile) {
LOGGER.debug(jarFile, "Scanning jar:[%s]"::formatted);

if (!Files.exists(jarFile)) {
Expand All @@ -287,8 +288,8 @@ private void scanJar(Array<Class<?>> classes, Array<String> resources, Path jarF
}

private void scanJarInputStream(
Array<Class<?>> classes,
Array<String> resources,
MutableArray<Class<?>> classes,
MutableArray<String> resources,
ReuseBytesOutputStream rout,
ReuseBytesInputStream rin,
byte[] buffer,
Expand All @@ -315,7 +316,7 @@ private void scanJarInputStream(
}
}

private void scanJar(Array<Class<?>> classes, Array<String> resources, InputStream jarFile) {
private void scanJar(MutableArray<Class<?>> classes, MutableArray<String> resources, InputStream jarFile) {
LOGGER.debug(jarFile, "Scanning jar:[%s]"::formatted);

var rout = new ReuseBytesOutputStream();
Expand All @@ -337,8 +338,8 @@ public void scan(@Nullable Predicate<String> filter) {

var paths = calculatePathsToScan();

Array<Class<?>> classes = Array.ofType(Class.class);
Array<String> resources = Array.ofType(String.class);
MutableArray<Class<?>> classes = MutableArray.ofType(Class.class);
MutableArray<String> resources = MutableArray.ofType(String.class);

for (String path : paths) {
var file = Path.of(path);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.stream.Stream;
import javasabr.rlib.collections.array.Array;
import javasabr.rlib.collections.array.ArrayCollectors;
import javasabr.rlib.collections.array.MutableArray;
import javasabr.rlib.common.util.Utils;
import javasabr.rlib.common.util.array.Array;
import javasabr.rlib.common.util.array.ArrayFactory;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;

Expand All @@ -32,9 +34,9 @@ public ManifestClassPathScannerImpl(
this.classPathKey = classPathKey;
}

protected String[] calculateManifestClassPath() {
protected Array<String> calculateManifestClassPath() {

var result = Array.ofType(String.class);
var result = MutableArray.ofType(String.class);
var currentThread = Thread.currentThread();

Path root = Utils.getRootFolderFromClass(rootClass);
Expand Down Expand Up @@ -74,16 +76,21 @@ protected String[] calculateManifestClassPath() {
}
}

return result.toArray(String.class);
return result;
}

@Override
protected String[] calculatePathsToScan() {

var result = ArrayFactory.newArraySet(String.class);
result.addAll(super.calculatePathsToScan());
result.addAll(calculateManifestClassPath());

return result.toArray(String.class);
protected Array<String> calculatePathsToScan() {

Stream<String> originalStream = super
.calculatePathsToScan()
.stream();
Stream<String> extraStream = calculateManifestClassPath()
.stream();

return Stream
.concat(originalStream, extraStream)
.distinct()
.collect(ArrayCollectors.toArray(String.class));
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package javasabr.rlib.classpath;

import java.util.Collection;
import javasabr.rlib.common.util.array.Array;
import javasabr.rlib.common.util.array.impl.AbstractArray;
import javasabr.rlib.collections.array.Array;
import javasabr.rlib.collections.array.impl.AbstractArray;
import javasabr.rlib.logger.api.LoggerLevel;
import javasabr.rlib.logger.api.LoggerManager;
import org.junit.jupiter.api.Assertions;
Expand Down
6 changes: 6 additions & 0 deletions rlib-collections/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

dependencies {
api projects.rlibCommon
api projects.rlibFunctions
testImplementation projects.rlibLoggerImpl
}
Loading
Loading