Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] around two methods ?

N.B.: I posted this message two weeksago. I dare to
re-post it becasue i would really need help. Thanks.

Hi,

A question that may sound stupid to someone:

1) The simple case

Let's assume i have a Java program such as:
...
method1();
method2();
...

and i want to add an aspect and get the result:
...
if (cond) {
  method1();
} else {
  method1bis();
}
method2();

It is fine, i only need an around call (void
method1()), i test the cond then proceed() or execute
method1bis().

2) 
But let's assume i have this:
method1();
method2();
method3();

and i want to add an aspect to get the result:
if (cond) {
  method1();
  method2();
} else {
  method1bis();
  method2bis();
//method4(); as many as wanted
}
method3();

And here i don't know. At the moment i have two
solutions:
  - i encapsulate method1 and method2 into void
method12 { method1(); method2();} and use the same
kind of around advice as before. But for some reasons
(in complex cases) this method is not convenient,
  - i use one around advice for method1 and one for
method2. In this around i execute as many methods of
the "else" path and keep trace of which branch i am in
with a boolean or int. In that case for instance: 

boolean elsePath = false;

void around(): call (void method1()) {
  if (cond) {
    proceed();
  } else {
    elsePath = true;
    method1bis();
    method2bis();
    //method4(); as many as wanted
  }
}

void around(): call (void method2()) {
  if (elsePath) {
   return;
  } else {
    proceed();
  }
}

But this solution would look very ugly in complex
cases.

Does anybody have another solution to do this ?

OK, i hope the question won't be harder to understand
(due to unclearness) than the problem to solve.

Thank you everybody.

Julien BIEREN
Computer Science Student.

___________________________________________________________
Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français !
Yahoo! Mail : http://fr.mail.yahoo.com


Back to the top