Index: ClassLoaderWeavingAdaptor.java =================================================================== RCS file: /home/technology/org.aspectj/modules/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java,v retrieving revision 1.29 diff -u -r1.29 ClassLoaderWeavingAdaptor.java --- ClassLoaderWeavingAdaptor.java 15 Nov 2005 14:34:45 -0000 1.29 +++ ClassLoaderWeavingAdaptor.java 19 Nov 2005 18:05:47 -0000 @@ -14,6 +14,7 @@ import org.aspectj.asm.IRelationship; import org.aspectj.bridge.IMessage; +import org.aspectj.bridge.IMessageHandler; import org.aspectj.bridge.ISourceLocation; import org.aspectj.bridge.Message; import org.aspectj.bridge.MessageUtil; @@ -99,6 +100,11 @@ weavingContext = wContext ; } + List definitions = parseDefinitions(loader, messageHandler); + if (!enabled) { + return; + } + bcelWorld = new BcelWorld( loader, messageHandler, new ICrossReferenceHandler() { public void addCrossReference(ISourceLocation from, ISourceLocation to, IRelationship.Kind kind, boolean runtimeTest) { @@ -106,7 +112,6 @@ } } ); - // //TODO this AJ code will call // //org.aspectj.apache.bcel.Repository.setRepository(this); // //ie set some static things @@ -116,14 +121,13 @@ weaver = new BcelWeaver(bcelWorld); // register the definitions - registerDefinitions(weaver, loader); + registerDefinitions(weaver, loader, definitions); + messageHandler = bcelWorld.getMessageHandler(); - // AV - see #113511 - not sure it is good to skip message handler - if (enabled) { - messageHandler = bcelWorld.getMessageHandler(); - // after adding aspects - weaver.prepareForWeave(); - } + //bcelWorld.setResolutionLoader(loader.getParent());//(ClassLoader)null);// + + // after adding aspects + weaver.prepareForWeave(); } /** @@ -132,11 +136,11 @@ * @param weaver * @param loader */ - private void registerDefinitions(final BcelWeaver weaver, final ClassLoader loader) { - try { - MessageUtil.info(messageHandler, "register classloader " + getClassLoaderName(loader)); + private List parseDefinitions(final ClassLoader loader, IMessageHandler handler) { + List definitions = new ArrayList(); + try { + MessageUtil.info(messageHandler, "register classloader " + ((loader!=null)?loader.getClass().getName()+"@"+loader.hashCode():"null")); //TODO av underoptimized: we will parse each XML once per CL that see it - List definitions = new ArrayList(); //TODO av dev mode needed ? TBD -Daj5.def=... if (ClassLoader.getSystemClassLoader().equals(loader)) { @@ -160,7 +164,18 @@ definitions.add(DocumentParser.parse(xml)); } } - + if (definitions.isEmpty()) { + enabled = false; + } + } catch (Exception e) { + handler.handleMessage( + new Message("Register definition failed", IMessage.WARNING, e, null)); + } + return definitions; + } + + private void registerDefinitions(final BcelWeaver weaver, final ClassLoader loader, List definitions) { + try { // still go thru if definitions is empty since we will configure // the default message handler in there registerOptions(weaver, loader, definitions); @@ -177,8 +192,9 @@ info("no configuration found. Disabling weaver for class loader " + getClassLoaderName(loader)); } } catch (Exception e) { - enabled = false;// will allow very fast skip in shouldWeave() - warn("register definition failed",e); + weaver.getWorld().getMessageHandler().handleMessage( + new Message("Register definition failed", IMessage.WARNING, e, null) + ); } } @@ -437,6 +453,10 @@ } protected boolean accept(String className, byte[] bytes) { + + if (!enabled) { + return false; + } // avoid ResolvedType if not needed if (m_excludeTypePattern.isEmpty() && m_includeTypePattern.isEmpty()) { return true; @@ -586,5 +606,4 @@ public void flushGeneratedClasses(){ generatedClasses = new HashMap(); } - }