I suppose we should continue this in another thread.

>    Hi,
 
>    
 
>     
 
>    
 
>    
 
>     > 
 
>     Why don't you create some developer documentation so that it's easier for 
> people to help you.
 
>     
 
>    
 
>     
 
>    
 
>    
 
>     I think you know what I'll say here: time. I'll try and find some to 
> improve the situation - there are docs (e.g. 
 
>     http://www.eclipse.org/aspectj/doc/released/faq.php#q:buildingsource ) 
> but they haven't had any love in a while
 
>     . I agree that of course it would help. Mostly those keen enough to 
> contribute actually ask me and I email them the basics of what they need, I 
> just don't find the time to nicely integrate that into the docs.
 
>     
 
>    
 
>     
 
>    
 
>    
 
>     > 
 
>     I think that at least a document that explains how to build AspectJ is 
> gonna be very useful.
 
>      
 
>     
 
>    
 
>     
 
>    
 
>    
 
>     Here is what I sent to the last person that asked:
 
>    
 
>     
 
>     
 
>    
 
>    
 
>     
 
>      Building it:
 
>      
 
>     
 
>      - go into the 'build' module
 
>     
 
>     
 
>       - copy sample.local.properties as local.properties, edit it if you want 
> particular version stamps.
 
>     
 
>     
 
>      - run 'ant' to build it
 
>      
 
>     
 
>      - the output appears in a new directory at the org.
 
>      aspectj level called 'aj-build'.  In 'dist' is a distribution all 
> packaged.  In 'dist/tools/lib' are the individual jars like weaver.
 
>      
 
>     
 
>      
 
>     
 
>     
 
>      That doesn't run the tests though, untangling how that happens is 
> trickier. I typically run them all in eclipse (RunTheseBeforeYouCommitTests). 
> In keeping with having limited time the build process is a little antiquated. 
>  Per 
 
>      http://www.eclipse.org/aspectj/doc/released/faq.php#q:buildingsource you 
> effectively: git clone, import all the projects, set the missing environment 
> variables and you are good to go (it'll build and tests should be runnable).
 
>      
 
>     
 
>      
 
>     
 
>     
 
>      I'm annoyed we don't have nice OSGi manifests too - a few issues exist 
> around on that: 
 
>      https://bugs.eclipse.org/bugs/show_bug.cgi?id=338034
 
>      
 
>     
 
>      
 
>     
 
>     
 
>      If you think you'll have time to help with issues like the OSGi 
> manifests, I'll really try and find the time to get the docs correct?
 
>     
 
>     
 
>      
 
>     
 
>     
 
>      cheers,
 
>      
 
>    
 
>    
 
>     Andy
 
>    
 
>    
 
>     
 
>    
 
>   
 
>   
 
>    
 
>    
 
>    
 
>     On 8 January 2013 03:45, M. P. 
 
>      wrote:
 
>      
 
>     
 
>      Hi Andy,
 
>       thanks for your answer.
 
>       I spent a couple of hours looking at the weaver source code yesterday. 
> At first it seemed relatively clear how to detect arithmetic instructions but 
> when I continued I realized that adding a join point is going to be a shotgun 
> surgery.
 
>       Apparently you're the only one who does something for AspectJ, aren't 
> you? At least that's what the commit messages suggest. Why don't you create 
> some developer documentation so that it's easier for people to help you. I 
> think that at least a document that explains how to build AspectJ is gonna be 
> very useful. And if you add a couple more documents explaining what's what 
> and where plus some architectural description AspectJ may get alot more 
> attention.
 
>       For instance I'm annoyed with the fact that aspectjrt.jar does not have 
> a valid OSGi manifest. If it was easier for me to setup an AspectJ 
> development environment I could have created, tested and sent you a patch for 
> that. And that's the smallest thing. The next thing I would do is to make 
> declare error/warning conditional on e.g. system properties. I cannot do it 
> right now because I'm not confident I know enough about the system in order 
> to do it properly.
 
>       What do you think?
 
>       
 
>       Thanks.
 
>       
 
>      MP 
 
>      
 
>        >    The arithmetic instructions could be surfaced as join points. 
> e.g. iadd/isub/dadd/lsub/etc. Join points are really just a manifestation of 
> a bytecode instruction.  However, these instructions operate on the stack and 
> AspectJ does not track who put what on the stack, so in the pointcut/advice 
> you would be able to receive the operand values but you wouldn't be able to, 
> for example "match when anything is added to i" because when the join point 
> is constructed we don't know that 'i' is on the stack. And matching based on 
> specific values would usually need to be a done with an inserted dynamic 
> test, because we don't statically know what is on the stack, e.g. "match when 
> anything has 5 added to it" (possible exceptions could be when low number 
> constants are used and so the bytecode has one operand encoded in it, e.g. 
> iadd_1)
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >     Implementation: only a few days to get something hanging 
> together but a lot longer to get it meshing consistently with all the other 
> language constructs. There would be a need to define what every pointcut 
> designator means when it hits an arithmetic join point. 
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >     Adding join points is a serious business though as it can cause 
> issues for anyone upgrading to new versions of AspectJ.  Their older aspects 
> may suddenly start matching on unintended join points.  I think those most 
> recently added were for array construction and those are still protected with 
> an option flag to turn them on (for the very reason that old aspects don't 
> trip over them).
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >     As Alexander says, you can be at the mercy of what the compiler 
> chooses to do in terms of optimization but this isn't anything particularly 
> new, there are cases of this already here and there.
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >     Is it on the roadmap? Not at the moment.  We have things like 
> proper handling of invokedynamic and the incoming Java8 language features to 
> worry about.
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >      cheers,
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >      Andy
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >
 
>        
 
>        >     On 7 January 2013 03:52, Alexander Kriegisch
 
>        
 
>        
 
>      
 
>      
 
>       
 
>        >      wrote:
 
>         
 
>         >
 
>         
 
>         >
 
>         
 
>         >       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