Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Selecting arithmetic operation join points. Is it possible?

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." <freebsd@xxxxxx>:

>> 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@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users


Back to the top