123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import java.lang.annotation.*;
- import javax.swing.*;
- import javax.swing.event.*;
- import java.awt.*;
-
- interface GoalSelectedNotice {
- public void goalSelected(Object goal);
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @interface DefaultImplementation {}
-
- aspect X {
- /**
- * Watch for goalSelected(..) method being called when
- * not within this aspect.
- */
- pointcut goalSelectedPointcut(GoalSelectedNotice _this, Object goal):
- call(void GoalSelectedNotice.goalSelected(Object))
- && target(_this) && args(goal) && !cflow(adviceexecution());
-
- declare warning : call(void GoalSelectedNotice.goalSelected(Object)) : "bingo";
-
- after(Object caller, Object o) returning : call(void GoalSelectedNotice.goalSelected(Object)) && args(o) && target(caller){
- System.out.println("call match " + caller.getClass());
- }
-
- after(GoalSelectedNotice _this, Object goal) returning:
- goalSelectedPointcut(_this, goal){
- System.out.println("OK it worked!");
- }
- /**
- * Empty body, can be overriden by classes implementing
- * {@link GoalSelectedNotice}.
- */
- @DefaultImplementation
- public void GoalSelectedNotice.goalSelected(Object goal){
- }
- }
-
- public class pr104229 implements GoalSelectedNotice {
-
- interface CallMe { void doIt(); }
-
- public static void main(String[] args) {
- pr104229 pr = new pr104229();
- pr.callInner();
- }
-
- public void callInner() {
-
- CallMe callMe = new CallMe() {
- public void doIt() {
- pr104229.this.goalSelected("MyGoal");
- }
- };
-
- callMe.doIt();
-
- }
-
-
- }
-
- class ListPanel extends JPanel implements GoalSelectedNotice{
-
- private JComboBox jComboBox = null;
- private JList jList = null;
- /**
- * This is the default constructor
- */
- public ListPanel() {
- super();
- initialize();
- }
- /**
- * This method initializes this
- *
- * @return void
- */
- private void initialize() {
- this.setLayout(new BorderLayout());
- this.setSize(300,200);
- this.add(getJComboBox(), java.awt.BorderLayout.NORTH);
- this.add(getJList(), java.awt.BorderLayout.CENTER);
- }
- /**
- * This method initializes jComboBox
- *
- * @return javax.swing.JComboBox
- */
- private JComboBox getJComboBox() {
- if (jComboBox == null) {
- jComboBox = new JComboBox((ComboBoxModel)null);
- }
- return jComboBox;
- }
- /**
- * This method initializes jList
- *
- * @return javax.swing.JList
- */
- private JList getJList() {
- if (jList == null) {
- jList = new JList((ListModel)null);
- jList.addListSelectionListener(
- new ListSelectionListener(){
- public void valueChanged(ListSelectionEvent e){
- if(!e.getValueIsAdjusting()){
- JList list = (JList)e.getSource();
- Object goal = list.getSelectedValue();
- System.out.println(goal);
-
- // If I replace the line below with...
- ListPanel.this.goalSelected(goal); //the join point is not seen!;
- // This was working before a switched to source level 5!
- ListPanel.this.sendGoalSelectedNotice(goal); // this is workaround!
-
- }
- }
- }
- );
- }
- return jList;
- }
-
- // this is part of workaround
- protected void sendGoalSelectedNotice(Object goal){
- // join point is found by pointcut here! This is ok!
- goalSelected(goal);
- }
- }
|