@Override
    protected void initAdditionalProperties() {
    	IClass[] argumentClasses = new IClass[arguments.length];
        List<IClass> argumentClassList = new ArrayList<>();
        for (int i = 0; i < arguments.length; i++) {
            argumentClassList.add(arguments[i].getResultType());
        }
        argumentClassList.toArray(argumentClasses);
        
    	AMethod currentMethod = block.getMethod();
        if(currentMethod.getMode() == MethodBuilder.MODE_MODIFY && name.endsWith(ASConstants.METHOD_PROXY_SUFFIX)){
        	methodMeta = (AMethodMeta) currentMethod.getMeta().clone();
            methodMeta.setName(name);
        }else{
            methodMeta = new MethodChooser(block.getMethod().getClassLoader(), block.getMethodDeclaringClass(), methodOwner, name, argumentClasses).chooseMethod();
            if(methodMeta == null){
                throw new ASMSupportException("No such method " + AMethodMeta.getMethodString(name, argumentClasses) + " in " + methodOwner);
            }
        }
        
        if(Modifiers.isVarargs(methodMeta.getModifiers())){
            
        	IClass[] foundMethodArgTypes = methodMeta.getParameterTypes();
        	
        	if(ArrayUtils.getLength(foundMethodArgTypes) != ArrayUtils.getLength(arguments) ||
        	   !arguments[ArrayUtils.getLength(arguments) - 1].getResultType().isArray()){
        		
        		int fixedArgsLen = methodMeta.getParameterTypes().length - 1;
                KernelParam[] fixedArgs = new KernelParam[fixedArgsLen];
                System.arraycopy(arguments, 0, fixedArgs, 0, fixedArgsLen);

                KernelArrayValue variableVerifyArgs;
                ArrayClass arrayClass = (ArrayClass) methodMeta.getParameterTypes()[methodMeta.getParameterTypes().length - 1];
                variableVerifyArgs = block.newarray(arrayClass,
                       ArrayUtils.subarray(arguments, fixedArgsLen , arguments.length));
                variableVerifyArgs.asArgument();
                
                arguments = ArrayUtils.add(fixedArgs, variableVerifyArgs);
        	}
        }

        for(IClass exception : methodMeta.getExceptions()){
    	    block.throwException(exception);
    	}
        
    }