Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Proposal of a Patch for Scala

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 <philip.koester@xxxxxx>:
> 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
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top