protected static String generateHandlerTemplate( String methodName, String signature, String sourceClass) { Type[] argTypes = Type.getArgumentTypes(signature); StringBuilder tpl = new StringBuilder(); tpl.append(" public static void ").append(methodName).append('('); for (int var = 0; var < argTypes.length; var++) { if (EventProxy.appendTypeName(tpl, argTypes[var], sourceClass)) tpl.append("[]"); if (var == 0) tpl.append(" e"); if (var > 0) tpl.append(" arg").append(String.valueOf(var)); if (var < argTypes.length - 1) tpl.append(", "); } tpl.append(")\n\t {\n\t // handler code here\n\t }"); return tpl.toString(); }
private static boolean appendTypeName(StringBuilder tpl, Type type, String sourceClass) { switch (type.getSort()) { case Type.BOOLEAN: tpl.append("boolean"); return false; case Type.CHAR: tpl.append("char"); return false; case Type.BYTE: tpl.append("byte"); return false; case Type.SHORT: tpl.append("short"); return false; case Type.INT: tpl.append("int"); return false; case Type.FLOAT: tpl.append("float"); return false; case Type.LONG: tpl.append("long"); return false; case Type.DOUBLE: tpl.append("double"); return false; case Type.ARRAY: EventProxy.appendTypeName(tpl, type.getElementType(), sourceClass); return true; case Type.OBJECT: String typeName = type.getClassName(); typeName = typeName.substring(typeName.lastIndexOf('.') + 1); tpl.append(typeName); if (typeName.endsWith("ReturnEventInfo")) tpl.append('<').append(sourceClass).append(", ?>"); else if (typeName.endsWith("EventInfo")) tpl.append('<').append(sourceClass).append('>'); return false; } tpl.append("Object"); return false; }