package com.github.czyzby.autumn.scanner;
import java.lang.annotation.Annotation;
import com.badlogic.gdx.utils.Array;
import com.github.czyzby.kiwi.util.gdx.collection.GdxArrays;
/** Rather than scanning through the whole application, this scanner uses a limited pool of registered classes. This
* might be significantly faster than other scanners, but it does require "manual" registration of scanned classes in
* most cases, so it defeats the whole purpose of automatic class scanning. Use if you have a good reason to do so.
*
* @author MJ */
public class FixedClassScanner extends AbstractClassScanner {
private final Array<Class<?>> pool;
/** @param availableClasses will be available in scanner's pool. */
public FixedClassScanner(final Class<?>... availableClasses) {
pool = GdxArrays.newArray(availableClasses);
}
/** @param availableClass will be available in scanner's pool. */
public void addClass(final Class<?> availableClass) {
pool.add(availableClass);
}
/** @param availableClasses will be available in scanner's pool. */
public void addClasses(final Class<?>... availableClasses) {
pool.addAll(availableClasses);
}
@Override
public Array<Class<?>> findClassesAnnotatedWith(final Class<?> root,
final Iterable<Class<? extends Annotation>> annotations) {
final String packageName = extractPackageName(root);
final Array<Class<?>> result = GdxArrays.newArray();
for (final Class<?> possibleMatch : pool) {
if (isInPackage(possibleMatch, packageName) && isAnnotatedWithAny(possibleMatch, annotations)) {
result.add(possibleMatch);
}
}
return result;
}
}