package com.meituan.robust; import android.text.TextUtils; /** * Created by c_kunwu on 16/7/5. */ public class PatchProxy { static public boolean isSupport(Object[] arrayOfObject, Object current, ChangeQuickRedirect changeQuickRedirect, boolean isStatic, int methodNumber) { if (changeQuickRedirect == null) { return false; } String classMethod = getClassMethod(isStatic, methodNumber); if (TextUtils.isEmpty(classMethod)) { return false; } Object[] objects = getObjects(arrayOfObject, current, isStatic); try { return changeQuickRedirect.isSupport(classMethod, objects); } catch (Throwable t) { return false; } } static public Object accessDispatch(Object[] arrayOfObject, Object current, ChangeQuickRedirect changeQuickRedirect, boolean isStatic, int methodNumber) { if (changeQuickRedirect == null) { return null; } String classMethod = getClassMethod(isStatic, methodNumber); if (TextUtils.isEmpty(classMethod)) { return null; } Object[] objects = getObjects(arrayOfObject, current, isStatic); return changeQuickRedirect.accessDispatch(classMethod, objects); } static public void accessDispatchVoid(Object[] arrayOfObject, Object current, ChangeQuickRedirect changeQuickRedirect, boolean isStatic, int methodNumber) { if (changeQuickRedirect == null) { return; } String classMethod = getClassMethod(isStatic, methodNumber); if (TextUtils.isEmpty(classMethod)) { return; } Object[] objects = getObjects(arrayOfObject, current, isStatic); changeQuickRedirect.accessDispatch(classMethod, objects); } static private Object[] getObjects(Object[] arrayOfObject, Object current, boolean isStatic) { Object[] objects; if (arrayOfObject == null) { return null; } int argNum = arrayOfObject.length; if (isStatic) { objects = new Object[argNum]; } else { objects = new Object[argNum + 1]; } int x = 0; for (; x < argNum; x++) { objects[x] = arrayOfObject[x]; } if (!(isStatic)) { objects[x] = current; } return objects; } static private String getClassMethod(boolean isStatic, int methodNumber) { String classMethod = ""; try { java.lang.StackTraceElement stackTraceElement = (new java.lang.Throwable()).getStackTrace()[2]; String methodName = stackTraceElement.getMethodName(); String className = stackTraceElement.getClassName(); classMethod = className + ":" + methodName + ":" + isStatic + ":" + methodNumber; } catch (Throwable t) { } return classMethod; } }