Sorry i'm slow on this. The fact that you had to move the marker interface
out of the aspect and then it started working really sounds like a bug. Can
you raise one?  https://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ

cheers,
Andy


On 10 May 2013 07:55, Philipp Leitner <leit...@infosys.tuwien.ac.at> wrote:

> Hey guys,
>
> I have been using AspectJ on and off for some time now, to good success.
> However, today I was having what seems like a relatively simple problem
> that took me some time to resolve. I have in the meantime found a
> workaround, but I would still be interested in why my original solution was
> not ok.
>
> Basically, I am writing a Java-based piece of middleware that needs to
> keep track of objects. To this end, I want to potentially be able to inject
> a java.util.UUID into any Java object. To do this, I want to define a very
> simple Mixin:
>
> public class IdentifiableMixin implements IIdentifiable {
>
>
> private UUID id;
>
>
> public UUID getPlatformId() {
> return id;
> }
>
>
> public void setPlatformId(UUID id) {
> this.id = id;
> }
> }
>
> @Aspect
> public class MyAspect {
>
>  public interface IIdentifiable {
> UUID getPlatformId();
> void setPlatformId(UUID id);
> }
>
> @DeclareMixin("*")
> public static IIdentifiable createIIdentifiable() {
> return new IdentifiableMixin();
> }
> }
>
> Note that I wanted to match the mixin to every possible type of object,
> hence *. I quickly figured out that this does not work, as AspectJ then
> also tries to weave into enums and interfaces (which it can't). Hence, I
> updated to:
>
> @Aspect
> public class MyAspect {
>
>
> public interface IIdentifiable {
> UUID getPlatformId();
> void setPlatformId(UUID id);
> }
>
>
> @DeclareMixin("!is(InterfaceType) && !is(EnumType)")
> public static IIdentifiable createIIdentifiable() {
> return new IdentifiableMixin();
> }
> }
>
> Still not working, though. It seems like this is working fine as long as
> the classes being weaved are not part of a class hierarchy. However, as
> soon as two classes extend from each other, I get plenty of weave errors
> indicating conflicts. To me, it was not clear why this would happen.
> Intuitively, it seems like it should be ok if both parent and child in a
> class hierarchy implement the same mixin, correct? I can post the concrete
> errors I was getting if this is of interest.
>
> Now, after some further experimentation I found that it seems to work if I
> move the interface of the mixin to a separate Java file:
>
> public interface IIdentifiable {
> UUID getPlatformId();
> void setPlatformId(UUID id);
> }
>
> @Aspect
> public class MyAspect {
>
> @DeclareMixin("!is(InterfaceType) && !is(EnumType)")
> public static IIdentifiable createIIdentifiable() {
> return new IdentifiableMixin();
> }
> }
>
> To me this was rather odd. Is this the expected behavior, and, if so, why?
>
> thanks, /philipp
>
> _______________________________________________
> 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