Maybe you should have a look into other bytecode instrumentation frameworks 
such as BCEL, if you need to work on such a low level of granularity. The 
effort should be justifiedmfor you if you do have a real world use case and 
cannot solve it in another way. Good luck!

Alexander Kriegisch

Am 07.01.2013 um 12:46 schrieb "M. P." <free...@abv.bg>:

>> There is no operator overloading in Java. It is implemented in other JVM 
>> languages like Scala, but this is a bit off-topic here.
> 
> 
>> BTW, I did not say it was impossible, just that it will probably never 
>> happen in AspectJ. ;) What you show is normal method interception, not 
>> operator interception. Smthe example is not really relevant. Besides, you 
>> never know what a compiler might do with arithmetic operations 
>> optimisation-wise. Multiplication by powers of 2 might get replaced by 
>> left-shift operations (just making up an example). I do not even say that 
>> what you suggest might not be useful in so e rare and special cases, I just 
>> think it is way to fine-granular for AOP purposes. I think your example is 
>> rather academic than useful in daily work.
> 
> 
>> Alexander Kriegisch
> 
> 
>> Am 07.01.2013 um 10:34 schrieb "M. P." :
> 
> 
>>>>> For example I'd like to be able to select integer subtraction:
> 
> 
> 
>>>>> Integer i = 5;
> 
> 
>>>>> Integer j = 2;
> 
> 
>>>>> Integer r = i - j;
> 
> 
> 
>>>>> Maybe if Java supported operator overloading that would be fairly easy.
> 
> 
> 
>>>>> 1. So is something like this possible now? I'm pretty sure it is not.
> 
> 
> 
>>>> You are right, it is not possible.
> 
> 
> 
>>>>> 2. Would this be possible to implement? How? Effort?
> 
> 
>>>>> 3. Is something like this planned for future AspectJ versions?
> 
> 
> 
>>>> I cannot speak for the developers, but I do not think you will ever see 
>>>> this feature in AspectJ.
> 
> 
> 
> 
> 
>>>> Regards
> 
> 
> 
>>> I'm not sure I see why not. Please consider the following example:
> 
> 
>>> public aspect StringConcat {
> 
>>>    public pointcut concat() : call(* java.lang.StringBuffer.append(..));
> 
> 
>>>    before() : concat() {
> 
>>>        System.out.println("About to concatenate!");
> 
>>>    }
> 
>>> }
> 
> 
>>> public class Tester {
> 
> 
>>>    public static void main(String[] args) {
> 
>>>        String a = "a";
> 
>>>        String b = "b";
> 
>>>        System.out.println(a + b);
> 
>>>    }
> 
>>> }
> 
> 
>>> When main() is executed the result is:
> 
>>> =======================
> 
>>> About to concatenate!
> 
>>> ab
> 
>>> =======================
> 
> 
>>> So we actually have a real example where the + operator is overloaded and 
>>> the resulting code is directly in the client byte code.
> 
>>> Now I'm not too familiar with the Java byte code spec but I don't see why 
>>> the same cannot be done for e.g. Integer or event the primitive types?
> 
> 
>>> Thank you.
> 
> 
>>> MP
> 
> 
> A quick look at the Java byte code format reveals that it doesn't even have 
> to be done via operator overloading. There is a separate instruction for each 
> operation. The instruction for method invokation works similarly to the 
> instruction for integer division so it doesn't seem problematic to add 
> arithmetic operations as join points. Of course all of this is just guessing. 
> Perhaps AspectJ developers can clarify a bit?
> As to the statement that this example is rather academic...I could come up 
> with a case where this has a real world value.
> Suppose arithmetic join points were supported by AspectJ. This would make 
> possible for aspects that could prevent overflows. As you know Java allows 
> silent overflows. What if AspectJ could prevent that?
> 
> Thank you.
> MP
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to