in tools/erlanalysis/src/main/java/org/apache/dubbo/erlang/analysis/parse/ParseJarInterfaceInfo.java [113:156]
private void parseClassMethods(Class classObj, InterfaceInfo interfaceInfo) {
Method[] methodsList = classObj.getDeclaredMethods();
for (int i = 0; i < methodsList.length; i++) {
Method method = methodsList[i];
MethodInfo methodInfo = new MethodInfo();
methodInfo.setName(method.getName());
String methodDescriptor = Type.getMethodDescriptor(method);
methodInfo.setMethodDescriptor(methodDescriptor);
int tmpIndex = methodDescriptor.indexOf(")");
String argsDescriptor = methodDescriptor.substring(1, tmpIndex);
String returnDescriptor = methodDescriptor.substring(tmpIndex);
methodInfo.setArgsType(argsDescriptor);
methodInfo.setReturnType(returnDescriptor);
methodInfo.setArgsLength(Type.getArgumentTypes(method).length);
Parameter[] parameters = method.getParameters();
String[] paramterNames = new String[parameters.length];
for (int index = 0; index < parameters.length; index++) {
paramterNames[index] = parameters[index].getName();
}
methodInfo.setParameterName(paramterNames);
// 通过asm获取存在为null的情况。
// try {
// String[] paramterNames = MethodParseUtil.getMethodParamNames(method);
// methodInfo.setParameterName(paramterNames);
// } catch (IOException e) {
// logger.warn("无法获取参数名称",e);
// Parameter[] parameters = method.getParameters();
// String[] paramterNames=new String[parameters.length];
// for(int index=0;index<parameters.length;index++){
// paramterNames[i]=parameters[i].getName();
// }
// methodInfo.setParameterName(paramterNames);
// }
interfaceInfo.addMethods(methodInfo);
checkCommonType(Type.getArgumentTypes(method));
checkCommonType(Type.getReturnType(method));
}
}