package openmods.structured; import gnu.trove.impl.Constants; import gnu.trove.map.TObjectIntMap; import gnu.trove.map.hash.TObjectIntHashMap; import java.lang.reflect.Field; public abstract class FieldContainer implements IStructureContainer<IStructureElement> { private static final int NULL = -1; private final TObjectIntMap<Field> fields = new TObjectIntHashMap<Field>(Constants.DEFAULT_CAPACITY, Constants.DEFAULT_LOAD_FACTOR, NULL); @Override public void createElements(IElementAddCallback<IStructureElement> callback) { for (Field field : getClass().getFields()) { field.setAccessible(true); if (!field.isAnnotationPresent(StructureField.class)) continue; final ElementField fieldWrapper = new ElementField(this, field); final int fieldId = callback.addElement(fieldWrapper); fields.put(field, fieldId); } } public Integer getElementIdForField(Field field) { final int id = fields.get(field); return id != NULL? id : null; } }