> there is actually an old byte code enhancer that is already manipulating the > classes in question that I am then asking for AspectJ to reweave with LTW
That is likely the cause. It is doing something a bit off with the class file leaving it in not quite an ideal state (e.g. a local variable reference that starts in the middle of an instruction rather than on an instruction boundary). You should be able to see things like that yourself - look at the class pre/post your extra byte code enhancer (javap -private -verbose), look at the method aspectj was struggling with - check the local variable table, exception tables, are they fully correct (i.e. pointing at instruction boundaries). Because eclipse JDT always supports older Java source/targets, 1.9 will work fine with Java8. AspectJ 1.9.2 will work with up to Java 11 - the JDKs are coming out so fast I am no longer doing matching AspectJ versions each time. I can’t guarantee you won’t hit anything but 1.9.2 passes all the same tests 1.8.13 did, with some extra tests on top of that too. Cheers, Andy > On Nov 19, 2018, at 2:16 PM, Eric B <ebenza...@gmail.com> wrote: > > Hi Andy, > > I can see if I can get a small test case working. Do you need source code > for all files, or is byte code good enough? The reason I ask is because > there is actually an old byte code enhancer that is already manipulating the > classes in question that I am then asking for AspectJ to reweave with LTW. > If I can reproduce, I have no issues with including the source code, but the > build process is a little convoluted and uses a custom maven plugin with some > custom libraries to do the byte enhancement. While anything is possible, > just makes getting the package ready more difficult. If just the .class > files are sufficient then it should be hopefully faster to produce. > > As for the 1.9.3, any thoughts on when this might be available in a release? > Are there any concerns I should have upgrading 1.8 to 1.9? I typically > always try to use the same version as the JDK (ie: use 1.8 for Java8 code, > 1.9 for Java 9 code, etc). Can I use 1.9 with a Java 8 compiler on a J8 > platform without any issues/worries? > > Thanks, > > Eric > > > > On Mon, Nov 19, 2018 at 12:18 PM Andrew Clement <andrew.clem...@gmail.com > <mailto:andrew.clem...@gmail.com>> wrote: > Hey, > > Obviously my preference would be to fix the problem, but that does require me > to recreate it. Not sure if you are able to share the project that leads to > it? (Or a cut down sample). It looks like something where I’d need to dig > into the byte code involved. > > In the interim I have added is(AbstractType) to go with all the others, just > fixed it under: > https://bugs.eclipse.org/bugs/show_bug.cgi?id=541325 > <https://bugs.eclipse.org/bugs/show_bug.cgi?id=541325> > > I can give you a dev build with that in if that would be useful, I wasn’t > planning on an imminent 1.9.3 (this would be fixed in 1.9 line, not the 1.8 > line) > > cheers, > Andy > >> On Nov 16, 2018, at 8:19 AM, Eric B <ebenza...@gmail.com >> <mailto:ebenza...@gmail.com>> wrote: >> >> Thanks for the info; I suspected as much as not being able to target >> abstract classes directly (I hadn't found any documentation to that effect). >> >> Can you think of any other way I can attempt to exclude my problematic >> abstract classes without listing the explicitly? I'm hoping that something >> like the following might work: >> >> @Pointcut( "execution( * *..AbstractClass1(..)) || execution (* >> *..AbstractClass2(..)) || ... )") >> public void abstractClasses(); >> >> ** >> * Execution of any pcClearFields() methods within a newInstance as injected >> by Kodo Enhancer >> */ >> @Pointcut("cflow(!abstractClasses() && execution(* >> org.apache.openjpa.enhance.PersistenceCapable+.pcNewInstance(..))) && >> execution(* >> org.apache.openjpa.enhance.PersistenceCapable+.pcClearFields(..))") >> public void kodoNewObject(){} >> >> >> But I haven't tested it, and it's kind of ugly, so hoping I can find >> something a little less bad? >> >> Thanks, >> >> Eric >> >> On Fri, Nov 16, 2018 at 5:15 AM Alexander Kriegisch >> <alexan...@kriegisch.name <mailto:alexan...@kriegisch.name>> wrote: >> Sorry for being too busy to really investigate this report, but as a side >> note to Andy I want to mention that currently there is not way to express >> something like >> >> !within(* && is(AbstractType)) >> >> Since 1.6.9 [1] we have >> -- ClassType, >> -- AspectType, >> -- InterfaceType, >> -- InnerType, >> -- AnonymousType, >> -- EnumType. >> >> Since 1.8.4 [2] we have >> -- FinalType. >> >> According to [3] this still seems to be the current status. Maybe Andy wants >> to think about adding support for 'AbstractType', independently of how >> Eric's issue here is to be resolved. >> >> [1] https://www.eclipse.org/aspectj/doc/released/README-169.html >> <https://www.eclipse.org/aspectj/doc/released/README-169.html> >> [2] https://www.eclipse.org/aspectj/doc/released/README-184.html >> <https://www.eclipse.org/aspectj/doc/released/README-184.html> >> [3] >> http://git.eclipse.org/c/aspectj/org.aspectj.git/tree/org.aspectj.matcher/src/org/aspectj/weaver/patterns/TypeCategoryTypePattern.java#n35 >> >> <http://git.eclipse.org/c/aspectj/org.aspectj.git/tree/org.aspectj.matcher/src/org/aspectj/weaver/patterns/TypeCategoryTypePattern.java#n35> >> >> >> -- >> Alexander Kriegisch >> https://scrum-master.de <https://scrum-master.de/> >> >> >> Eric B schrieb am 15.11.2018 21:11: >> > >> > >> > I'm using aspectj 1.8.13 LTW'ing with Wildfly 10. Generally speaking, >> > everything is working as expected. However, I have recently added in a new >> > Pointcut which is causing core dumps by the weaver: >> > >> > >> > 2018-11-15 14:56:30,033 SEVERE [org.aspectj.weaver.loadtime.Aj] >> > izone/adams/model/messaging/SMSMessageAbstract: >> > java.lang.IllegalStateException: Unexpected problem whilst preparing >> > bytecode for model.messaging.SMSMessa >> > >> > geAbstract.pcNewInstance(Lorg/apache/openjpa/enhance/StateManager;Ljava/lang/Object;Z)Lorg/apache/openjpa/enhance/PersistenceCapable; >> > >> > at org.aspectj.apache.bcel.generic.MethodGen.getMethod(MethodGen.java:699) >> > >> > at org.aspectj.weaver.bcel.LazyMethodGen.getMethod(LazyMethodGen.java:498) >> > >> > at org.aspectj.weaver.bcel.LazyClassGen.writeBack(LazyClassGen.java:515) >> > >> > at >> > org.aspectj.weaver.bcel.LazyClassGen.getJavaClassBytesIncludingReweavable(LazyClassGen.java:697) >> > >> > at >> > org.aspectj.weaver.bcel.BcelWeaver.getClassFilesFor(BcelWeaver.java:1443) >> > >> > at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1405) >> > >> > at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1183) >> > >> > at >> > org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:527) >> > >> > at >> > org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:363) >> > >> > at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:121) >> > >> > at >> > org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54) >> > >> > >> > ... >> > >> > ... >> > >> > >> > at >> > org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.jrGetDeclaredMethods(DeploymentReflectionIndex.java:46001) >> > >> > at >> > org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:80) >> > >> > at >> > org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66) >> > >> > at >> > org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:57) >> > >> > at >> > org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:106) >> > >> > at >> > org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:91) >> > >> > at >> > org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:76) >> > >> > at >> > org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:165) >> > >> > at >> > org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:2032) >> > >> > at >> > org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1955) >> > >> > at >> > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) >> > >> > at >> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) >> > >> > at java.lang.Thread.run(Thread.java:745) >> > >> > Caused by: java.lang.NullPointerException >> > >> > at >> > org.aspectj.apache.bcel.generic.InstructionList.setPositions(InstructionList.java:892) >> > >> > at >> > org.aspectj.apache.bcel.generic.InstructionList.setPositions(InstructionList.java:863) >> > >> > at >> > org.aspectj.apache.bcel.generic.InstructionList.getByteCode(InstructionList.java:981) >> > >> > at org.aspectj.apache.bcel.generic.MethodGen.getMethod(MethodGen.java:697) >> > >> > >> > I've traced it down to my new cflow pointcut which targets a method in >> > classes implementating a specific interface, but the weaver throws the >> > exception if it tries to weave an abstract class implementing this >> > interface. >> > >> > >> > My pointcut: >> > >> > >> > /** >> > * Execution of any pcClearFields() methods within a newInstance as >> > injected by Kodo Enhancer >> > */ >> > @Pointcut("cflow(execution(* >> > org.apache.openjpa.enhance.PersistenceCapable+.pcNewInstance(..))) && >> > execution(* >> > org.apache.openjpa.enhance.PersistenceCapable+.pcClearFields(..))") >> > public void kodoNewObject(){} >> > >> > >> > The weaver fails whenever it encounters an abstract class implementing >> > PersistenceCabaple without the pcNewInstance() method. >> > >> > >> > I'm not sure how to handle this. There is no functional failure with the >> > LTW failing as a non-abstract class gets properly woven. However, my logs >> > get polluted everytime the weaver tries to weave a such class and >> > generates a new ajcore.<timestamp>.txt file everytime which will quickly >> > fill my directory. >> > >> > >> > AspectJ LTW is being used with LTW enabled (<weaver options="-Xlint:ignore >> > -Xset:overWeaving=true" >). >> > >> > >> > Given that I'm running the latest of the 1.8 branch, is there a way I can >> > simply tell me pointcut to not target abstract classes? Is this even >> > feasible? >> > >> > >> > Thanks, >> > >> > >> > Eric >> > >> > >> >> _______________________________________________ >> aspectj-users mailing list >> aspectj-users@eclipse.org <mailto:aspectj-users@eclipse.org> >> To change your delivery options, retrieve your password, or unsubscribe from >> this list, visit >> https://www.eclipse.org/mailman/listinfo/aspectj-users >> <https://www.eclipse.org/mailman/listinfo/aspectj-users> >> _______________________________________________ >> aspectj-users mailing list >> aspectj-users@eclipse.org <mailto:aspectj-users@eclipse.org> >> To change your delivery options, retrieve your password, or unsubscribe from >> this list, visit >> https://www.eclipse.org/mailman/listinfo/aspectj-users >> <https://www.eclipse.org/mailman/listinfo/aspectj-users> > _______________________________________________ > aspectj-users mailing list > aspectj-users@eclipse.org <mailto:aspectj-users@eclipse.org> > To change your delivery options, retrieve your password, or unsubscribe from > this list, visit > https://www.eclipse.org/mailman/listinfo/aspectj-users > <https://www.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://www.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://www.eclipse.org/mailman/listinfo/aspectj-users