Bug 317743

Summary: import handling and type lookup issues
Product: [Tools] AspectJ Reporter: Andrew Clement <aclement>
Component: CompilerAssignee: aspectj inbox <aspectj-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: abhishek.sinha04, peter.melnikov
Version: 1.6.9RC1   
Target Milestone: 1.6.9   
Hardware: PC   
OS: Windows 7   
Whiteboard:
Attachments:
Description Flags
Classfiles patching this issue none

Description Andrew Clement CLA 2010-06-23 15:28:27 EDT
Raised by Peter Melnikov on the mailing list.

Two problems: 
1) the binding scope being used for annotation style aspects accumulates lots of duplicate import prefixes in the SimpleScope object.
2) SimpleScope.lookupType tries the prefixes even if the type is already fully qualified. 

The combination of these issues causes a terrible mess.  Lots of class lookup failures.  Since the type cannot be 'partially qualified' it is silly to use the prefixes if the type is fully qualified.
Comment 1 Andrew Clement CLA 2010-06-23 15:32:09 EDT
Created attachment 172545 [details]
Classfiles patching this issue

This jar includes two classes that replace those in an AspectJ 1.6.9 weaver.

to apply it, save it alongside aspectjweaver.jar then

jar -xvf pr317743.jar
jar -uvf aspectjweaver.jar org

this will patch BindingScope and SimpleScope in the jar.
Comment 2 Peter Melnikov CLA 2010-06-23 16:38:53 EDT
I have applied the path and it works for me. Log file is now 2.5MB vs 22 MB before, and overall weaving speed has increased a lot. No more ClassNotFoundException error messages.
Before, I got your patch, I changed slightly the SimpleScope.java:

public UnresolvedType lookupType(String name, IHasPosition location) {

ResolvedType resolvedType = world.resolve(UnresolvedType.forName(name), true);

        if(resolvedType.isMissing()) {

            for (int i = 0; i < importedNames.length; i++) {
                String importedName = importedNames[i];
                // // make sure we're matching against the
                // // type name rather than part of it
                // if (importedName.endsWith("." + name)) {
                if (importedName.endsWith(name)) {
                    return world.resolve(importedName);
                }
            }

            for (int i = 0; i < importedPrefixes.length; i++) {
                String importedPrefix = importedPrefixes[i];
                ResolvedType tryType = world.resolve(UnresolvedType.forName(importedPrefix + name), true);
                if (!tryType.isMissing()) {
                    return tryType;
                }
            }

        }

        return resolvedType;
  }

This worked for me too. But it was just a quick fix.
Comment 3 Peter Melnikov CLA 2010-06-23 16:46:16 EDT
Just found single exception:

SEVERE: Unable to find class 'java.lang.void' in repository
java.lang.ClassNotFoundException: java.lang.void not found - unable to determine URL
	at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292)
	at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:390)
	at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:373)
	at org.aspectj.weaver.ltw.LTWWorld.resolveDelegate(LTWWorld.java:111)
	at org.aspectj.weaver.World.resolveToReferenceType(World.java:452)
	at org.aspectj.weaver.World.resolve(World.java:298)
	at org.aspectj.weaver.patterns.SimpleScope.lookupType(SimpleScope.java:64)
	at org.aspectj.weaver.BindingScope.lookupType(BindingScope.java:69)


I'am pretty sure it is because I have following pointcut declaration (and it is the only which has void as return type parameter):

" || execution(public void net.mansion.redirect.impl.engine.web.RedirectProcessorServlet.doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse))"
Comment 4 Andrew Clement CLA 2010-06-23 17:40:05 EDT
thanks for testing that so quickly.

I'll probably refine it a bit and see if I can squeeze it into 1.6.9 final release.  I just have to think through any cases that might be adversely affected.

oh and i'll fix the void case too.
Comment 5 Andrew Clement CLA 2010-06-28 19:54:04 EDT
change should make it into 1.6.9.RC2, available this week
Comment 6 Andrew Clement CLA 2010-06-29 12:41:28 EDT
1.6.9.RC2 is now available for download if you want to try it out.
Comment 7 abhishek S CLA 2013-12-20 02:29:42 EST
I am using aspectjweaver-1.6.11.jar.

my aop.xml has 
<concrete-aspect name="auditInventory"
   extends="com.a.b.AbstractAuditAspect">
  <pointcut name="methodToNotify"
	expression="execution(public * com.z.NotificationThread.run(..))
				|| execution(public * com.m.NotifyAuditFramework.notifyFw(..))"/>
		</concrete-aspect>


I get error:

