Example usage for org.aspectj.weaver.tools JoinPointMatch getParameterBindings

List of usage examples for org.aspectj.weaver.tools JoinPointMatch getParameterBindings

Introduction

In this page you can find the example usage for org.aspectj.weaver.tools JoinPointMatch getParameterBindings.

Prototype

PointcutParameter[] getParameterBindings();

Source Link

Document

Get the parameter bindings at the matched join point.

Usage

From source file:org.springframework.aop.aspectj.AbstractAspectJAdvice.java

License:Apache License

/**
 * Take the arguments at the method execution join point and output a set of arguments
 * to the advice method//from  w  w  w  .jav a2s . c  om
 * @param jp the current JoinPoint
 * @param jpMatch the join point match that matched this execution join point
 * @param returnValue the return value from the method execution (may be null)
 * @param ex the exception thrown by the method execution (may be null)
 * @return the empty array if there are no arguments
 */
protected Object[] argBinding(JoinPoint jp, JoinPointMatch jpMatch, Object returnValue, Throwable ex) {
    calculateArgumentBindings();

    // AMC start
    Object[] adviceInvocationArgs = new Object[this.adviceInvocationArgumentCount];
    int numBound = 0;

    if (this.joinPointArgumentIndex != -1) {
        adviceInvocationArgs[this.joinPointArgumentIndex] = jp;
        numBound++;
    } else if (this.joinPointStaticPartArgumentIndex != -1) {
        adviceInvocationArgs[this.joinPointStaticPartArgumentIndex] = jp.getStaticPart();
        numBound++;
    }

    if (!CollectionUtils.isEmpty(this.argumentBindings)) {
        // binding from pointcut match
        if (jpMatch != null) {
            PointcutParameter[] parameterBindings = jpMatch.getParameterBindings();
            for (PointcutParameter parameter : parameterBindings) {
                String name = parameter.getName();
                Integer index = this.argumentBindings.get(name);
                adviceInvocationArgs[index] = parameter.getBinding();
                numBound++;
            }
        }
        // binding from returning clause
        if (this.returningName != null) {
            Integer index = this.argumentBindings.get(this.returningName);
            adviceInvocationArgs[index] = returnValue;
            numBound++;
        }
        // binding from thrown exception
        if (this.throwingName != null) {
            Integer index = this.argumentBindings.get(this.throwingName);
            adviceInvocationArgs[index] = ex;
            numBound++;
        }
    }

    if (numBound != this.adviceInvocationArgumentCount) {
        throw new IllegalStateException("Required to bind " + this.adviceInvocationArgumentCount
                + " arguments, but only bound " + numBound + " (JoinPointMatch "
                + (jpMatch == null ? "was NOT" : "WAS") + " bound in invocation)");
    }

    return adviceInvocationArgs;
}