All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.webfolder.ui4j.internal.aspectj.lang.ProceedingJoinPoint Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2005 Contributors.
 * All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * initial implementation              Alexandre Vasseur
 *******************************************************************************/
package io.webfolder.ui4j.internal.aspectj.lang;

import io.webfolder.ui4j.internal.aspectj.runtime.internal.AroundClosure;

/**
 * ProceedingJoinPoint exposes the proceed(..) method in order to support around advice in @AJ aspects
 *
 * @author Alexandre Vasseur
 */
public interface ProceedingJoinPoint extends JoinPoint {

    /**
     * The joinpoint needs to know about its closure so that proceed can delegate to closure.run()
     * 

* This internal method should not be called directly, and won't be visible to the end-user when * packed in a jar (synthetic method) * * @param arc */ void set$AroundClosure(AroundClosure arc); /** * Proceed with the next advice or target method invocation * * @return * @throws Throwable */ public Object proceed() throws Throwable; /** * Proceed with the next advice or target method invocation *

*

Unlike code style, proceed(..) in annotation style places different requirements on the * parameters passed to it. The proceed(..) call takes, in this order: *

    *
  • If 'this()' was used in the pointcut for binding, it must be passed first in proceed(..). *
  • If 'target()' was used in the pointcut for binding, it must be passed next in proceed(..) - * it will be the first argument to proceed(..) if this() was not used for binding. *
  • Finally come all the arguments expected at the join point, in the order they are supplied * at the join point. Effectively the advice signature is ignored - it doesn't matter * if a subset of arguments were bound or the ordering was changed in the advice signature, * the proceed(..) calls takes all of them in the right order for the join point. *
*

Since proceed(..) in this case takes an Object array, AspectJ cannot do as much * compile time checking as it can for code style. If the rules above aren't obeyed * then it will unfortunately manifest as a runtime error. *

* * @param args * @return * @throws Throwable */ public Object proceed(Object[] args) throws Throwable; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy