Here you can find the source of getMethodNameAndDescriptor(Method m)
public static String getMethodNameAndDescriptor(Method m)
//package com.java2s; /*//from w ww . ja v a2s .co m * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.lang.reflect.Method; public class Main { /** * Returns a string consisting of the given method's name followed by * its "method descriptor", as appropriate for use in the computation * of the "method hash". * * See section 4.3.3 of The Java(TM) Virtual Machine Specification for * the definition of a "method descriptor". */ public static String getMethodNameAndDescriptor(Method m) { StringBuffer desc = new StringBuffer(m.getName()); desc.append('('); Class[] paramTypes = m.getParameterTypes(); for (int i = 0; i < paramTypes.length; i++) { desc.append(getTypeDescriptor(paramTypes[i])); } desc.append(')'); Class returnType = m.getReturnType(); if (returnType == void.class) { // optimization: handle void here desc.append('V'); } else { desc.append(getTypeDescriptor(returnType)); } return desc.toString(); } /** * Returns the descriptor of a particular type, as appropriate for either * a parameter type or return type in a method descriptor. */ private static String getTypeDescriptor(Class type) { if (type.isPrimitive()) { if (type == int.class) { return "I"; } else if (type == boolean.class) { return "Z"; } else if (type == byte.class) { return "B"; } else if (type == char.class) { return "C"; } else if (type == short.class) { return "S"; } else if (type == long.class) { return "J"; } else if (type == float.class) { return "F"; } else if (type == double.class) { return "D"; } else if (type == void.class) { return "V"; } else { throw new Error("unrecognized primitive type: " + type); } } else if (type.isArray()) { /* * According to JLS 20.3.2, the getName() method on Class does * return the virtual machine type descriptor format for array * classes (only); using that should be quicker than the otherwise * obvious code: * * return "[" + getTypeDescriptor(type.getComponentType()); */ return type.getName().replace('.', '/'); } else { return "L" + type.getName().replace('.', '/') + ";"; } } }