blob: 9d41b6a4282d743d716a0988b9699dd748562a5e [file] [log] [blame]
package org.robolectric.res;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class ResourceTableFactory {
public static PackageResourceTable newResourceTable(String packageName, ResourcePath... resourcePaths) {
PackageResourceTable resourceTable = new PackageResourceTable(packageName);
for (ResourcePath resourcePath : resourcePaths) {
if (resourcePath.getRClass() != null) {
addRClassValues(resourceTable, resourcePath.getRClass());
}
if (resourcePath.getInternalRClass() != null) {
addRClassValues(resourceTable, resourcePath.getInternalRClass());
}
}
for (ResourcePath resourcePath : resourcePaths) {
ResourceParser.load(packageName, resourcePath, resourceTable);
}
return resourceTable;
}
private static void addRClassValues(ResourceTable resourceTable, Class<?> rClass) {
for (Class innerClass : rClass.getClasses()) {
for (Field field : innerClass.getDeclaredFields()) {
if (field.getType().equals(Integer.TYPE) && Modifier.isStatic(field.getModifiers())) {
String resourceType = innerClass.getSimpleName();
int id;
try {
id = field.getInt(null);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
if (!resourceType.equals("styleable")) {
String resourceName = field.getName();
resourceTable.addResource(id, resourceType, resourceName);
}
}
}
}
}
}