
io.vertx.up.uca.di.DiGuiceField Maven / Gradle / Ivy
The newest version!
package io.vertx.up.uca.di;
import com.google.inject.AbstractModule;
import io.vertx.up.util.Ut;
import javax.inject.Inject;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
/**
* @author Lang
*/
public class DiGuiceField implements DiGuice {
private final transient Set> pointers = new HashSet<>();
@Override
public boolean success(final Class> clazz) {
// Get all fields
final Field[] fields = clazz.getDeclaredFields();
final Set> extract = new HashSet<>();
Arrays.stream(fields)
.filter(field -> !Modifier.isStatic(field.getModifiers())) // Ko Static
// .filter(field -> !Modifier.isPublic(field.getModifiers())) // Ko Non-Public
.filter(field -> field.isAnnotationPresent(Inject.class)) // JSR 330
.forEach(field -> extract.add(field.getType()));
if (!extract.isEmpty()) {
this.pointers.addAll(extract);
}
return !extract.isEmpty();
}
@Override
@SuppressWarnings("all")
public AbstractModule module(final ConcurrentMap, Set>> tree,
final Set> flat) {
final Set> classes = this.pointers;
return new DiGuiceModule() {
@Override
protected void configure() {
if (!classes.isEmpty()) {
logger().info("[ DI ] Field Scanner booting...");
final Set ignoreSet = new HashSet<>();
classes.forEach(clazz -> {
if (flat.contains(clazz)) {
// Standalone, Non-Constructor
final String bindCls = this.bindConstructor((Class) clazz);
if (Objects.nonNull(bindCls)) {
ignoreSet.add(bindCls);
}
} else {
// Interface Part
if (clazz.isInterface()) {
final Set> implCls = tree.get(clazz);
final Set ignored = this.bindInterface((Class) clazz, implCls);
if (Objects.nonNull(ignored)) {
ignoreSet.addAll(ignored);
}
}
}
});
if (ignoreSet.isEmpty()) {
logger().info("[ DI ] Field Scanned Successfully !!!");
} else {
logger().info("[ DI ] Field Scanned Successfully with ignored: {0} !!!", Ut.fromJoin(ignoreSet));
}
}
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy