package ca.janeg.cb; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; /** * A field group object contains class field information separated into groups * based on their access privileges. Each grouping is sorted on the fields * simple name. * *@author Jane Griscti jane@janeg.ca *@created January 13, 2002 */ class FieldGroup { private final Class owner; private Field[] flds; private Field[] publicFields; private Field[] protectedFields; private Field[] packageFields; private Field[] privateFields; boolean hasFields; /** * Creates a new FieldGroup object. * *@param owner the class object the fields are derived from */ FieldGroup( final Class owner ) { this.owner = owner; flds = owner.getDeclaredFields(); Arrays.sort( flds, NameComparator.getInstance() ); hasFields = Array.getLength( flds ) > 0; if( hasFields ) separateByAccess(); } // separate fields based on their access level private void separateByAccess() { Object[] obj = AccessSeparator.separate( flds ); ArrayList al = (ArrayList)obj[0]; publicFields = (Field[])al.toArray( new Field[0] ); al = (ArrayList)obj[1]; protectedFields = (Field[])al.toArray( new Field[0] ); al = (ArrayList)obj[2]; privateFields = (Field[])al.toArray( new Field[0] ); al = (ArrayList)obj[3]; packageFields = (Field[])al.toArray( new Field[0] ); } Field[] getPublicFields() { return publicFields; } Field[] getProtectedFields() { return protectedFields; } Field[] getPrivateFields() { return privateFields; } Field[] getPackageFields() { return packageFields; } Field[] getAllFields() { return flds; } }