package com.cardshifter.gdx;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import com.badlogic.gdx.utils.reflect.Field;
import com.cardshifter.api.ArrayUtil;
import com.cardshifter.api.serial.ReflField;
import com.cardshifter.api.serial.ReflectionInterface;
import java.util.*;
/**
* Created by Simon on 4/25/2015.
*/
public class GdxReflection implements ReflectionInterface {
private final Set<String> fieldNameSkip = new HashSet<String>(
Arrays.asList("___clazz", "castableTypeMap", "expando", "typeMarker")
);
@Override
public Object create(Class<?> aClass) throws Exception {
return ClassReflection.newInstance(aClass);
}
@Override
public ReflField[] getFields(Class<?> aClass) {
Field[] fields = ClassReflection.getDeclaredFields(aClass);
List<ReflField> result = new ArrayList<ReflField>(fields.length);
for (Field field : fields) {
String name = field.getName();
if (fieldNameSkip.contains(name)) {
continue;
}
result.add(new GdxField(field));
}
return result.toArray(new ReflField[result.size()]);
}
@Override
public boolean isEnum(Class<?> aClass) {
return ClassReflection.isAssignableFrom(Enum.class, aClass);
}
@Override
public Class<?> forName(String s) throws Exception {
return ClassReflection.forName(s);
}
}