Yes, the cflow target is woven to indicate 'this cflow is being entered'
then at the real target place to weave it is a very simple/quick check to
see 'are we in the cflow?'. There would be a less optimal implementation
that looks at the stack trace at the actual join point target but we've
never investigated implementing that. I suppose as a sub-optimal workaround
you could inspect that stack yourself in your advice if you really can't
weave the actual cflow target.

cheers,
Andy

On 24 April 2017 at 21:21, Eric B <[email protected]> wrote:

> I'm trying to use cflow to limit the scope of my pointcut, but it when I
> add the cflow argument, the pointcut is not intercepting the call at all.
> In my build process, the cflow target is not part of the weaving at all.
> Does the cflow target need to be part of the build/weave process?  Or is my
> pointcut wrong?
>
> @Aspect
> class MultiChoiceNullAspect{
> @Pointcut("cflowbelow(execution( void 
> javax.faces.webapp.FacesServlet.service(..)
> ) && !within(MultiChoiceNullAspect))")
> public void facesServletCFlow(){}
> @Pointcut("facesServletCFlow() && execution( public
> org.model.questionnaire.MultiChoiceItem* get*(..))")
> public void multiChoiceObjects() {}
> @Around("multiChoiceObjects()")
> public Object emptyMultiChoice( final ProceedingJoinPoint pjp) throws
> Throwable{
> Object o = pjp.proceed();
> // if the return object is null, create an empty MultiChoice object
> instead
> if( o == null ){
> return new MultiChoiceItem();
> }
>
> return o;
> }
> }
>
>
>
> And my build instructions:
>             <plugin>
>                 <groupId>org.codehaus.mojo</groupId>
>                 <artifactId>aspectj-maven-plugin</artifactId>
>                 <version>1.10</version>
>                 <configuration>
>                     <showWeaveInfo>true</showWeaveInfo>
>                     <source>${java.version}</source>
>                     <target>${java.version}</target>
>                     <complianceLevel>${java.version}</complianceLevel>
>                     <encoding>UTF-8</encoding>
>                 </configuration>
>                 <executions>
>                     <execution>
>                         <goals>
>                             <goal>compile</goal>
>                             <goal>test-compile</goal>
>                         </goals>
>                     </execution>
>                 </executions>
>                 <dependencies>
>                     <dependency>
>                         <groupId>org.aspectj</groupId>
>                         <artifactId>aspectjtools</artifactId>
>                         <version>${aspectj.version}</version>
>                     </dependency>
>                 </dependencies>
>             </plugin>
>
>
>
> Essentially, I'm trying to advise the execution of all getters that return
> MultiChoiceItem* when they are as part of the 
> javax.faces.webapp.FacesServlet.service()
> method/flow.
>
> Does the FacesServlet class need to be passed to the ajc compiler as
> well?  Or are the cflow() arguments just evaluated at runtime and don't
> need to be present in the compiler?  If the later, what am I doing wrong -
> why is my pointcut not triggering?
>
> Thanks,
>
> Eric
>
>
> _______________________________________________
> aspectj-users mailing list
> [email protected]
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to