[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[aspectj-users] Proposal of a Patch for Scala
|
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