Index: .cvsignore =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/.cvsignore,v retrieving revision 1.1 diff -u -r1.1 .cvsignore --- .cvsignore 16 Dec 2002 22:51:20 -0000 1.1 +++ .cvsignore 3 Feb 2003 07:17:24 -0000 @@ -1 +1,2 @@ out +bin Index: src/org/aspectj/weaver/bcel/BcelObjectType.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java,v retrieving revision 1.4 diff -u -r1.4 BcelObjectType.java --- src/org/aspectj/weaver/bcel/BcelObjectType.java 14 Jan 2003 17:23:52 -0000 1.4 +++ src/org/aspectj/weaver/bcel/BcelObjectType.java 3 Feb 2003 07:17:24 -0000 @@ -182,7 +182,7 @@ return javaClass; } - void resetState() { + public void resetState() { this.interfaces = null; this.superClass = null; this.fields = null; Index: src/org/aspectj/weaver/bcel/BcelWeaver.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java,v retrieving revision 1.6 diff -u -r1.6 BcelWeaver.java --- src/org/aspectj/weaver/bcel/BcelWeaver.java 14 Jan 2003 21:36:29 -0000 1.6 +++ src/org/aspectj/weaver/bcel/BcelWeaver.java 3 Feb 2003 07:17:24 -0000 @@ -281,7 +281,7 @@ return wovenClassNames; } - private void weave(ResolvedTypeX onType) { + public void weave(ResolvedTypeX onType) { onType.clearInterTypeMungers(); for (Iterator i = typeMungerList.iterator(); i.hasNext(); ) { ConcreteTypeMunger m = (ConcreteTypeMunger)i.next(); @@ -327,6 +327,39 @@ dumpUnchanged(classFile); return clazz; + } + + public LazyClassGen weaveWithoutDump(UnwovenClassFile classFile, BcelObjectType classType) throws IOException { + if (classType.isSynthetic()) { + return null; + } + + JavaClass javaClass = classType.getJavaClass(); + List shadowMungers = fastMatch(shadowMungerList, javaClass); + List typeMungers = fastMatch(classType.getInterTypeMungers(), javaClass); + + LazyClassGen clazz = null; + + if (shadowMungers.size() > 0 || typeMungers.size() > 0 || classType.isAspect()) { + clazz = classType.getLazyClassGen(); + //System.err.println("got lazy gen: " + clazz + ", " + clazz.getWeaverState()); + try { + boolean isChanged = BcelClassWeaver.weave(world, clazz, shadowMungers, typeMungers); + if (isChanged) { + return clazz; + } + } catch (RuntimeException re) { + System.err.println("trouble in: " + clazz.getClassName()); +// clazz.print(System.err); + throw re; + } catch (Error re) { + System.err.println("trouble in: " + clazz.getClassName()); +// clazz.print(System.err); + throw re; + } + } + + return null; } // ---- writing Index: src/org/aspectj/weaver/bcel/BcelWorld.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java,v retrieving revision 1.6 diff -u -r1.6 BcelWorld.java --- src/org/aspectj/weaver/bcel/BcelWorld.java 14 Jan 2003 17:23:52 -0000 1.6 +++ src/org/aspectj/weaver/bcel/BcelWorld.java 3 Feb 2003 07:17:24 -0000 @@ -70,6 +70,10 @@ setMessageHandler(handler); } + public void addPath (String name) { + classPath.addPath(name, this.getMessageHandler()); + } + /** * Parse a string into advice. * @@ -191,7 +195,7 @@ } - BcelObjectType addSourceObjectType(JavaClass jc) { + public BcelObjectType addSourceObjectType(JavaClass jc) { String signature = TypeX.forName(jc.getClassName()).getSignature(); BcelObjectType ret = (BcelObjectType)typeMap.get(signature); if (ret == null) { Index: src/org/aspectj/weaver/bcel/ClassPathManager.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java,v retrieving revision 1.2 diff -u -r1.2 ClassPathManager.java --- src/org/aspectj/weaver/bcel/ClassPathManager.java 14 Jan 2003 17:23:52 -0000 1.2 +++ src/org/aspectj/weaver/bcel/ClassPathManager.java 3 Feb 2003 07:17:24 -0000 @@ -32,28 +32,33 @@ entries = new ArrayList(); for (Iterator i = classpath.iterator(); i.hasNext();) { String name = (String) i.next(); - File f = new File(name); - String lc = name.toLowerCase(); - if (lc.endsWith(".jar") || lc.endsWith(".zip")) { - if (!f.isFile()) { - MessageUtil.info(handler, "zipfile classpath entry does not exist: " + name); - continue; - } - try { - entries.add(new ZipFileEntry(f)); - } catch (IOException ioe) { - MessageUtil.warn(handler, "zipfile classpath entry is invalid: " + name + "<" + ioe.getMessage() + ">"); - continue; - } - } else { - if (!f.isDirectory()) { - MessageUtil.info(handler, "directory classpath entry does not exist: " + name); - continue; - } - entries.add(new DirEntry(f)); + addPath(name, handler); + } + } + + public void addPath (String name, IMessageHandler handler) { + File f = new File(name); + String lc = name.toLowerCase(); + if (lc.endsWith(".jar") || lc.endsWith(".zip")) { + if (!f.isFile()) { + MessageUtil.info(handler, "zipfile classpath entry does not exist: " + name); + return; + } + try { + entries.add(new ZipFileEntry(f)); + } catch (IOException ioe) { + MessageUtil.warn(handler, "zipfile classpath entry is invalid: " + name + "<" + ioe.getMessage() + ">"); + return; + } + } else { + if (!f.isDirectory()) { + MessageUtil.info(handler, "directory classpath entry does not exist: " + name); + return; } + entries.add(new DirEntry(f)); } } + public ClassFile find(TypeX type) { String name = type.getName();