package com.github.czyzby.autumn.jtransc.scanner;
import java.lang.annotation.Annotation;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import com.github.czyzby.autumn.scanner.AbstractClassScanner;
import com.github.czyzby.kiwi.util.common.Strings;
import com.github.czyzby.kiwi.util.gdx.collection.GdxArrays;
import com.jtransc.reflection.JTranscReflection;
/** Default {@link com.github.czyzby.autumn.scanner.ClassScanner ClassScanner} implementation for the JTransc
* applications.
*
* @author MJ
* @see com.github.czyzby.autumn.scanner.FixedClassScanner */
public class JTranscClassScanner extends AbstractClassScanner {
@Override
public Array<Class<?>> findClassesAnnotatedWith(final Class<?> root,
final Iterable<Class<? extends Annotation>> annotations) {
final Array<Class<?>> result = GdxArrays.newArray();
final String packageName = extractPackageName(root);
for (final String className : JTranscReflection.getAllClasses()) {
if (Strings.isNotEmpty(className) && className.startsWith(packageName)) {
try {
final Class<?> processed = ClassReflection.forName(className);
if (isAnnotatedWithAny(processed, annotations)) {
result.add(processed);
}
} catch (final Exception exception) {
Gdx.app.debug("JTransc", "Error thrown during processing of class: " + className, exception);
}
}
}
return result;
}
}