Package org.codehaus.aspectwerkz.transform.inlining

Examples of org.codehaus.aspectwerkz.transform.inlining.AdviceMethodInfo




            // gather advice info

            AdviceMethodInfo adviceInfo = m_aroundAdviceMethodInfos[i];



            Label endInstanceOflabel = beginRuntimeCheck(cv, false, 0, adviceInfo.getAdviceInfo(), -1);



            // get the aspect instance

            loadAspect(cv, NON_OPTIMIZED_JOIN_POINT, 0, adviceInfo.getAspectInfo());



            // load the arguments to the advice from the join point instance plus build up the

            // advice method signature

            int[] argIndexes = adviceInfo.getAdviceMethodArgIndexes();

            for (int j = 0; j < argIndexes.length; j++) {

                int argIndex = argIndexes[j];

                if (argIndex >= 0) {

                    Type argumentType = m_argumentTypes[argIndex];

                    cv.visitVarInsn(ALOAD, 0);

                    cv.visitFieldInsn(

                            GETFIELD,

                            m_joinPointClassName,

                            ARGUMENT_FIELD + argIndex,

                            argumentType.getDescriptor()

                    );

                } else if (argIndex == AdviceInfo.JOINPOINT_ARG ||

                           argIndex == AdviceInfo.STATIC_JOINPOINT_ARG ||

                           argIndex == AdviceInfo.VALID_NON_AW_AROUND_CLOSURE_TYPE ||

                           argIndex == AdviceInfo.CUSTOM_JOIN_POINT_ARG) {

                    cv.visitVarInsn(ALOAD, 0);

                } else if (argIndex == AdviceInfo.TARGET_ARG) {

                    loadCallee(cv, NON_OPTIMIZED_JOIN_POINT, 0, INDEX_NOTAVAILABLE);

                    // add a cast if runtime check was used

                    if (adviceInfo.getAdviceInfo().hasTargetWithRuntimeCheck()) {

                        cv.visitTypeInsn(

                                CHECKCAST, adviceInfo.getAdviceInfo().getMethodParameterTypes()[j].getInternalName()

                        );

                    }

                } else if (argIndex == AdviceInfo.THIS_ARG) {

                    loadCaller(cv, NON_OPTIMIZED_JOIN_POINT, 0, INDEX_NOTAVAILABLE);

                } else {

                    throw new Error("advice method argument index type is not supported: " + argIndex);

                }

            }



            // invoke the advice method

            cv.visitMethodInsn(

                    INVOKEVIRTUAL,

                    adviceInfo.getAspectInfo().getAspectClassName(),

                    adviceInfo.getAdviceInfo().getMethodName(),

                    adviceInfo.getAdviceInfo().getMethodSignature()

            );

            cv.visitVarInsn(ASTORE, 1);



            // we need to handle the case when the advice was skipped due to runtime check

            // that is : if (runtimeCheck) { ret = advice() } else { ret = proceed() }

            if (endInstanceOflabel != null) {

                Label elseInstanceOfLabel = new Label();

                cv.visitJumpInsn(GOTO, elseInstanceOfLabel);

                endRuntimeCheck(cv, adviceInfo.getAdviceInfo(), endInstanceOflabel);

                cv.visitVarInsn(ALOAD, 0);

                cv.visitMethodInsn(INVOKESPECIAL, m_joinPointClassName, PROCEED_METHOD_NAME, PROCEED_METHOD_SIGNATURE);
View Full Code Here


                                                 final int calleeIndex) {

        for (int i = 0; i < m_beforeAdviceMethodInfos.length; i++) {

            AdviceMethodInfo adviceMethodInfo = m_beforeAdviceMethodInfos[i];



            // runtime check for target() etc

            Label endInstanceOflabel = beginRuntimeCheck(

                    cv, isOptimizedJoinPoint, joinPointInstanceIndex, adviceMethodInfo.getAdviceInfo(), calleeIndex

            );



            //get the aspect instance

            loadAspect(cv, isOptimizedJoinPoint, joinPointInstanceIndex, adviceMethodInfo.getAspectInfo());



            AspectDefinition aspectDef = adviceMethodInfo.getAdviceInfo().getAdviceDefinition().getAspectDefinition();

            if (aspectDef.isAspectWerkzAspect()) {

                // AW aspect

                int[] argIndexes = adviceMethodInfo.getAdviceMethodArgIndexes();

                // if empty, we consider for now that we have to push JoinPoint for old advice with JoinPoint as sole arg

                for (int j = 0; j < argIndexes.length; j++) {

                    int argIndex = argIndexes[j];

                    if (argIndex >= 0) {

                        Type argumentType = m_argumentTypes[argIndex];

                        int argStackIndex = AsmHelper.getRegisterIndexOf(m_argumentTypes, argIndex) + argStartIndex;

                        AsmHelper.loadType(cv, argStackIndex, argumentType);

                    } else if (argIndex == AdviceInfo.JOINPOINT_ARG || argIndex == AdviceInfo.STATIC_JOINPOINT_ARG) {

                        loadJoinPointInstance(cv, isOptimizedJoinPoint, joinPointInstanceIndex);

                    } else if (argIndex == AdviceInfo.TARGET_ARG) {

                        loadCallee(cv, isOptimizedJoinPoint, joinPointInstanceIndex, calleeIndex);

                        // add a cast if runtime check was used

                        if (adviceMethodInfo.getAdviceInfo().hasTargetWithRuntimeCheck()) {

                            cv.visitTypeInsn(

                                    CHECKCAST,

                                    adviceMethodInfo.getAdviceInfo().getMethodParameterTypes()[j].getInternalName()

                            );

                        }

                    } else if (argIndex == AdviceInfo.THIS_ARG) {

                        loadCaller(cv, isOptimizedJoinPoint, joinPointInstanceIndex, callerIndex);

                    } else {

                        throw new Error("special argument index is not supported: " + argIndex);

                    }

                }

            } else {

                // non-AW aspect

                adviceMethodInfo.setJoinPointIndex(joinPointInstanceIndex);

                for (int j = 0; j < m_aspectModels.length; j++) {

                    AspectModel aspectModel = m_aspectModels[j];

                    if (aspectDef.getAspectModel().equals(aspectModel.getAspectModelType())) {

                        aspectModel.createBeforeAdviceArgumentHandling(cv, adviceMethodInfo);

                    }

                }

            }



            cv.visitMethodInsn(

                    INVOKEVIRTUAL,

                    adviceMethodInfo.getAspectInfo().getAspectClassName(),

                    adviceMethodInfo.getAdviceInfo().getMethodName(),

                    adviceMethodInfo.getAdviceInfo().getMethodSignature()

            );



            // end label of runtime checks

            endRuntimeCheck(cv, adviceMethodInfo.getAdviceInfo(), endInstanceOflabel);

        }


View Full Code Here

                                                 final int argStartIndex,
                                                 final int joinPointInstanceIndex, //FIXME redundant -1 with isStaticJP
                                                 final int callerIndex,
                                                 final int calleeIndex) {
        for (int i = 0; i < m_beforeAdviceMethodInfos.length; i++) {
            AdviceMethodInfo adviceMethodInfo = m_beforeAdviceMethodInfos[i];

            // runtime check for target() etc
            Label endInstanceOflabel = beginRuntimeCheck(
                    cv, isOptimizedJoinPoint, joinPointInstanceIndex, adviceMethodInfo.getAdviceInfo(), calleeIndex
            );

            //get the aspect instance
            loadAspect(cv, isOptimizedJoinPoint, joinPointInstanceIndex, adviceMethodInfo.getAspectInfo());

            AspectDefinition aspectDef = adviceMethodInfo.getAdviceInfo().getAdviceDefinition().getAspectDefinition();
            if (aspectDef.isAspectWerkzAspect()) {
                // AW aspect
                int[] argIndexes = adviceMethodInfo.getAdviceMethodArgIndexes();
                // if empty, we consider for now that we have to push JoinPoint for old advice with JoinPoint as sole arg
                for (int j = 0; j < argIndexes.length; j++) {
                    int argIndex = argIndexes[j];
                    if (argIndex >= 0) {
                        Type argumentType = m_argumentTypes[argIndex];
                        int argStackIndex = AsmHelper.getRegisterIndexOf(m_argumentTypes, argIndex) + argStartIndex;
                        AsmHelper.loadType(cv, argStackIndex, argumentType);
                    } else if (argIndex == AdviceInfo.JOINPOINT_ARG || argIndex == AdviceInfo.STATIC_JOINPOINT_ARG) {
                        loadJoinPointInstance(cv, isOptimizedJoinPoint, joinPointInstanceIndex);
                    } else if (argIndex == AdviceInfo.TARGET_ARG) {
                        loadCallee(cv, isOptimizedJoinPoint, joinPointInstanceIndex, calleeIndex);
                        // add a cast if runtime check was used
                        if (adviceMethodInfo.getAdviceInfo().hasTargetWithRuntimeCheck()) {
                            cv.visitTypeInsn(
                                    CHECKCAST,
                                    adviceMethodInfo.getAdviceInfo().getMethodParameterTypes()[j].getInternalName()
                            );
                        }
                    } else if (argIndex == AdviceInfo.THIS_ARG) {
                        loadCaller(cv, isOptimizedJoinPoint, joinPointInstanceIndex, callerIndex);
                    } else {
                        throw new Error("special argument index is not supported: " + argIndex);
                    }
                }
            } else {
                // non-AW aspect
                adviceMethodInfo.setJoinPointIndex(joinPointInstanceIndex);
                for (int j = 0; j < m_aspectModels.length; j++) {
                    AspectModel aspectModel = m_aspectModels[j];
                    if (aspectDef.getAspectModel().equals(aspectModel.getAspectModelType())) {
                        aspectModel.createBeforeAdviceArgumentHandling(cv, adviceMethodInfo);
                    }
                }
            }

            cv.visitMethodInsn(
                    INVOKEVIRTUAL,
                    adviceMethodInfo.getAspectInfo().getAspectClassName(),
                    adviceMethodInfo.getAdviceInfo().getMethodName(),
                    adviceMethodInfo.getAdviceInfo().getMethodSignature()
            );

            // end label of runtime checks
            endRuntimeCheck(cv, adviceMethodInfo.getAdviceInfo(), endInstanceOflabel);
        }

        if (m_isThisAdvisable) {
            createBeforeInterceptorInvocations(cv, joinPointInstanceIndex, callerIndex + 1);
        }
View Full Code Here

                                                       final int joinPointInstanceIndex,
                                                       final int callerIndex,
                                                       final int calleeIndex) {
        // add after advice in reverse order
        for (int i = m_afterFinallyAdviceMethodInfos.length - 1; i >= 0; i--) {
            AdviceMethodInfo advice = m_afterFinallyAdviceMethodInfos[i];
            createAfterAdviceInvocation(
                    cv, isOptimizedJoinPoint, advice, joinPointInstanceIndex, argStartIndex,
                    callerIndex, calleeIndex, INDEX_NOTAVAILABLE
            );
        }
View Full Code Here

            createAfterReturningInterceptorInvocations(cv, joinPointInstanceIndex, returnValueIndex);
        }

        boolean hasPoppedReturnValueFromStack = false;
        for (int i = m_afterReturningAdviceMethodInfos.length - 1; i >= 0; i--) {
            AdviceMethodInfo advice = m_afterReturningAdviceMethodInfos[i];

            // set the return value index that will be used as arg to advice
            advice.setSpecialArgumentIndex(returnValueIndex);

            String specialArgDesc = advice.getSpecialArgumentTypeDesc();
            if (specialArgDesc == null) {
                // after returning
                createAfterAdviceInvocation(
                        cv, isOptimizedJoinPoint, advice, joinPointInstanceIndex, argStartIndex,
                        callerIndex, calleeIndex, INDEX_NOTAVAILABLE
                );
            } else {
                // after returning <TYPE>
                if (AsmHelper.isPrimitive(m_returnType)) {
                    if (m_returnType.getDescriptor().equals(specialArgDesc)) {
                        createAfterAdviceInvocation(
                                cv, isOptimizedJoinPoint, advice, joinPointInstanceIndex, argStartIndex,
                                callerIndex, calleeIndex, returnValueIndex
                        );
                    }
                } else {
                    cv.visitVarInsn(ALOAD, returnValueIndex);

                    cv.visitTypeInsn(INSTANCEOF, advice.getSpecialArgumentTypeName());

                    Label label = new Label();
                    cv.visitJumpInsn(IFEQ, label);

                    createAfterAdviceInvocation(
View Full Code Here

            if (!aspectQualifiedNames.contains(adviceInfo.getAspectQualifiedName())) {
                aspectQualifiedNames.add(adviceInfo.getAspectQualifiedName());
            }
            int aspectIndex = aspectQualifiedNames.indexOf(adviceInfo.getAspectQualifiedName());
            AdviceMethodInfo adviceMethodInfo = new AdviceMethodInfo(
                    adviceInfo,
                    ASPECT_FIELD_PREFIX + aspectIndex,
                    aspectClassName,
                    L + aspectClassName + SEMICOLON,
                    m_callerClassSignature,
                    m_calleeClassSignature,
                    m_joinPointClassName,
                    m_calleeMemberDesc
            );
            adviceMethodInfosSet.add(adviceMethodInfo);
            aspectInfos.add(adviceMethodInfo.getAspectInfo());
        }
        return (AdviceMethodInfo[]) adviceMethodInfosSet.toArray(new AdviceMethodInfo[adviceMethodInfosSet.size()]);
    }
View Full Code Here

            createAfterThrowingInterceptorInvocations(cv, joinPointInstanceIndex, exceptionIndex1);
        }

        // loop over the after throwing advices
        for (int i = m_afterThrowingAdviceMethodInfos.length - 1; i >= 0; i--) {
            AdviceMethodInfo advice = m_afterThrowingAdviceMethodInfos[i];

            // set the exception argument index
            advice.setSpecialArgumentIndex(exceptionIndex1);

            // if (e instanceof TYPE) {...}
            cv.visitVarInsn(ALOAD, exceptionIndex1);

            final String specialArgTypeName = advice.getSpecialArgumentTypeName();
            if (specialArgTypeName != null) {
                // after throwing <TYPE>
                cv.visitTypeInsn(INSTANCEOF, specialArgTypeName);

                Label ifInstanceOfLabel = new Label();
View Full Code Here

        // add one case for each around advice invocation
        for (int i = 0; i < m_aroundAdviceMethodInfos.length; i++) {
            cv.visitLabel(caseLabels[i]);

            // gather advice info
            AdviceMethodInfo adviceInfo = m_aroundAdviceMethodInfos[i];

            Label endInstanceOflabel = beginRuntimeCheck(cv, false, 0, adviceInfo.getAdviceInfo(), -1);

            // get the aspect instance
            loadAspect(cv, NON_OPTIMIZED_JOIN_POINT, 0, adviceInfo.getAspectInfo());

            // load the arguments to the advice from the join point instance plus build up the
            // advice method signature
            int[] argIndexes = adviceInfo.getAdviceMethodArgIndexes();
            for (int j = 0; j < argIndexes.length; j++) {
                int argIndex = argIndexes[j];
                if (argIndex >= 0) {
                    Type argumentType = m_argumentTypes[argIndex];
                    cv.visitVarInsn(ALOAD, 0);
                    cv.visitFieldInsn(
                            GETFIELD,
                            m_joinPointClassName,
                            ARGUMENT_FIELD + argIndex,
                            argumentType.getDescriptor()
                    );
                } else if (argIndex == AdviceInfo.JOINPOINT_ARG ||
                           argIndex == AdviceInfo.STATIC_JOINPOINT_ARG ||
                           argIndex == AdviceInfo.VALID_NON_AW_AROUND_CLOSURE_TYPE ||
                           argIndex == AdviceInfo.CUSTOM_JOIN_POINT_ARG) {
                    cv.visitVarInsn(ALOAD, 0);
                } else if (argIndex == AdviceInfo.TARGET_ARG) {
                    loadCallee(cv, NON_OPTIMIZED_JOIN_POINT, 0, INDEX_NOTAVAILABLE);
                    // add a cast if runtime check was used
                    if (adviceInfo.getAdviceInfo().hasTargetWithRuntimeCheck()) {
                        cv.visitTypeInsn(
                                CHECKCAST, adviceInfo.getAdviceInfo().getMethodParameterTypes()[j].getInternalName()
                        );
                    }
                } else if (argIndex == AdviceInfo.THIS_ARG) {
                    loadCaller(cv, NON_OPTIMIZED_JOIN_POINT, 0, INDEX_NOTAVAILABLE);
                } else {
                    throw new Error("advice method argument index type is not supported: " + argIndex);
                }
            }

            // invoke the advice method
            cv.visitMethodInsn(
                    INVOKEVIRTUAL,
                    adviceInfo.getAspectInfo().getAspectClassName(),
                    adviceInfo.getAdviceInfo().getMethodName(),
                    adviceInfo.getAdviceInfo().getMethodSignature()
            );
            cv.visitVarInsn(ASTORE, 1);

            // we need to handle the case when the advice was skipped due to runtime check
            // that is : if (runtimeCheck) { ret = advice() } else { ret = proceed() }
            if (endInstanceOflabel != null) {
                Label elseInstanceOfLabel = new Label();
                cv.visitJumpInsn(GOTO, elseInstanceOfLabel);
                endRuntimeCheck(cv, adviceInfo.getAdviceInfo(), endInstanceOflabel);
                cv.visitVarInsn(ALOAD, 0);
                cv.visitMethodInsn(INVOKESPECIAL, m_joinPointClassName, PROCEED_METHOD_NAME, PROCEED_METHOD_SIGNATURE);
                cv.visitVarInsn(ASTORE, 1);
                cv.visitLabel(elseInstanceOfLabel);
            }
View Full Code Here

            if (!aspectQualifiedNames.contains(adviceInfo.getAspectQualifiedName())) {
                aspectQualifiedNames.add(adviceInfo.getAspectQualifiedName());
            }
            int aspectIndex = aspectQualifiedNames.indexOf(adviceInfo.getAspectQualifiedName());
            AdviceMethodInfo adviceMethodInfo = new AdviceMethodInfo(
                    adviceInfo,
                    ASPECT_FIELD_PREFIX + aspectIndex,
                    aspectClassName,
                    L + aspectClassName + SEMICOLON,
                    m_callerClassSignature,
                    m_calleeClassSignature,
                    m_joinPointClassName,
                    m_calleeMemberDesc
            );
            adviceMethodInfos[i] = adviceMethodInfo;
            aspectInfos.add(adviceMethodInfo.getAspectInfo());
        }
        return adviceMethodInfos;
    }
View Full Code Here

        // loop over the after throwing advices
        //FIXME: Alex to Jonas: why this loop is reverted ? precedence got broken
        //for (int i = m_afterThrowingAdviceMethodInfos.length - 1; i >= 0; i--) {
        for (int i = 0; i < m_afterThrowingAdviceMethodInfos.length; i++) {

            AdviceMethodInfo advice = m_afterThrowingAdviceMethodInfos[i];

            // set the exception argument index
            advice.setSpecialArgumentIndex(exceptionIndex1);

            // if (e instanceof TYPE) {...}
            cv.visitVarInsn(ALOAD, exceptionIndex1);

            final String specialArgTypeName = advice.getSpecialArgumentTypeName();
            if (specialArgTypeName != null) {
                // after throwing <TYPE>
                cv.visitTypeInsn(INSTANCEOF, specialArgTypeName);

                Label ifInstanceOfLabel = new Label();
View Full Code Here

TOP

Related Classes of org.codehaus.aspectwerkz.transform.inlining.AdviceMethodInfo

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.