Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Changes in introduction for aspectj compiler 1.1

I didn't find this in the bug db, so I posted it:

  http://bugs.eclipse.org/bugs/show_bug.cgi?id=39993

William, I did not include your email or name since you did
not post the bug yourself.  If you would like notification
of bug activity (e.g., when fixed), add yourself as a cc.

I did not create a test case.  For anyone who would like to
help in that regard, please see

http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/doc/faq.html#q:harnesstestcases

Wes

Jim.Hugunin@xxxxxxxx wrote:

This is useful information for users, and I'm very happy you could find a work-around and share it with others.  However, this is also a 1.1 compiler bug.  You've already done the hard work of reducing this to a small self-contained test case that reproduces the problem.  Could you please submit this to the bug report system so that it will be fixed in a future release?

FYI - If you find any bugs, please submit a reproducible test case to https://dev.eclipse.org (-> Bug Reports) (product AspectJ, component Compiler).

Thanks - Jim


-----Original Message-----
From: William DeMoss II [mailto:wdemoss@xxxxxxxxxxxx]
Sent: Thursday, June 26, 2003 8:47 PM
To: aspectj-users@xxxxxxxxxxx
Subject: [aspectj-users] Changes in introduction for aspectj compiler 1.1

I was playing around with porting over our current project witch uses
1.0.6 to the new compiler and looking into the little differences that
would need to be addressed. I came across a obscure difference between
the two concerning introduction. I thought it would be of help to pass
it along. Here is the example.

   interface Identifiable {
       void setId(Id id);
       Id getId();
   }

   aspect IdentifiableAspect {
       private Id Identifiable.id = null;
       public Id Identifiable.getId() {
		return this.id;
	  }
       public void Identifiable.setId(Id id) {
           this.id = id;
       }

       public int Identifiable.hashCode() {
           return (this.getId() == null)
               ? super.hashCode()
               : this.getId().hashCode();
       }
   }

The method of interest is the introduction of hashCode. Proir to the new
compiler this worked fine. Now it throws a NullPointer exception in the
compiler w/o a good error message. However, if you change the
functionallity to the following:

   int around(Identifiable i): target(i)
       && call(public int hashCode())
   {
       return (i.getId() == null)
           ? proceed(i)
           : i.getId().hashCode();
   }

It accomplishes the same goal. I believe this has to do with the new
compiler  bytecode weaving as opposed to the source code weaving done
with the prior version. Hope that can save someone some trouble.

- wd

_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users

_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users




Back to the top