Is this the problem already raised as: https://bugs.eclipse.org/bugs/show_bug.cgi?id=288064 ?
That includes a possibly more general patch than the one you propose? Andy 2009/10/7 Philip Köster <[email protected]>: > Using the AspectJ weaver in Scala programs might result in exceptions like > these (long paste ahead): > > * > > Oct 7, 2009 8:56:55 PM org.aspectj.weaver.tools.Jdk14Trace error > SEVERE: scala/collection/Iterator$$anon$3 > org.aspectj.weaver.BCException: Whilst processing type > 'Lscala/collection/Iterator$$anon$3;' - cannot cast the outer type to a > reference type. Signature=Lscala/collection/Iterator$$anon; > toString()=scala.collection.Iterator$$anon > when processing type mungers > when weaving > > at > org.aspectj.weaver.AbstractReferenceTypeDelegate.getFormalTypeParametersFromOuterClass(AbstractReferenceTypeDelegate.java:108) > at > org.aspectj.weaver.bcel.BcelObjectType.ensureGenericSignatureUnpacked(BcelObjectType.java:728) > at > org.aspectj.weaver.bcel.BcelObjectType.getSuperclass(BcelObjectType.java:209) > at > org.aspectj.weaver.ReferenceType.getSuperclass(ReferenceType.java:855) > at > org.aspectj.weaver.bcel.BcelWeaver.weaveParentsFor(BcelWeaver.java:1433) > at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1257) > at > org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:423) > at > org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:286) > at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:96) > at > org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:52) > at > org.springframework.context.weaving.AspectJWeavingEnabler$AspectJClassBypassingClassFileTransformer.transform(AspectJWeavingEnabler.java:97) > at > org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver$FilteringClassFileTransformer.transform(InstrumentationLoadTimeWeaver.java:181) > at sun.instrument.TransformerManager.transform(Unknown Source) > at sun.instrument.InstrumentationImpl.transform(Unknown Source) > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClass(Unknown Source) > at java.security.SecureClassLoader.defineClass(Unknown Source) > at java.net.URLClassLoader.defineClass(Unknown Source) > at java.net.URLClassLoader.access$000(Unknown Source) > at java.net.URLClassLoader$1.run(Unknown Source) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(Unknown Source) > at java.lang.ClassLoader.loadClass(Unknown Source) > at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) > at java.lang.ClassLoader.loadClass(Unknown Source) > at java.lang.ClassLoader.loadClassInternal(Unknown Source) > at scala.collection.Iterator$.<init>(Iterator.scala:26) > at scala.collection.Iterator$.<clinit>(Iterator.scala) > at scala.package$.<init>(package.scala:15) > at scala.package$.<clinit>(package.scala) > at scala.Predef$.<init>(Predef.scala:65) > at scala.Predef$.<clinit>(Predef.scala) > at com.phrood.sack.Apple.<init>(Apple.scala:10) > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) > at > org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:72) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:932) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:884) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:289) > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:286) > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:188) > at > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:543) > at > org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:730) > at > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:387) > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) > at com.phrood.sack.Sack.run(Sack.scala:35) > Oct 7, 2009 8:56:55 PM org.aspectj.weaver.tools.Jdk14Trace info > INFO: Dumping to > c:\Users\phkoester\Data\phrood\sack\target\sack-1.0-beta-1-bin\.\ajcore.20091007.205655.878.txt > > * > > The problem is that `BcelObjectType.getOuterClass' will transform the string > `scala/collection/Iterator$$anon$3' to `scala/collection/Iterator$$anon', > which---in > `AbstractReferenceTypeDelegate.getFormalTypeParametersFromOuterClass'---does > not result in an instance of `ReferenceType'. > > In order to solve this problem and avoid this exception, I added three lines > to `BcelObjectType.getOuterClass' like so: > > * > > String superClassName = className.substring(0, lastDollar); > final String anon = "$$anon"; // Scala > if (superClassName.endsWith(anon)) { > superClassName = superClassName.substring(0, superClassName.length() > - anon.length()); > } > UnresolvedType outer = UnresolvedType.forName(superClassName); > > * > > I'm not certain whether this is the definitive fix---all I can say is that > it works for me: no exceptions any more, and working load-time weaving for > Scala classes. > > What would be the usual procedure to validate this code and possibly > incorporate it into future versions of the weaver? > > Regards > ---Philip > _______________________________________________ > aspectj-users mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/aspectj-users > _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
