1 45 package org.exolab.jms.net.util; 46 47 import java.lang.reflect.Method ; 48 import java.util.ArrayList ; 49 50 51 57 public final class MethodHelper { 58 59 62 private MethodHelper() { 63 } 64 65 72 public static Method [] getAllInterfaceMethods(Class clazz) { 73 final int size = 10; 74 ArrayList result = new ArrayList (size); 75 getInterfaceMethods(getAllInterfaces(clazz), result); 76 return (Method []) result.toArray(new Method [0]); 77 } 78 79 85 public static Method [] getInterfaceMethods(Class clazz) { 86 final int size = 10; 87 ArrayList result = new ArrayList (size); 88 getInterfaceMethods(clazz.getInterfaces(), result); 89 return (Method []) result.toArray(new Method [0]); 90 } 91 92 99 public static long getMethodID(Method method) { 100 final int shift = 32; 101 long hash = method.getDeclaringClass().getName().hashCode(); 102 hash ^= method.getName().hashCode(); 103 hash ^= method.getReturnType().getName().hashCode(); 104 Class [] args = method.getParameterTypes(); 105 for (int i = 0; i < args.length; ++i) { 106 hash ^= ((long) args[i].getName().hashCode()) << shift; 107 } 108 return hash; 109 } 110 111 118 private static void getInterfaceMethods(Class [] interfaces, 119 ArrayList result) { 120 for (int i = 0; i < interfaces.length; ++i) { 121 Class iface = interfaces[i]; 122 getInterfaceMethods(iface.getInterfaces(), result); 123 Method [] methods = iface.getMethods(); 124 for (int j = 0; j < methods.length; ++j) { 125 if (methods[j].getDeclaringClass() == interfaces[i]) { 126 result.add(methods[j]); 127 } 128 } 129 } 130 } 131 132 138 public static Class [] getAllInterfaces(Class clazz) { 139 ArrayList result = new ArrayList (); 140 getAllInterfaces(clazz, result); 141 return (Class []) result.toArray(new Class [0]); 142 } 143 144 150 private static void getAllInterfaces(Class clazz, ArrayList result) { 151 Class [] interfaces = clazz.getInterfaces(); 152 for (int i = 0; i < interfaces.length; ++i) { 153 if (!result.contains(interfaces[i])) { 154 result.add(interfaces[i]); 155 } 156 } 157 Class superClass = clazz.getSuperclass(); 158 if (superClass != null) { 159 getAllInterfaces(superClass, result); 160 } 161 } 162 } 163 | Popular Tags |