Hi Sanders,
So, there's no way to change the pointcut definition or something else
> to make my example work?
> I'm trying to intercept calls to a method in derived classes and then
> call the parent's base method.
Yes, there is a way besides the reflection form mentioned by Cazzola... Try
exposing the running object as below:
public aspect T {
String around(A obj): execution(public String A.getName()) && this(obj){
String text = "advice";
if(obj instanceof B){
text = ((B)obj).super.getName();
}
System.out.println(text);
return proceed(obj);
}
}
On Tue, Oct 10, 2017 at 5:55 AM, Walter Cazzola <[email protected]> wrote:
> Hi,
> you can dig the parent name out by using reflection on thisJoinPoint.
>
> This aspect should do what you are looking for:
>
> public aspect Test {
> String around(): execution(public String A+.getName()) && !within(A) {
> String text =
> thisJoinPoint.getThis().getClass().getSuperclass().getName()
> ;
> System.out.println(text);
> return proceed();
> }
> }
>
> You can shorten the chain of calls by using the this pointcut.
>
> I hope this helps.
> Walter
>
>
> On Fri, 6 Oct 2017, Karl Sanders wrote:
>
> Thanks for your reply.
>> So, there's no way to change the pointcut definition or something else
>> to make my example work?
>> I'm trying to intercept calls to a method in derived classes and then
>> call the parent's base method.
>>
>> Regards,
>> Karl
>>
>> On Fri, Oct 6, 2017 at 7:11 PM, Henrique Rebêlo <[email protected]> wrote:
>>
>>> Hi Sanders,
>>>
>>> This is just because the super you're calling is from the aspect's
>>> supertype, which is the type object in this case...
>>>
>>> Em sex, 6 de out de 2017 às 13:37, Karl Sanders <[email protected]
>>> >
>>> escreveu:
>>>
>>>>
>>>> Hi,
>>>> I have this example code:
>>>>
>>>>
>>>> public class A {
>>>> public String getName() { return "A"; }
>>>> }
>>>>
>>>> public class B extends A {
>>>> @Override
>>>> public String getName() { return "B";}
>>>> }
>>>>
>>>> public aspect Test {
>>>> String around(): execution(public String A+.getName())
>>>> && !within(A) {
>>>> String text = "advice";
>>>> // text = super.getName();
>>>> System.out.println(text);
>>>> return proceed();
>>>> }
>>>> }
>>>>
>>>> public class Main {
>>>> public static void main(String[] args) {
>>>> System.out.println(new B().getName());
>>>> }
>>>> }
>>>>
>>>>
>>>> If I run the main method I get this output:
>>>> advice
>>>> B
>>>>
>>>> Now I hoped that by removing the comment from the line inside
>>>> the advice I would get:
>>>> A
>>>> B
>>>>
>>>> But the code simply doesn't compile, with this message:
>>>> The method getName() is undefined for the type Object
>>>>
>>>> I found this message:
>>>> https://dev.eclipse.org/mhonarc/lists/aspectj-users/msg12163.html
>>>> and it seems quite clearly to explain what's the issue with my example.
>>>> Since some time has passed I would like to ask if it's still not
>>>> possible
>>>> to call the base method using super.
>>>>
>>>> Regards,
>>>> Karl
>>>> _______________________________________________
>>>> 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
>>>>
>>>
>>> --
>>> ............................................................
>>> ...................................................................
>>> Henrique Rebelo
>>> http://www.cin.ufpe.br/~hemr
>>> Centro de Informática
>>> Universidade Federal de Pernambuco , Brazil
>>>
>>> _______________________________________________
>>> 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
>>
>
> --
> _______________________________________________
> 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
>
--
...............................................................................................................................
Henrique Rebelo
http://www.cin.ufpe.br/~hemr
Centro de Informática
Universidade Federal de Pernambuco , Brazil
_______________________________________________
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