Hi Alexander,

You told me that what I explained, that is not possible.
Believe it or not, this was helpful. Thank you.

I already use AspectJ in some scenarios and I think this is awesome.
On the other hand, this does not seem to fit this scenario, and that's OK.

Cheers,
Tamas

On Tue, Jun 18, 2019 at 12:42 PM Alexander Kriegisch <
alexan...@kriegisch.name> wrote:

> You give up quickly and you think you know that AspectJ is not helpful
> even though you haven't laid out the problem. Give it a try. As a developer
> you should be able to explain the problem without disclosing company
> internals.
>
> Maybe binary weaving would be a quick and easy solution for you if e.g.
> you have binaries without source. But if you don't explain, probably we
> will never know, will we? How can you hope for someone to help you solve a
> problem you don't even fully explain?
>
> Good luck
> --
> Alexander Kriegisch
>
>
> -------- Ursprüngliche Nachricht --------
> Von: REV Tamas <tamas....@gmail.com>
> Datum: 18.06.19 15:42 (GMT+07:00)
> An: aspectj-users@eclipse.org
> Betreff: Re: [aspectj-users] privileged aspects and Load-Time Weaving
>
> Hello,
>
> Thank you for your detailed answer!
>
> I don't think I may explain our situation.
> All I can say is that I'm looking for the least painful shortcut. Now I
> know that this is not AspectJ.
> So I keep looking.
>
> Thanks,
> Tamas
>
> On Tue, Jun 18, 2019 at 3:57 AM Alexander Kriegisch <
> alexan...@kriegisch.name> wrote:
>
>> The problem is not privileged access, you are rather dealing with a
>> *hen-and-egg* type of problem here. Let's imagine you want a setup like
>> this:
>>
>>    - Aspect library (to be used via LTW)
>>       - AspectPrivate
>>    - Application
>>       - ClassWithPrivate
>>       - TestPrivate
>>
>> Now probably you don't want any dependencies between aspect library and
>> application, but
>>
>>    - the aspect imports an application class,
>>    - the test program is trying to access methods unavailable during its
>>    compile time,
>>    - thus the aspect library has a dependency on the application library
>>    and vice versa.
>>
>> Ergo: It simply does not make sense to use AspectJ's introduction feature
>> (also known as ITD or inter-type declaration) like this in an LTW scenario.
>> In most cases AOP is about adding cross-cutting behaviour and there you can
>> work with jokers like "*" or "..", i.e. you do not need to use precise
>> class names. Even if you do, the worst that could happen is an "advice does
>> not match" warning during compilation of the aspect library. It would still
>> work during runtime after aspect weaving. But member access and/or method
>> introduction only work with specific class names, so if you need that you
>> should use compile-time weaving. Think about it, you are not just
>> decorating classes with behaviour before or after existing methods, you are
>> introducing new members or methods, i.e. changing the class structure
>> itself. This is to be done during compile time.
>>
>> So much for the technical part. I still think your question might be
>> suffering from the XY problem
>> <https://meta.stackexchange.com/a/66378/309898>. Maybe you should rather
>> explain *what* you want to achieve and not *how* you think it should
>> best be achieved. Ask yourself questions like:
>>
>>    - Why would I want to access private class members in the first place?
>>    - What happens if I refactor the target class, e.g. rename a member?
>>    (In your example the aspect would break and need to be refactored too.)
>>    - Why am I limited to LTW here? Or maybe I just think I am and there
>>    are other possible solutions.
>>    - What is it I want to achieve? (Maybe your answer is: "I want to
>>    reduce boiler-plate code and auto-generate getters and setters for all or
>>    some of my beans." And maybe then you find out that you could do that via
>>    AspectJ's annotation processing feature or by using another tool such as
>>    Lombok or by using Groovy instead of Java or ...)
>>
>> Kind regards
>> --
>> Alexander Kriegisch
>> https://scrum-master.de
>>
>>
>> REV Tamas schrieb am 17.06.2019 18:35:
>>
>> Hello,
>>
>> I would like to use a privileged access and weave it at load-time.
>> I did not see anywhere that it was not possible to do so.
>> On the other hand, I could only make it work with compile-time weaving so
>> far.
>> Could you please help me to make it work (or just tell me it is not
>> possible)?
>>
>> I was playing with this mock project:
>> https://stackoverflow.com/questions/10721037/aspectj-access-private-fields
>> Code excerpt:
>>
>> public class ClassWithPrivate {
>>     private String s = "myStr";
>> }
>>
>> ==========
>> package com.example.aspect;
>> import com.example.ClassWithPrivate;
>>
>> privileged public aspect AccessPrivate {
>>
>>     public String ClassWithPrivate.getS() {
>>         return this.s;
>>     }
>>
>>     public void ClassWithPrivate.setS(String str) {
>>         this.s = str;
>>     }
>> }
>>
>> ==========
>> package com.example;
>> public class TestPrivate {
>>
>>     public static void main(String[] args) {
>>
>>         ClassWithPrivate test = new ClassWithPrivate();
>>         System.out.println(test.getS());
>>         test.setS("hello");
>>         System.out.println(test.getS());
>>     }
>> }
>>
>>
>> I installed ADT to eclipse and now I can see the aspect weaved into the
>> bytecode.
>> I saw this when I decompiled the code:
>> public class ClassWithPrivate
>> {
>>   public void setS(String paramString)
>>   {
>>
>> AccessPrivate.ajc$interMethod$com_example_aspect_AccessPrivate$com_example_ClassWithPrivate$setS(this,
>> paramString);
>>   }
>>
>>   public String getS()
>>   {
>>     return
>> AccessPrivate.ajc$interMethod$com_example_aspect_AccessPrivate$com_example_ClassWithPrivate$getS(this);
>>   }
>>
>>   private String s = "mystr";
>> }
>> So here is the question: Is it possible to do it with load-time weaving?
>> I disabled ADT, then I added the aspect to the aop.xml as I normally do.
>> However,
>> the class that tried to access the privileged methods, that gave a
>> compile error.
>>
>> Thanks,
>> Tamas
>>
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@eclipse.org
>> To change your delivery options, retrieve your password, or unsubscribe
>> from this list, visit
>> https://www.eclipse.org/mailman/listinfo/aspectj-users
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://www.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://www.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to