/* * Created on Sep 20, 2004 */ package cyrille.lang.reflect; import java.io.PrintWriter; import java.lang.reflect.Method; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author <a href="mailto:cleclerc@pobox.com">Cyrille Le Clerc </a> */ public class ClassGenerator { private static final Log log = LogFactory.getLog(ClassGenerator.class); /** * */ public ClassGenerator() { super(); } public void generate(Class clazz, PrintWriter out) { out.println(clazz.getPackage().getName() + ";"); out.println(); out.println("public class " + clazz.getName() + "Impl {"); Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { Class[] parameterTypes; Class parameterType; String parameterName; generateMethod(method, out); } out.println("}"); } /** * @param method * @param out */ private void generateMethod(Method method, PrintWriter out) { out.print("\tpublic " + method.getReturnType().getName() + " " + method.getName() + "("); Class[] parameterTypes = method.getParameterTypes(); for (int j = 0; j < parameterTypes.length; j++) { if (j > 0) { out.print(", "); } Class parameterType = parameterTypes[j]; String parameterName; generateParameter(parameterType, j, out); } out.println(") {"); out.println("\t}"); } /** * @param parameterType * @param j * @param out */ private void generateParameter(Class parameterType, int j, PrintWriter out) { log.debug(parameterType); String parameterName; if (parameterType.getName().indexOf('.') == -1) { parameterName = parameterType.getName(); } else { parameterName = StringUtils.substringAfterLast(parameterType.getName(), "."); parameterName = StringUtils.lowerCase(parameterName.substring(0, 1)) + parameterName.substring(1); } if (parameterType.isArray()) { out.print(parameterType.getName()); } else { out.print(parameterType.getName()); } out.print(" " + parameterName + j); } }