package ca.janeg.cb; import java.lang.reflect.Array; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.StringTokenizer; /** * A method group object contains class method information separated into * groups based on their access privileges. Each grouping is sorted on the * methods simple name. * * @author Jane Griscti jane@janeg.ca * @created January 13, 2002 */ class MethodGroup { private final Class owner; private Method[] methods; private Method[] publicMethods; private Method[] protectedMethods; private Method[] packageMethods; private Method[] privateMethods; boolean hasMethods; /** * Creates a MethodGroup object. * *@param owner the class object the methods are derived from */ MethodGroup( final Class owner ) { this.owner = owner; methods = owner.getDeclaredMethods(); Arrays.sort( methods, NameComparator.getInstance() ); hasMethods = Array.getLength( methods ) > 0; if( hasMethods ) separateByAccess(); } // separate methods based on their access level private void separateByAccess() { Object[] obj = AccessSeparator.separate( methods ); ArrayList al = (ArrayList)obj[0]; publicMethods = (Method[])al.toArray( new Method[0] ); al = (ArrayList)obj[1]; protectedMethods = (Method[])al.toArray( new Method[0] ); al = (ArrayList)obj[2]; privateMethods = (Method[])al.toArray( new Method[0] ); al = (ArrayList)obj[3]; packageMethods = (Method[])al.toArray( new Method[0] ); } Method[] getPublicMethods() { return publicMethods; } Method[] getProtectedMethods() { return protectedMethods; } Method[] getPrivateMethods() { return privateMethods; } Method[] getPackageMethods() { return packageMethods; } Method[] getAllMethods() { return methods; } }