Bug 317743 - import handling and type lookup issues
Summary: import handling and type lookup issues
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.6.9RC1   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: 1.6.9   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-06-23 15:28 EDT by Andrew Clement CLA
Modified: 2013-12-20 02:59 EST (History)
2 users (show)

See Also:


Attachments
Classfiles patching this issue (3.75 KB, application/octet-stream)
2010-06-23 15:32 EDT, Andrew Clement CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
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)