PageRenderTime 54ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/alibaba/fastjson/util/ASMUtils.java

https://bitbucket.org/xiejuntao/xdesktop
Java | 109 lines | 95 code | 14 blank | 0 comment | 28 complexity | 022d9f1e6f8aebf17e5b776a5239f226 MD5 | raw file
  1. package com.alibaba.fastjson.util;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Method;
  5. import java.lang.reflect.Type;
  6. public class ASMUtils {
  7. public static boolean isAndroid(String vmName) {
  8. return "Dalvik".equals(vmName)
  9. || "Lemur".equals(vmName) // aliyun-vm name
  10. ;
  11. }
  12. public static boolean isAndroid() {
  13. return isAndroid(System.getProperty("java.vm.name"));
  14. }
  15. public static String getDesc(Method method) {
  16. StringBuffer buf = new StringBuffer();
  17. buf.append("(");
  18. java.lang.Class<?>[] types = method.getParameterTypes();
  19. for (int i = 0; i < types.length; ++i) {
  20. buf.append(getDesc(types[i]));
  21. }
  22. buf.append(")");
  23. buf.append(getDesc(method.getReturnType()));
  24. return buf.toString();
  25. }
  26. public static String getDesc(Constructor<?> constructor) {
  27. StringBuffer buf = new StringBuffer();
  28. buf.append("(");
  29. java.lang.Class<?>[] types = constructor.getParameterTypes();
  30. for (int i = 0; i < types.length; ++i) {
  31. buf.append(getDesc(types[i]));
  32. }
  33. buf.append(")V");
  34. return buf.toString();
  35. }
  36. public static String getDesc(Class<?> returnType) {
  37. if (returnType.isPrimitive()) {
  38. return getPrimitiveLetter(returnType);
  39. } else if (returnType.isArray()) {
  40. return "[" + getDesc(returnType.getComponentType());
  41. } else {
  42. return "L" + getType(returnType) + ";";
  43. }
  44. }
  45. public static String getType(Class<?> parameterType) {
  46. if (parameterType.isArray()) {
  47. return "[" + getDesc(parameterType.getComponentType());
  48. } else {
  49. if (!parameterType.isPrimitive()) {
  50. String clsName = parameterType.getName();
  51. return clsName.replaceAll("\\.", "/");
  52. } else {
  53. return getPrimitiveLetter(parameterType);
  54. }
  55. }
  56. }
  57. public static String getPrimitiveLetter(Class<?> type) {
  58. if (Integer.TYPE.equals(type)) {
  59. return "I";
  60. } else if (Void.TYPE.equals(type)) {
  61. return "V";
  62. } else if (Boolean.TYPE.equals(type)) {
  63. return "Z";
  64. } else if (Character.TYPE.equals(type)) {
  65. return "C";
  66. } else if (Byte.TYPE.equals(type)) {
  67. return "B";
  68. } else if (Short.TYPE.equals(type)) {
  69. return "S";
  70. } else if (Float.TYPE.equals(type)) {
  71. return "F";
  72. } else if (Long.TYPE.equals(type)) {
  73. return "J";
  74. } else if (Double.TYPE.equals(type)) {
  75. return "D";
  76. }
  77. throw new IllegalStateException("Type: " + type.getCanonicalName() + " is not a primitive type");
  78. }
  79. public static Type getMethodType(Class<?> clazz, String methodName) {
  80. try {
  81. Method method = clazz.getMethod(methodName);
  82. return method.getGenericReturnType();
  83. } catch (Exception ex) {
  84. return null;
  85. }
  86. }
  87. public static Type getFieldType(Class<?> clazz, String fieldName) {
  88. try {
  89. Field field = clazz.getField(fieldName);
  90. return field.getGenericType();
  91. } catch (Exception ex) {
  92. return null;
  93. }
  94. }
  95. }