package org.test4j.json.encoder.object.spec; import java.io.IOException; import java.io.Writer; import java.lang.reflect.Method; import java.util.List; import org.test4j.json.encoder.object.SpecEncoder; @SuppressWarnings("rawtypes") public class MethodEncoder extends SpecEncoder<Method> { public static MethodEncoder instance = new MethodEncoder(); public static final String JSON_METHOD_NAME = "methodName"; public static final String JSON_METHOD_DECLAREDBY = "declaredBy"; public static final String JSON_METHOD_PARATYPE = "paraType"; protected MethodEncoder() { super(Method.class); } @Override protected void encodeSpec(Method target, Writer writer, List<String> references) throws Exception { String name = target.getName(); String claz = target.getDeclaringClass().getName(); Class[] paraTypes = target.getParameterTypes(); writer.append('{'); this.writerSpecProperty(JSON_METHOD_NAME, writer); writer.write(":"); writer.append(quote_Char).append(name).append(quote_Char); writer.append(','); this.writerSpecProperty(JSON_METHOD_DECLAREDBY, writer); writer.write(":"); writer.append(quote_Char).append(claz).append(quote_Char); writer.append(','); this.writerSpecProperty(JSON_METHOD_PARATYPE, writer); writer.append(':'); this.writerParaTypes(writer, paraTypes); writer.append('}'); } private void writerParaTypes(Writer writer, Class[] types) throws IOException { writer.append('['); boolean isFirst = true; for (Class type : types) { if (isFirst) { isFirst = false; } else { writer.append(','); } writer.append(quote_Char).append(type.getName()).append(quote_Char); } writer.append(']'); } }