Dec 20, 2013 12:51:19 PM org.aspectj.weaver.tools.Jdk14Trace error
SEVERE: Unable to find class 'auditInventory' in repository
java.lang.ClassNotFoundException: auditInventory not found - unable to determine URL
        at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292)
        at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:402)
        at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:376)
        at org.aspectj.weaver.ltw.LTWWorld.resolveDelegate(LTWWorld.java:111)
        at org.aspectj.weaver.World.resolveToReferenceType(World.java:467)
        at org.aspectj.weaver.World.resolve(World.java:308)
        at org.aspectj.weaver.World.resolve(World.java:218)
        at org.aspectj.weaver.UnresolvedType.resolve(UnresolvedType.java:593)
        at org.aspectj.weaver.ResolvedMemberImpl.getSourceContext(ResolvedMemberImpl.java:608)
        at org.aspectj.weaver.bcel.BcelField.unpackAttributes(BcelField.java:80)
        at org.aspectj.weaver.bcel.BcelField.<init>(BcelField.java:73)
        at org.aspectj.weaver.bcel.LazyClassGen.addField(LazyClassGen.java:1439)
        at org.aspectj.weaver.bcel.LazyClassGen.addField(LazyClassGen.java:1484)
        at org.aspectj.weaver.bcel.BcelPerClauseAspectAdder.generatePerClauseMembers(BcelPerClauseAspectAdder.java:166)
        at org.aspectj.weaver.bcel.BcelPerClauseAspectAdder.doMunge(BcelPerClauseAspectAdder.java:96)
        at org.aspectj.weaver.bcel.BcelPerClauseAspectAdder.forceMunge(BcelPerClauseAspectAdder.java:68)
        at org.aspectj.weaver.loadtime.ConcreteAspectCodeGen.getBytes(ConcreteAspectCodeGen.java:467)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects(ClassLoaderWeavingAdaptor.java:495)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions(ClassLoaderWeavingAdaptor.java:290)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:176)
        at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:271)
        at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:276)
        at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:254)
        at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:90)
        at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54)
        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 org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at org.springframework.util.ClassUtils.forName(ClassUtils.java:257)
        at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1256)
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1227)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576)
        at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1304)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:315)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:394)
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:594)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1654)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Comment 8 abhishek S CLA 2013-12-20 02:59:47 EST
My bad. 

I need to have concrete class in place of auditInventory. I have fixed that problem but I still getting 

Dec 20, 2013 1:23:12 PM org.aspectj.weaver.tools.Jdk14Trace error
SEVERE: Unable to find class 'String' in repository
java.lang.ClassNotFoundException: String not found - unable to determine URL
        at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292)
        at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:402)
        at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:376)
        at org.aspectj.weaver.ltw.LTWWorld.resolveDelegate(LTWWorld.java:111)
        at org.aspectj.weaver.World.resolveToReferenceType(World.java:467)
        at org.aspectj.weaver.World.resolve(World.java:308)
        at org.aspectj.weaver.patterns.WildTypePattern.lookupTypeInWorld(WildTypePattern.java:794)
        at org.aspectj.weaver.patterns.WildTypePattern.lookupTypeInWorldIncludingPrefixes(WildTypePattern.java:776)
        at org.aspectj.weaver.patterns.WildTypePattern.resolveBindingsFromFullyQualifiedTypeName(WildTypePattern.java:741)
        at org.aspectj.weaver.patterns.WildTypePattern.resolveBindings(WildTypePattern.java:676)
        at org.aspectj.weaver.patterns.TypePatternList.resolveBindings(TypePatternList.java:439)
        at org.aspectj.weaver.patterns.SignaturePattern.resolveBindings(SignaturePattern.java:86)
        at org.aspectj.weaver.patterns.KindedPointcut.resolveBindings(KindedPointcut.java:353)
        at org.aspectj.weaver.patterns.Pointcut.resolve(Pointcut.java:189)
        at org.aspectj.weaver.bcel.AtAjAttributes$LazyResolvedPointcutDefinition.getPointcut(AtAjAttributes.java:1879)
        at org.aspectj.weaver.patterns.ReferencePointcut.concretize1(ReferencePointcut.java:359)
        at org.aspectj.weaver.patterns.Pointcut.concretize(Pointcut.java:229)
        at org.aspectj.weaver.patterns.Pointcut.concretize(Pointcut.java:211)
        at org.aspectj.weaver.Advice.concretize(Advice.java:396)
        at org.aspectj.weaver.bcel.BcelAdvice.concretize(BcelAdvice.java:110)
        at org.aspectj.weaver.CrosscuttingMembers.addShadowMunger(CrosscuttingMembers.java:98)
        at org.aspectj.weaver.CrosscuttingMembers.addShadowMungers(CrosscuttingMembers.java:90)
        at org.aspectj.weaver.ResolvedType.collectCrosscuttingMembers(ResolvedType.java:749)
        at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:85)
        at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:69)
        at org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect(BcelWeaver.java:202)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects(ClassLoaderWeavingAdaptor.java:466)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions(ClassLoaderWeavingAdaptor.java:290)
        at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:176)
        at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:271)
        at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:276)
        at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:254)
        at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:90)
        at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54)
        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 org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at org.springframework.util.ClassUtils.forName(ClassUtils.java:257)
        at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1256)
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1227)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576)
        at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1304)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:315)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:394)
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:594)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1654)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)