package knorxx.framework.generator.order; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.List; import java.util.Set; /** * * @author sj */ public class StaticUsageOrderSorter extends OrderSorter { public StaticUsageOrderSorter() { } public StaticUsageOrderSorter(OrderSorter nextCollector) { super(nextCollector); } @Override protected Set<OrderConstraint> getConstraintsInternal(List<Class<?>> classes) { OrderingResult result = new OrderingResult(classes); for (Class<?> javaClass : classes) { String javaClassName = javaClass.getName(); for (Field field : javaClass.getDeclaredFields()) { if (Modifier.isStatic(field.getModifiers())) { try { field.setAccessible(true); Object value = field.get(null); if (value != null) { String referencedValueClassName = value.getClass().getName(); if(!referencedValueClassName.equals(javaClassName)) { // NOTE Enums types seem to reference themself... result.addConstraint(referencedValueClassName, javaClassName); } } } catch (IllegalArgumentException | IllegalAccessException ex) { throw new IllegalStateException("Error while analyzing the static fields of '" + javaClass.getName() + "'!", ex); } } } } return result.getConstraints(); } }