Vous pouvez utiliser le dans les ou withincode pointcuts pour correspondre à la classe contenant, et la cflow pointcut pour correspondre à l'exécution de la méthode addActionListener(), puis le combiner avec un exécuter pointcut pour correspondre au corps de la méthode actionPerformed().
Par exemple, ce point d'action va correspondre à l'exécution de la méthode actionPerformed que dans le InnerTest de classe interne de l'essai de classe (en supposant que le paquet est test
) et que dans le flux d'exécution du procédé de addActionListener:
pointcut innerTest(): within(test.Test.InnerTest) &&
cflow(execution(public void javax.swing.JButton.addActionListener(java.awt.event.ActionListener))) &&
execution(void actionPerformed(ActionEvent));
Si vous souhaitez uniquement faire correspondre les appels à actionPerformed() dans la classe interne, vous pouvez omettre la clause cflow.
Il est intéressant de noter que si tout ce que vous êtes intéressé est correspondant à l'exécution de toute méthode actionPerformed(), cela suffirait:
pointcut innerTest():
execution(void java.awt.event.ActionListener+.actionPerformed(ActionEvent));