diff options
author | mwebster <mwebster> | 2006-08-01 13:09:06 +0000 |
---|---|---|
committer | mwebster <mwebster> | 2006-08-01 13:09:06 +0000 |
commit | a89eac7f94cbea34f2ca76e49a1c42a594194080 (patch) | |
tree | 1c2cbc2179147a120c61a4e28a9093455f5597e5 | |
parent | f4289cd1511ef1977fecd10cb1949c78dfbb9e9c (diff) | |
download | aspectj-a89eac7f94cbea34f2ca76e49a1c42a594194080.tar.gz aspectj-a89eac7f94cbea34f2ca76e49a1c42a594194080.zip |
Bug 150487 "Tracing and Logging Framework" (lazy initialize SimpleDateFormat to prevent recursion in JDK 1.4 LTW)
-rw-r--r-- | loadtime/src/org/aspectj/weaver/loadtime/WeavingURLClassLoader.java | 49 | ||||
-rw-r--r-- | tests/ltw/ExceptionHandler.aj | 9 | ||||
-rw-r--r-- | tests/ltw/HelloWorld.java | 1 | ||||
-rw-r--r-- | tests/ltw/ant.xml | 26 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java | 8 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml | 17 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/ExtensibleURLClassLoader.java | 8 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java | 10 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/tools/AbstractTrace.java | 12 |
9 files changed, 101 insertions, 39 deletions
diff --git a/loadtime/src/org/aspectj/weaver/loadtime/WeavingURLClassLoader.java b/loadtime/src/org/aspectj/weaver/loadtime/WeavingURLClassLoader.java index 2a3d19381..0dc1506df 100644 --- a/loadtime/src/org/aspectj/weaver/loadtime/WeavingURLClassLoader.java +++ b/loadtime/src/org/aspectj/weaver/loadtime/WeavingURLClassLoader.java @@ -43,7 +43,7 @@ public class WeavingURLClassLoader extends ExtensibleURLClassLoader implements W */ public WeavingURLClassLoader (ClassLoader parent) { this(getURLs(getClassPath()),getURLs(getAspectPath()),parent); -// System.err.println("? WeavingURLClassLoader.<init>(" + m_parent + ")"); +// System.out.println("? WeavingURLClassLoader.WeavingURLClassLoader()"); } public WeavingURLClassLoader (URL[] urls, ClassLoader parent) { @@ -53,15 +53,22 @@ public class WeavingURLClassLoader extends ExtensibleURLClassLoader implements W public WeavingURLClassLoader (URL[] classURLs, URL[] aspectURLs, ClassLoader parent) { super(classURLs,parent); -// System.err.println("? WeavingURLClassLoader.<init>() classURLs=" + classURLs.length + ", aspectURLs=" + aspectURLs.length); +// System.out.println("> WeavingURLClassLoader.WeavingURLClassLoader() classURLs=" + Arrays.asList(classURLs)); this.aspectURLs = aspectURLs; - /* If either we nor our m_parent is using an ASPECT_PATH use a new-style + /* If either we nor our parent is using an ASPECT_PATH use a new-style * adaptor */ - if (this.aspectURLs.length > 0 || parent instanceof WeavingClassLoader) { - adaptor = new WeavingAdaptor(this); + if (this.aspectURLs.length > 0 || getParent() instanceof WeavingClassLoader) { + try { + adaptor = new WeavingAdaptor(this); + } + catch (ExceptionInInitializerError ex) { + ex.printStackTrace(System.out); + throw ex; + } } +// System.out.println("< WeavingURLClassLoader.WeavingURLClassLoader() adaptor=" + adaptor); } private static String getAspectPath () { @@ -106,26 +113,30 @@ public class WeavingURLClassLoader extends ExtensibleURLClassLoader implements W /* Need to defer creation because of possible recursion during constructor execution */ if (adaptor == null && !initializingAdaptor) { - DefaultWeavingContext weavingContext = new DefaultWeavingContext (this) { - - /* Ensures consistent LTW messages for testing */ - public String getClassLoaderName() { - return loader.getClass().getName(); - } - - }; - - ClassLoaderWeavingAdaptor clwAdaptor = new ClassLoaderWeavingAdaptor(); - initializingAdaptor = true; - clwAdaptor.initialize(this,weavingContext); - initializingAdaptor = false; - adaptor = clwAdaptor; + createAdaptor(); } b = adaptor.weaveClass(name,b); } return super.defineClass(name, b, cs); } + + private void createAdaptor () { + DefaultWeavingContext weavingContext = new DefaultWeavingContext (this) { + + /* Ensures consistent LTW messages for testing */ + public String getClassLoaderName() { + return loader.getClass().getName(); + } + + }; + + ClassLoaderWeavingAdaptor clwAdaptor = new ClassLoaderWeavingAdaptor(); + initializingAdaptor = true; + clwAdaptor.initialize(this,weavingContext); + initializingAdaptor = false; + adaptor = clwAdaptor; + } /** * Override to find classes generated by WeavingAdaptor diff --git a/tests/ltw/ExceptionHandler.aj b/tests/ltw/ExceptionHandler.aj new file mode 100644 index 000000000..447b59577 --- /dev/null +++ b/tests/ltw/ExceptionHandler.aj @@ -0,0 +1,9 @@ +public aspect ExceptionHandler { + void around() : execution(public void main(String[])) { + try { + proceed(); + } + catch (Exception ex) { + } + } +}
\ No newline at end of file diff --git a/tests/ltw/HelloWorld.java b/tests/ltw/HelloWorld.java index 8e5a1fdd7..9c810cf25 100644 --- a/tests/ltw/HelloWorld.java +++ b/tests/ltw/HelloWorld.java @@ -2,6 +2,7 @@ public class HelloWorld { public static void main (String[] args) throws Exception { System.out.println("Hello World!"); + throw new Exception(); } }
\ No newline at end of file diff --git a/tests/ltw/ant.xml b/tests/ltw/ant.xml index 6f7971d96..38f51fd49 100644 --- a/tests/ltw/ant.xml +++ b/tests/ltw/ant.xml @@ -6,16 +6,38 @@ name="jdwp" value="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"/> - <target name="JDK14 LTW"> + <target name="JDK14 LTW with XML"> <java fork="yes" classname="HelloWorld" failonerror="yes"> <classpath refid="aj.path"/> +<!-- <classpath> <pathelement path="${aj.sandbox}/hello.jar"/> </classpath> +--> <jvmarg value="-Djava.system.class.loader=org.aspectj.weaver.loadtime.WeavingURLClassLoader"/> + <jvmarg value="-Daj.class.path=${aj.sandbox}/hello.jar;${aj.sandbox}/handler.jar"/> + <jvmarg value="-Daj.weaving.verbose=true"/> + <jvmarg value="-Dorg.aspectj.weaver.showWeaveInfo=true"/> + <jvmarg value="-Dorg.aspectj.tracing.debug=true"/> + <!-- use META-INF/aop.xml style --> +<!-- <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/>--> +<!-- <jvmarg line="${jdwp}"/>--> + </java> + </target> + + <target name="JDK14 LTW with ASPECTPATH"> + <java fork="yes" classname="HelloWorld" failonerror="yes"> + <classpath refid="aj.path"/> <!-- + <classpath> + <pathelement path="${aj.sandbox}/hello.jar"/> + </classpath> --> - <jvmarg value="-Daj.class.path=${aj.sandbox}/hello.jar"/> + <jvmarg value="-Djava.system.class.loader=org.aspectj.weaver.loadtime.WeavingURLClassLoader"/> + <jvmarg value="-Daj.class.path=${aj.sandbox}/hello.jar;${aj.sandbox}/handler.jar"/> + <jvmarg value="-Daj.aspect.path=${aj.sandbox}/handler.jar"/> + <jvmarg value="-Daj.weaving.verbose=true"/> + <jvmarg value="-Dorg.aspectj.weaver.showWeaveInfo=true"/> <jvmarg value="-Dorg.aspectj.tracing.debug=true"/> <!-- use META-INF/aop.xml style --> <!-- <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/>--> diff --git a/tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java b/tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java index 4a5a7e0ee..73b6eebd1 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java @@ -97,8 +97,12 @@ public class LTWTests extends org.aspectj.testing.XMLBasedAjcTestCase { runTest("Odd zip on classpath"); } - public void testJDK14LTW() { - runTest("JDK14 LTW"); + public void testJ14LTWWithXML() { + runTest("JDK14 LTW with XML"); + } + + public void testJ14LTWWithASPECTPATH() { + runTest("JDK14 LTW with ASPECTPATH"); } // separate bugzilla patch has this one... commented out diff --git a/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml b/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml index 57946c186..bc7120870 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml @@ -470,11 +470,16 @@ commented out: reported in another bugzilla bug... </run> </ajc-test> --> - <ajc-test dir="ltw" title="JDK14 LTW" keywords="ltw"> - <compile - files="HelloWorld.java" - options="-outjar hello.jar" - /> - <ant file="ant.xml" target="JDK14 LTW" verbose="true"/> + <ajc-test dir="ltw" title="JDK14 LTW with XML" keywords="ltw"> + <compile files="HelloWorld.java" options="-outjar hello.jar"/> + <compile files="ExceptionHandler.aj" options="-outxml -outjar handler.jar"/> + <ant file="ant.xml" target="JDK14 LTW with XML" verbose="true"/> + </ajc-test> + + <ajc-test dir="ltw" title="JDK14 LTW with ASPECTPATH" keywords="ltw"> + <compile files="HelloWorld.java" options="-outjar hello.jar"/> + <compile files="ExceptionHandler.aj" options="-outjar handler.jar"/> + <ant file="ant.xml" target="JDK14 LTW with ASPECTPATH" verbose="true"/> </ajc-test> +
\ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/ExtensibleURLClassLoader.java b/weaver/src/org/aspectj/weaver/ExtensibleURLClassLoader.java index 74d68703d..e35d95eb3 100644 --- a/weaver/src/org/aspectj/weaver/ExtensibleURLClassLoader.java +++ b/weaver/src/org/aspectj/weaver/ExtensibleURLClassLoader.java @@ -29,7 +29,13 @@ public abstract class ExtensibleURLClassLoader extends URLClassLoader { super(urls,parent); // System.err.println("? ExtensibleURLClassLoader.<init>() path=" + WeavingAdaptor.makeClasspath(urls)); - classPath = new ClassPathManager(FileUtil.makeClasspath(urls),null); + try { + classPath = new ClassPathManager(FileUtil.makeClasspath(urls),null); + } + catch (ExceptionInInitializerError ex) { + ex.printStackTrace(System.out); + throw ex; + } } protected void addURL(URL url) { diff --git a/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java b/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java index 6f9025e20..5f06c0e6f 100644 --- a/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java +++ b/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java @@ -46,11 +46,7 @@ public class ClassPathManager { private static int maxOpenArchives = -1; private static final int MAXOPEN_DEFAULT = 1000; - /* - * FIXME maw Tracing ClassPathManager can cause recursion for JDK 1.4 - * LTW i.e. -Djava.system.class.loader - */ -// private static Trace trace = TraceFactory.getTraceFactory().getTrace(ClassPathManager.class); + private static Trace trace = TraceFactory.getTraceFactory().getTrace(ClassPathManager.class); static { String openzipsString = getSystemPropertyWithoutSecurityException("org.aspectj.weaver.openarchives",Integer.toString(MAXOPEN_DEFAULT)); @@ -61,13 +57,13 @@ public class ClassPathManager { public ClassPathManager(List classpath, IMessageHandler handler) { -// if (trace.isTraceEnabled()) trace.enter("<init>",this,new Object[] { classpath, handler }); + if (trace.isTraceEnabled()) trace.enter("<init>",this,new Object[] { classpath, handler }); entries = new ArrayList(); for (Iterator i = classpath.iterator(); i.hasNext();) { String name = (String) i.next(); addPath(name, handler); } -// if (trace.isTraceEnabled()) trace.exit("<init>"); + if (trace.isTraceEnabled()) trace.exit("<init>"); } protected ClassPathManager() {}; diff --git a/weaver/src/org/aspectj/weaver/tools/AbstractTrace.java b/weaver/src/org/aspectj/weaver/tools/AbstractTrace.java index 877fc79dd..4b421f2ae 100644 --- a/weaver/src/org/aspectj/weaver/tools/AbstractTrace.java +++ b/weaver/src/org/aspectj/weaver/tools/AbstractTrace.java @@ -18,7 +18,7 @@ public abstract class AbstractTrace implements Trace { protected Class tracedClass; - private static SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss.SSS"); + private static SimpleDateFormat timeFormat; protected AbstractTrace (Class clazz) { this.tracedClass = clazz; @@ -94,7 +94,7 @@ public abstract class AbstractTrace implements Trace { protected String formatMessage(String kind, String className, String methodName, Object thiz, Object[] args) { StringBuffer message = new StringBuffer(); Date now = new Date(); - message.append(time.format(now)).append(" "); + message.append(formatDate(now)).append(" "); message.append(Thread.currentThread().getName()).append(" "); message.append(kind).append(" "); message.append(className); @@ -103,6 +103,14 @@ public abstract class AbstractTrace implements Trace { if (args != null) message.append(" ").append(formatArgs(args)); return message.toString(); } + + private static String formatDate (Date date) { + if (timeFormat == null) { + timeFormat = new SimpleDateFormat("HH:mm:ss.SSS"); + } + + return timeFormat.format(date); + } /** * Format objects safely avoiding toString which can cause recursion, |