I've put in some changes to fix the version of the problem I uncovered. If you want to try it out there is a new dev build available on the download page ( https://www.eclipse.org/aspectj/downloads.php ) or a new AspectJ maven snapshot in repo.spring.io (version 1.8.9.BUILD-SNAPSHOT)
<repository> <id>repo.spring.io</id> <name>SpringSource snapshots</name> <url>http://repo.spring.io/snapshot</url> </repository> If you get a chance to try them out, let me know if it makes any difference. cheers, Andy On 26 January 2016 at 16:49, Andy Clement <andrew.clem...@gmail.com> wrote: > I’ve recreated it and am currently sorting it out. For me this code > exhibits the problem: > > — Code.java — > class B<T extends SomeClass & SomeInterface> {} > class SomeClass {} > interface SomeInterface {} > > aspect X { > declare parents: B implements java.io.Serializable; > } > —Code.java— > > ajc -1.8 Code.java > javap B > class B<T extends SomeInterface> implements java.o.Serializable { > > See how the type variable has lost the class bound. It only happens if you > have interface bounds in addition to a class bound. Maybe your problem > isn’t caused by doing declare parents but clearly there is a code path in > AspectJ that produces the wrong signature attribute - and maybe whatever > you do causes us to go down that path too. > > I raised https://bugs.eclipse.org/bugs/show_bug.cgi?id=486612 to cover it. > > cheers, > Andy > > > On Jan 26, 2016, at 11:56 AM, Andy Clement <andrew.clem...@gmail.com> > wrote: > > Typically this would end up being that the JVM on the target OS just > happens to put things in a different place on the heap which might then > cause things to be iterated over in a different order. For example if we > slot a bunch of objects into a ‘Set’ without caring about an order an then > ask for all the entries. It will typically be a bug in the code that is > accidentally relying on an ordering when it shouldn’t - and we’ve been > getting away with it because we’ve never seen this other order before or in > any testing. I presume you are not doing anything that might affect the > type definition, like an inter type declaration or declare parents? > (Although you might be advising code within the affected type). > > I would first try it on my linux (ubuntu i think I have) but if that > doesn’t show an issue I’d probably try running a centos virtual machine or > some such. If all else fails I’d need to construct you some debug builds to > perhaps collect extra diagnostics. Hmm, do you compile that original > source on centos or just weave it there? I’m vaguely wondering if the java > compiler used to build the original source produces a subtley different > class file on centos vs windows. > > cheers, > Andy > > On Jan 26, 2016, at 9:09 AM, Tim Webster <tim.webs...@gmail.com> wrote: > > Hi Andy, > > I'm trying to come up with a sample project but so far no luck - it's > behaving itself so far. I'll keep trying though. > > Like I said it only seems to happen in CentOS at the moment. I'd be > surprised if it had anything to do with the OS itself, but my point is that > even if I did come up with a sample do you think you could reproduce the > conditions? Is there anything else I can give you in the meantime > (bytecode, source code, etc)> > > Thanks, > > Tim > > > On Tue, Jan 26, 2016 at 4:29 PM, Andy Clement <andrew.clem...@gmail.com> > wrote: > >> Hi Tim, >> >> I'm certainly interested in more details. I haven't heard of that problem >> but I suspect although we have some regression tests for generics we don't >> have a lot exercising multiple bounds. I'll have a look in the code but as >> you say, a sample that exhibits the problem will enable me to fix it much >> quicker (or sort out a temporary workaround - maybe something silly like >> reordering the bounds in the source code). Please raise a bug and share >> any more info there or with me on email. >> >> cheers, >> Andy >> >> On 26 January 2016 at 03:26, Tim Webster <tim.webs...@gmail.com> wrote: >> >>> Hi, >>> >>> I'm seeing a problem where a class with multiple bounds is 'losing' one >>> of its bounds after weaving occurs. >>> >>> Even more strange is that it is only happening on a specific platform. >>> >>> a brief outline of the problem: >>> >>> Source class: >>> >>> public class ExistenceByIdSpecification<D extends AbstractDomainObject >>> & Identifiable> extends ExistenceSpecification<D> implements >>> IExistenceByIdSpecification >>> >>> What happens is the 'AbstractDomainObject' bound (which is a class) is >>> disappearing, and in the bytecode we end up with something like this: >>> >>> public class ExistenceByIdSpecification<D extends Identifiable> extends >>> ExistenceSpecification<D> implements IExistenceByIdSpecification, >>> org.springframework.beans.factory.aspectj.ConfigurableObject >>> >>> >>> this results is a runtime error whenever the constructor is called (I've >>> removed package names - this is from a unit test): >>> >>> >>> ExistenceByIdSpecification.<init>(L/Identifiable;)V" >>> type="java.lang.NoSuchMethodError"><![CDATA[java.lang.NoSuchMethodError: >>> ExistenceByIdSpecification.<init>(L/Identifiable;)V >>> at >>> ExistenceByIdSpecificationTest.<init>(ExistenceByIdSpecificationTest.java:33) >>> >>> >>> >>> Also, the bytecode for the class is quite a bit larger on the >>> environment where this isn't working properly - it looks like stuff related >>> to @Configurable is repeated. >>> >>> I'm suspecting AspectJ here because when I compile the code with AspectJ >>> disabled, the bytecode looks correct. >>> >>> The environments details I've tried are: >>> >>> *works properly:* >>> Windows 7 >>> Manjaro Linux (current version) >>> Oracle JDK 1.7.0_79 >>> AspectJ 1.8.6 >>> >>> *Doesn't work:* >>> CentOS 7 >>> Oracle JDK 1.7.0_79, Oracle JDK 1.8.0_65, OpenJDK 1.7.0 >>> AspectJ 1.8.6, 1.8.8 >>> >>> Unfortunately we want to target CentOS as a build platform, so that's >>> why this is a problem for us! >>> >>> I've only included basic details here to see if anyone has heard of this >>> problem. I'm happy to provide more detail if required. I know that a >>> sample project is ideal, but I may struggle to reproduce that (although I >>> will try). >>> >>> Thanks, >>> >>> >>> _______________________________________________ >>> aspectj-users mailing list >>> aspectj-users@eclipse.org >>> To change your delivery options, retrieve your password, or unsubscribe >>> from this list, visit >>> https://dev.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://dev.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://dev.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://dev.eclipse.org/mailman/listinfo/aspectj-users