You could raise a bugzilla for the enhancement. I can't see it getting implemented imminently though, unless someone provides me the testcases and patch to implement it.
cheers Andy On 19 May 2010 00:18, Thomas Wieger <[email protected]> wrote: > Hi Andy, > > thanks a lot for your answer. I like the annotation based approach. This > would allow me, not having to deal with the mangled names. > Is there any chance, that AjType gets enhanced to directly provide the stuff > i would need? > > best regards, > > Thomas > On May 18, 2010, at 1:40 AM, Andy Clement wrote: > >> Hi Thomas, >> >> I actually thought the AjTypeSystem would allow this. But having just >> tried it, I see that it doesn't ! >> >> The name is stable. (it is computed by AspectJs >> org.aspectj.weaver.NameMangler.interMethod() which is contained in the >> weaver jar). So you could create it yourself or simply look for the >> method name that starts with 'ajc$' and ends with '$getName'. >> >> However, there is also an annotation added to these mangled members, >> which captures the declared name. Here is some code that shows how to >> access it: >> >> public class Person { >> private String name; >> >> public static void main(String[] args) { >> Method[] ms = Person.class.getDeclaredMethods(); >> for (int i=0;i<ms.length;i++) { >> ajcITD ajcITD = >> ms[i].getAnnotation(org.aspectj.internal.lang.annotation.ajcITD.class); >> if (ajcITD!=null) { >> System.out.println("method = "+ms[i].getName()+" has real >> name="+ajcITD.name()); >> } >> } >> } >> } >> >> privileged aspect Person_ITD { >> public String Person.getName() { >> return name; >> } >> } >> >> >> For the mangled method, that prints: >> >> method = getName has ajcitd=getName >> >> >> cheers, >> Andy >> >> On 17 May 2010 15:26, Thomas Wieger <[email protected]> wrote: >>> >>> Hello! >>> >>> I'm just wondering, how i could invoke a private method introduced by an >>> inter-type declaration via java reflection (method#invoke(...)) using the >>> aspectj runtime infrastructure, possibly the AjTypeSystem. >>> >>> What i want to do is something like this. Suppose i have a class Person, >>> which looks like this: >>> >>> class Person { >>> private String name; >>> } >>> >>> now i declare an inter-type: >>> >>> privileged aspect Person_IDT { >>> private String Person.getName() { >>> return name; >>> } >>> } >>> >>> now i would like to do something like this: >>> >>> Method readMethod = Person.class.getDeclaredMethod("getName"); >>> readMethod.setAccessible(true); >>> readMethod.invoke(aTarget); >>> >>> Actually i know, that i won't find the method in this way, because AspectJ >>> mangles the name to something beginning with "ajc$interMethodDispatch2$". >>> But my hope was, that somewhere in the aspectj runtime, there would be some >>> way to achieve something like previously described. Unfortunately i haven't >>> found a way. >> _______________________________________________ >> aspectj-users mailing list >> [email protected] >> https://dev.eclipse.org/mailman/listinfo/aspectj-users > > _______________________________________________ > aspectj-users mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/aspectj-users > _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
