Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Was my aspect implementation overriden?

Not really... I can call the method and use an around
advice that simply does not proceed.

I tried this and acutally used a pointcut that would
only be invoked when my aspect was calling the method.
 But this does little good when you can't actually
invoke the method.  The java reflection does not (to
my knowledge) give me any clue as to who is really
implementing the method.

So far Adrian's idea has the most promis.

Eyon

--- "John D. Heintz" <jheintz@xxxxxxxxx> wrote:

> Can
> ClassProvidingCustomImplementation.getMagicNumber
> call the default
> implementation?
> 
> Thanks,
> John
> 
> On 7/14/05, Adrian Colyer <adrian.colyer@xxxxxxxxx>
> wrote:
> > Eyon wrote:
> > 
> > > I have created an aspect with inter-type method
> > > declarations for classes that implement an
> interface.
> > > Now some of the classes that use this interface
> will
> > > override the implementation provided by the
> aspect.
> > 
> > > At runtime, is there a way to ask an instance
> whether
> > > it overrode the method provided in the aspect? 
> I just
> > > need to know this within the aspect that
> provided the
> > > method!
> > 
> > There is no straightforward way to do this. Java
> reflection just sees
> > that the class of the object has the method, and
> it appears as if it
> > was directly declared in the class. However, if
> you are using AspectJ
> > 5, this might be the first good use case I know of
> for the Java 5
> > design that annotations on methods are *not*
> inherited.
> > 
> > When bug
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=98901
> is fixed
> > (currently pending verification and integration of
> the attached
> > patch), you will be able to write the following:
> > 
> > public interface AnInterface {}
> > 
> > public aspect ITDsOnInterface {
> > 
> >     @Retention(RetentionPolicy.RUNTIME)
> >     @interface DefaultImplementation {}
> > 
> >     @DefaultImplementation
> >     public int AnInterface.getMagicNumber() {
> >         return 27;
> >     }
> > 
> >     public boolean isUsingDefaultImpl(AnInterface
> obj) {
> >         try {
> >             return obj.getClass()
> >                        
> .getDeclaredMethod("getMagicNumber")
> >                        
> .isAnnotationPresent(DefaultImplementation.class);
> >         } catch (NoSuchMethodException nsmEx) {
> >             System.out.println("bang");
> >             return false;
> >         }
> >     }
> > }
> > 
> > public class ClassAcquiringDefaultImplementation
> implements AnInterface {}
> > 
> > public class ClassProvidingCustomImplementation
> implements AnInterface {
> >     public int getMagicNumber() {
> >         return 99;
> >     }
> > }
> > 
> > public class DefaultImplementationOrNot {
> > 
> >     public static void main(String[] args) {
> >         ClassAcquiringDefaultImplementation obj1 =
> >             new
> ClassAcquiringDefaultImplementation();
> > 
> >         ClassProvidingCustomImplementation obj2 =
> >             new
> ClassProvidingCustomImplementation();
> > 
> >         System.out.println("default impl returns:
> " + obj1.getMagicNumber());
> >         System.out.println("custom impl returns: "
> + obj2.getMagicNumber());
> > 
> >        
> System.out.println("isUsingDefaultImpl(obj1) returns
> " +
> > 
> >
>
ITDsOnInterface.aspectOf().isUsingDefaultImpl(obj1));
> >        
> System.out.println("isUsingDefaultImpl(obj2) returns
> " +
> > 
> >
>
ITDsOnInterface.aspectOf().isUsingDefaultImpl(obj2));
> >      }
> > 
> > }
> > 
> > -- Adrian
> > adrian.colyer@xxxxxxxxx
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> >
>
https://dev.eclipse.org/mailman/listinfo/aspectj-users
> > 
> > 
> 
> 
> -- 
> John D. Heintz
> Software Craftsman
> Austin, TX
> (512) 633-1198
> 
> jheintz@xxxxxxxxx
> http://johnheintz.homeip.net
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
>
https://dev.eclipse.org/mailman/listinfo/aspectj-users
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


Back to the top