// Path: easymvp-weaver/src/main/java/easymvp/weaver/JavassistUtils.java
// static String[] ctClassToString(CtClass[] params) {
//     String[] strings = new String[params.length];
//     for (int i = 0; i < params.length; i++) {
//         strings[i] = params[i].getName();
//     }
//     return strings;
// }
// 
// Path: easymvp-weaver/src/main/java/easymvp/weaver/JavassistUtils.java
// static boolean sameSignature(List<String> parameters, CtMethod method)
//         throws NotFoundException {
//     CtClass[] methodParameters = method.getParameterTypes();
//     if (methodParameters.length == 0 && parameters.size() == 0) return true;
//     if (methodParameters.length != 0 && parameters.size() == 0) return false;
//     if (methodParameters.length == 0 && parameters.size() != 0) return false;
//     for (CtClass clazz : method.getParameterTypes()) {
//         if (!parameters.contains(clazz.getName())) return false;
//     }
//     return true;
// }
// 
// Path: easymvp-weaver/src/main/java/easymvp/weaver/JavassistUtils.java
// static CtClass[] stringToCtClass(ClassPool pool, String[] params)
//         throws NotFoundException {
//     CtClass[] ctClasses = new CtClass[params.length];
//     for (int i = 0; i < params.length; i++) {
//         ctClasses[i] = pool.get(params[i]);
//     }
//     return ctClasses;
// }


import weaver.processor.WeaverProcessor;
import static easymvp.weaver.JavassistUtils.ctClassToString;
import static easymvp.weaver.JavassistUtils.sameSignature;
import static easymvp.weaver.JavassistUtils.stringToCtClass;
import easymvp.annotation.ActivityView;
import easymvp.annotation.CustomView;
import easymvp.annotation.FragmentView;
import easymvp.annotation.conductor.ConductorController;
import java.util.Arrays;
import java.util.Set;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.NotFoundException;
import weaver.common.WeaveEnvironment;
import weaver.instrumentation.injection.ClassInjector;
            for (int i = 1; i < aspectMethodParams.length - 1; i++) {
                areSame = baseMethodParams[i - 1].getName().equals(aspectMethodParams[i].getName());
            }
            return areSame;
        }
        return false;
    }

    private CtMethod getLowerNumberOfAspectJMethods(CtMethod best, CtMethod candidate) {
        if (best == null) {
            return candidate;
        }
        int bestNum = getAspectJMethodNumber(best.getName());
        int candidateNum = getAspectJMethodNumber(candidate.getName());
        return bestNum < candidateNum ? best : candidate;
    }

    private int getAspectJMethodNumber(String methodName) {
        String num = methodName.substring(
                methodName.indexOf(ASPECTJ_GEN_METHOD) + ASPECTJ_GEN_METHOD.length());
        return Integer.valueOf(num);
    }

    private void AfterSuper(ClassInjector classInjector, CtMethod method, String statement)
            throws Exception {
        if (method.getName().contains(ASPECTJ_GEN_METHOD)) {
            statement = statement.replaceAll("\\$s", "\\ajc\\$this");
            String methodName =
                    method.getName().substring(0, method.getName().indexOf(ASPECTJ_GEN_METHOD));
            classInjector.insertMethod(method.getName(),
// Path: easymvp-weaver/src/main/java/easymvp/weaver/JavassistUtils.java
// static String[] ctClassToString(CtClass[] params) {
//     String[] strings = new String[params.length];
//     for (int i = 0; i < params.length; i++) {
//         strings[i] = params[i].getName();
//     }
//     return strings;
// }
// 
// Path: easymvp-weaver/src/main/java/easymvp/weaver/JavassistUtils.java
// static boolean sameSignature(List<String> parameters, CtMethod method)
//         throws NotFoundException {
//     CtClass[] methodParameters = method.getParameterTypes();
//     if (methodParameters.length == 0 && parameters.size() == 0) return true;
//     if (methodParameters.length != 0 && parameters.size() == 0) return false;
//     if (methodParameters.length == 0 && parameters.size() != 0) return false;
//     for (CtClass clazz : method.getParameterTypes()) {
//         if (!parameters.contains(clazz.getName())) return false;
//     }
//     return true;
// }
// 
// Path: easymvp-weaver/src/main/java/easymvp/weaver/JavassistUtils.java
// static CtClass[] stringToCtClass(ClassPool pool, String[] params)
//         throws NotFoundException {
//     CtClass[] ctClasses = new CtClass[params.length];
//     for (int i = 0; i < params.length; i++) {
//         ctClasses[i] = pool.get(params[i]);
//     }
//     return ctClasses;
// }


// Path: easymvp-weaver/src/main/java/easymvp/weaver/ViewDelegateBinder.java
import weaver.processor.WeaverProcessor;
import static easymvp.weaver.JavassistUtils.ctClassToString;
import static easymvp.weaver.JavassistUtils.sameSignature;
import static easymvp.weaver.JavassistUtils.stringToCtClass;
import easymvp.annotation.ActivityView;
import easymvp.annotation.CustomView;
import easymvp.annotation.FragmentView;
import easymvp.annotation.conductor.ConductorController;
import java.util.Arrays;
import java.util.Set;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.NotFoundException;
import weaver.common.WeaveEnvironment;
import weaver.instrumentation.injection.ClassInjector;

            for (int i = 1; i < aspectMethodParams.length - 1; i++) {
                areSame = baseMethodParams[i - 1].getName().equals(aspectMethodParams[i].getName());
            }
            return areSame;
        }
        return false;
    }

    private CtMethod getLowerNumberOfAspectJMethods(CtMethod best, CtMethod candidate) {
        if (best == null) {
            return candidate;
        }
        int bestNum = getAspectJMethodNumber(best.getName());
        int candidateNum = getAspectJMethodNumber(candidate.getName());
        return bestNum < candidateNum ? best : candidate;
    }

    private int getAspectJMethodNumber(String methodName) {
        String num = methodName.substring(
                methodName.indexOf(ASPECTJ_GEN_METHOD) + ASPECTJ_GEN_METHOD.length());
        return Integer.valueOf(num);
    }

    private void AfterSuper(ClassInjector classInjector, CtMethod method, String statement)
            throws Exception {
        if (method.getName().contains(ASPECTJ_GEN_METHOD)) {
            statement = statement.replaceAll("\\$s", "\\ajc\\$this");
            String methodName =
                    method.getName().substring(0, method.getName().indexOf(ASPECTJ_GEN_METHOD));
            classInjector.insertMethod(method.getName(),
                    ctClassToString(method.getParameterTypes()))