Skip to content

Commit

Permalink
tudo ou nad
Browse files Browse the repository at this point in the history
  • Loading branch information
yaansz committed Aug 29, 2024
1 parent 7244424 commit 3ba6afa
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
11 changes: 10 additions & 1 deletion src/main/java/com/softawii/curupira/v2/core/ExceptionMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,17 @@
import com.softawii.curupira.v2.localization.LocalizationManager;
import com.softawii.curupira.v2.utils.ScanUtils;
import net.dv8tion.jda.api.interactions.Interaction;
import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

public class ExceptionMapper {
private static final Logger logger = LoggerFactory.getLogger(ExceptionMapper.class);
Expand All @@ -31,12 +35,17 @@ public ExceptionMapper(ContextProvider context, String ... packages) {
scanPackages(packages);
}

private Set<Class> getClassesInPackage(String pkg, Class<? extends Annotation> annotation) {
Reflections reflections = new Reflections(pkg, new SubTypesScanner(false));
return new HashSet<>(reflections.getSubTypesOf(Object.class)).stream().filter(clazz -> clazz.getPackage().getName().startsWith(pkg) && clazz.isAnnotationPresent(annotation)).collect(Collectors.toSet());
}

private void scanPackages(String ... packages) {
// get all classes with DiscordExceptions annotation
Set<Class> classes = new HashSet<>();

for(String pkg : packages) {
classes.addAll(ScanUtils.getClassesInPackage(pkg, DiscordExceptions.class).stream().toList());
classes.addAll(getClassesInPackage(pkg, DiscordExceptions.class));
}

for(Class<?> clazz : classes) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public void scan() {
}

private void scanPackage(String packageName) {
List<Class> classes = ScanUtils.getClassesInPackage(packageName, DiscordController.class).stream().toList();
List<Class<?>> classes = ScanUtils.getClassesInPackage(packageName, DiscordController.class).stream().toList();

for(Class clazz : classes) {
Object instance = context.getInstance(clazz);
Expand Down
14 changes: 12 additions & 2 deletions src/main/java/com/softawii/curupira/v2/utils/ScanUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,25 @@ public class ScanUtils {

private static final Logger LOGGER = LoggerFactory.getLogger(ScanUtils.class);

public static Set<Class> getClassesInPackage(String pkg, Class annotation) {
public static Set<Class<?>> getClassesInPackage(String pkg, Class annotation) {
LOGGER.info("Scanning package: {}, annotation: {}", pkg, annotation);
Reflections reflections = new Reflections(
new ConfigurationBuilder()
.forPackages(pkg)
.setScanners(Scanners.SubTypes, Scanners.TypesAnnotated)
.filterInputsBy((input) -> input.endsWith(".class") && input.startsWith(pkg.replace('.', '/')))
);
return new HashSet<>(reflections.getTypesAnnotatedWith(annotation));
HashSet<Class<?>> set = new HashSet<Class<?>>(reflections.getTypesAnnotatedWith(annotation));

for(Class<?> clazz : set.stream().toList()) {
if(clazz.getPackage().getName().startsWith(pkg)) {
LOGGER.info("Found class: {}", clazz.getName());
} else {
set.remove(clazz);
}
}

return set;
}

public static List<Method> getMethodsAnnotatedWith(Class clazz, Class filtering) {
Expand Down

0 comments on commit 3ba6afa

Please sign in to comment.