diff options
Diffstat (limited to 'org.aspectj.matcher/src/org/aspectj/weaver/Dump.java')
-rw-r--r-- | org.aspectj.matcher/src/org/aspectj/weaver/Dump.java | 421 |
1 files changed, 213 insertions, 208 deletions
diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/Dump.java b/org.aspectj.matcher/src/org/aspectj/weaver/Dump.java index bdc6ec463..c9978ce57 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/Dump.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/Dump.java @@ -34,9 +34,8 @@ import org.aspectj.weaver.tools.Traceable; /** * @author websterm - * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments + * + * To change the template for this generated type comment go to Window>Preferences>Java>Code Generation>Code and Comments */ public class Dump { @@ -45,14 +44,14 @@ public class Dump { /* Format for unique filename based on date & time */ private static final String FILENAME_PREFIX = "ajcore"; -// private static final DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); -// private static final DateFormat timeFormat = new SimpleDateFormat("HHmmss.SSS"); + // private static final DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + // private static final DateFormat timeFormat = new SimpleDateFormat("HHmmss.SSS"); private static final String FILENAME_SUFFIX = "txt"; - + public static final String UNKNOWN_FILENAME = "Unknown"; public static final String DUMP_EXCLUDED = "Excluded"; public static final String NULL_OR_EMPTY = "Empty"; - + private static Class exceptionClass; private static IMessage.Kind conditionKind = IMessage.ABORT; private static File directory = new File("."); @@ -60,129 +59,133 @@ public class Dump { private String reason; private String fileName; private PrintStream print; - + private static String[] savedCommandLine; private static List savedFullClasspath; private static IMessageHolder savedMessageHolder; - + private static Map nodes = new WeakHashMap(); private static String lastDumpFileName = UNKNOWN_FILENAME; - + private static boolean preserveOnNextReset = false; - + private static Trace trace = TraceFactory.getTraceFactory().getTrace(Dump.class); - + /** - * for testing only, so that we can verify dump contents - * after compilation has completely finished + * for testing only, so that we can verify dump contents after compilation has completely finished */ public static void preserveOnNextReset() { - preserveOnNextReset = true; + preserveOnNextReset = true; } - + public static void reset() { if (preserveOnNextReset) { preserveOnNextReset = false; return; - } - else { + } else { nodes.clear(); savedMessageHolder = null; } } - - + /* * Dump methods */ - public static String dump (String reason) { + public static String dump(String reason) { String fileName = UNKNOWN_FILENAME; Dump dump = null; try { dump = new Dump(reason); fileName = dump.getFileName(); dump.dumpDefault(); - } - finally { - if (dump != null) dump.close(); + } finally { + if (dump != null) + dump.close(); } return fileName; } - - public static String dumpWithException (Throwable th) { - return dumpWithException(savedMessageHolder,th); + + public static String dumpWithException(Throwable th) { + return dumpWithException(savedMessageHolder, th); } - - public static String dumpWithException (IMessageHolder messageHolder, Throwable th) { - if (trace.isTraceEnabled()) trace.enter("dumpWithException",null,new Object[] {messageHolder, th}); + + public static String dumpWithException(IMessageHolder messageHolder, Throwable th) { + if (trace.isTraceEnabled()) + trace.enter("dumpWithException", null, new Object[] { messageHolder, th }); String fileName = UNKNOWN_FILENAME; Dump dump = null; try { dump = new Dump(th.getClass().getName()); fileName = dump.getFileName(); - dump.dumpException(messageHolder,th); + dump.dumpException(messageHolder, th); + } finally { + if (dump != null) + dump.close(); } - finally { - if (dump != null) dump.close(); - } - - if (trace.isTraceEnabled()) trace.exit("dumpWithException",fileName); + + if (trace.isTraceEnabled()) + trace.exit("dumpWithException", fileName); return fileName; } - public static String dumpOnExit () { + public static String dumpOnExit() { return dumpOnExit(savedMessageHolder, false); } - public static String dumpOnExit (IMessageHolder messageHolder, boolean reset) { - if (trace.isTraceEnabled()) trace.enter("dumpOnExit",null,messageHolder); + public static String dumpOnExit(IMessageHolder messageHolder, boolean reset) { + if (trace.isTraceEnabled()) + trace.enter("dumpOnExit", null, messageHolder); String fileName = UNKNOWN_FILENAME; - + if (!shouldDumpOnExit(messageHolder)) { fileName = DUMP_EXCLUDED; - } - else { + } else { Dump dump = null; try { dump = new Dump(conditionKind.toString()); fileName = dump.getFileName(); dump.dumpDefault(messageHolder); - } - finally { - if (dump != null) dump.close(); + } finally { + if (dump != null) + dump.close(); } } - - if (reset) messageHolder.clearMessages(); - if (trace.isTraceEnabled()) trace.exit("dumpOnExit",fileName); + if (reset) + messageHolder.clearMessages(); + + if (trace.isTraceEnabled()) + trace.exit("dumpOnExit", fileName); return fileName; } - private static boolean shouldDumpOnExit (IMessageHolder messageHolder) { - if (trace.isTraceEnabled()) trace.enter("shouldDumpOnExit",null,messageHolder); - if (trace.isTraceEnabled()) trace.event("shouldDumpOnExit",null,conditionKind); - boolean result = (messageHolder == null) || messageHolder.hasAnyMessage(conditionKind,true); - - if (trace.isTraceEnabled()) trace.exit("shouldDumpOnExit",result); + private static boolean shouldDumpOnExit(IMessageHolder messageHolder) { + if (trace.isTraceEnabled()) + trace.enter("shouldDumpOnExit", null, messageHolder); + if (trace.isTraceEnabled()) + trace.event("shouldDumpOnExit", null, conditionKind); + boolean result = (messageHolder == null) || messageHolder.hasAnyMessage(conditionKind, true); + + if (trace.isTraceEnabled()) + trace.exit("shouldDumpOnExit", result); return result; } /* * Dump configuration */ - public static void setDumpOnException (boolean b) { + public static void setDumpOnException(boolean b) { if (b) { exceptionClass = java.lang.Throwable.class; - } - else { + } else { exceptionClass = null; } } - - public static boolean setDumpDirectory (String directoryName) { - if (trace.isTraceEnabled()) trace.enter("setDumpDirectory",null,directoryName); + + public static boolean setDumpDirectory(String directoryName) { + if (trace.isTraceEnabled()) + trace.enter("setDumpDirectory", null, directoryName); boolean success = false; File newDirectory = new File(directoryName); @@ -190,94 +193,100 @@ public class Dump { directory = newDirectory; success = true; } - - if (trace.isTraceEnabled()) trace.exit("setDumpDirectory",success); + + if (trace.isTraceEnabled()) + trace.exit("setDumpDirectory", success); return success; - + } - - public static boolean getDumpOnException () { + + public static boolean getDumpOnException() { return (exceptionClass != null); } - public static boolean setDumpOnExit (IMessage.Kind condition) { - if (trace.isTraceEnabled()) trace.event("setDumpOnExit",null,condition); + public static boolean setDumpOnExit(IMessage.Kind condition) { + if (trace.isTraceEnabled()) + trace.event("setDumpOnExit", null, condition); conditionKind = condition; return true; } - public static boolean setDumpOnExit (String condition) { + public static boolean setDumpOnExit(String condition) { for (Iterator i = IMessage.KINDS.iterator(); i.hasNext();) { - IMessage.Kind kind = (IMessage.Kind)i.next(); + IMessage.Kind kind = (IMessage.Kind) i.next(); if (kind.toString().equals(condition)) { return setDumpOnExit(kind); } } return false; } - - public static IMessage.Kind getDumpOnExit () { - return conditionKind; + + public static IMessage.Kind getDumpOnExit() { + return conditionKind; } - - public static String getLastDumpFileName () { + + public static String getLastDumpFileName() { return lastDumpFileName; } /* * Dump registration */ - public static void saveCommandLine (String[] args) { + public static void saveCommandLine(String[] args) { savedCommandLine = new String[args.length]; - System.arraycopy(args,0,savedCommandLine,0,args.length); + System.arraycopy(args, 0, savedCommandLine, 0, args.length); } - public static void saveFullClasspath (List list) { + public static void saveFullClasspath(List list) { savedFullClasspath = list; } - public static void saveMessageHolder (IMessageHolder holder) { + public static void saveMessageHolder(IMessageHolder holder) { savedMessageHolder = holder; } - public static void registerNode (Class module, INode newNode) { - if (trace.isTraceEnabled()) trace.enter("registerNode",null,new Object[] { module, newNode} ); + public static void registerNode(Class module, INode newNode) { + if (trace.isTraceEnabled()) + trace.enter("registerNode", null, new Object[] { module, newNode }); - nodes.put(newNode,new WeakReference(newNode)); + nodes.put(newNode, new WeakReference(newNode)); - if (trace.isTraceEnabled()) trace.exit("registerNode",nodes.size()); + if (trace.isTraceEnabled()) + trace.exit("registerNode", nodes.size()); } - + /* * Dump methods */ - private Dump (String reason) { - if (trace.isTraceEnabled()) trace.enter("<init>",this,reason); + private Dump(String reason) { + if (trace.isTraceEnabled()) + trace.enter("<init>", this, reason); this.reason = reason; - + openDump(); dumpAspectJProperties(); dumpDumpConfiguration(); - - if (trace.isTraceEnabled()) trace.exit("<init>",this); + + if (trace.isTraceEnabled()) + trace.exit("<init>", this); } public String getFileName() { return fileName; } - - private void dumpDefault () { + + private void dumpDefault() { dumpDefault(savedMessageHolder); } - - private void dumpDefault (IMessageHolder holder) { + + private void dumpDefault(IMessageHolder holder) { dumpSytemProperties(); dumpCommandLine(); dumpFullClasspath(); dumpCompilerMessages(holder); - + dumpNodes(); } @@ -288,79 +297,78 @@ public class Dump { */ IVisitor dumpVisitor = new IVisitor() { - public void visitObject (Object obj) { + public void visitObject(Object obj) { println(formatObj(obj)); } - public void visitList (List list) { + public void visitList(List list) { println(list); } }; Set keys = nodes.keySet(); for (Iterator i = keys.iterator(); i.hasNext();) { Object module = i.next(); -// INode dumpNode = (INode)nodes.get(module); - INode dumpNode = (INode)module; + // INode dumpNode = (INode)nodes.get(module); + INode dumpNode = (INode) module; println("---- " + formatObj(dumpNode) + " ----"); try { - dumpNode.accept(dumpVisitor); - } - catch (Exception ex) { - trace.error(formatObj(dumpNode).toString(),ex); + dumpNode.accept(dumpVisitor); + } catch (Exception ex) { + trace.error(formatObj(dumpNode).toString(), ex); } } } - - private void dumpException (IMessageHolder messageHolder, Throwable th) { + + private void dumpException(IMessageHolder messageHolder, Throwable th) { println("---- Exception Information ---"); println(th); dumpDefault(messageHolder); } - - private void dumpAspectJProperties () { + + private void dumpAspectJProperties() { println("---- AspectJ Properties ---"); println("AspectJ Compiler " + Version.text + " built on " + Version.time_text); } - - private void dumpDumpConfiguration () { + + private void dumpDumpConfiguration() { println("---- Dump Properties ---"); println("Dump file: " + fileName); println("Dump reason: " + reason); println("Dump on exception: " + (exceptionClass != null)); println("Dump at exit condition: " + conditionKind); } - - private void dumpFullClasspath () { + + private void dumpFullClasspath() { println("---- Full Classpath ---"); if (savedFullClasspath != null && savedFullClasspath.size() > 0) { - for (Iterator iter = savedFullClasspath.iterator(); iter.hasNext(); ) { - String fileName = (String)iter.next(); + for (Iterator iter = savedFullClasspath.iterator(); iter.hasNext();) { + String fileName = (String) iter.next(); File file = new File(fileName); println(file); } - } - else { + } else { println(NULL_OR_EMPTY); } } - - private void dumpSytemProperties () { + + private void dumpSytemProperties() { println("---- System Properties ---"); Properties props = System.getProperties(); println(props); } - - private void dumpCommandLine () { + + private void dumpCommandLine() { println("---- Command Line ---"); println(savedCommandLine); } - - private void dumpCompilerMessages (IMessageHolder messageHolder) { + + private void dumpCompilerMessages(IMessageHolder messageHolder) { println("---- Compiler Messages ---"); - if (messageHolder != null) for (Iterator i = messageHolder.getUnmodifiableListView().iterator(); i.hasNext(); ) { - IMessage message = (IMessage)i.next(); - println(message.toString()); - } + if (messageHolder != null) + for (Iterator i = messageHolder.getUnmodifiableListView().iterator(); i.hasNext();) { + IMessage message = (IMessage) i.next(); + println(message.toString()); + } else { println(NULL_OR_EMPTY); } @@ -368,139 +376,136 @@ public class Dump { /* * Dump output - */ - private void openDump () { - if (print != null) return; - + */ + private void openDump() { + if (print != null) + return; + Date now = new Date(); - fileName = FILENAME_PREFIX + "." - + new SimpleDateFormat("yyyyMMdd").format(now) + "." - + new SimpleDateFormat("HHmmss.SSS").format(now) + "." - + FILENAME_SUFFIX; + fileName = FILENAME_PREFIX + "." + new SimpleDateFormat("yyyyMMdd").format(now) + "." + + new SimpleDateFormat("HHmmss.SSS").format(now) + "." + FILENAME_SUFFIX; try { - File file = new File(directory,fileName); - print = new PrintStream(new FileOutputStream(file),true); + File file = new File(directory, fileName); + print = new PrintStream(new FileOutputStream(file), true); trace.info("Dumping to " + file.getAbsolutePath()); - } - catch (Exception ex) { + } catch (Exception ex) { print = System.err; trace.info("Dumping to stderr"); fileName = UNKNOWN_FILENAME; } - + lastDumpFileName = fileName; } - - public void close () { + + public void close() { print.close(); } - - private void println (Object obj) { + + private void println(Object obj) { print.println(obj); } - - private void println (Object[] array) { + + private void println(Object[] array) { if (array == null) { println(NULL_OR_EMPTY); return; } - + for (int i = 0; i < array.length; i++) { print.println(array[i]); } } - - private void println (Properties props) { + + private void println(Properties props) { Iterator iter = props.keySet().iterator(); while (iter.hasNext()) { - String key = (String)iter.next(); + String key = (String) iter.next(); String value = props.getProperty(key); print.println(key + "=" + value); } } - - private void println (Throwable th) { + + private void println(Throwable th) { th.printStackTrace(print); } - - private void println (File file) { + + private void println(File file) { print.print(file.getAbsolutePath()); if (!file.exists()) { - println("(missing)"); - } - else if (file.isDirectory()) { + println("(missing)"); + } else if (file.isDirectory()) { int count = file.listFiles().length; - println("(" + count + " entries)"); - } - else { - println("(" + file.length() + " bytes)"); + println("(" + count + " entries)"); + } else { + println("(" + file.length() + " bytes)"); } } - - private void println (List list) { - if (list == null || list.isEmpty()) println(NULL_OR_EMPTY); - else for (Iterator i = list.iterator(); i.hasNext();) { - Object o = i.next(); - if (o instanceof Exception) { - println((Exception)o); - } else { - println(o.toString()); - } - } + + private void println(List list) { + if (list == null || list.isEmpty()) + println(NULL_OR_EMPTY); + else + for (Iterator i = list.iterator(); i.hasNext();) { + Object o = i.next(); + if (o instanceof Exception) { + println((Exception) o); + } else { + println(o.toString()); + } + } } - + private static Object formatObj(Object obj) { - + /* These classes have a safe implementation of toString() */ - if (obj == null - || obj instanceof String - || obj instanceof Number - || obj instanceof Boolean - || obj instanceof Exception - || obj instanceof Character - || obj instanceof Class - || obj instanceof File - || obj instanceof StringBuffer - || obj instanceof URL - ) return obj; - else try { - - /* Classes can provide an alternative implementation of toString() */ - if (obj instanceof Traceable) { - Traceable t = (Traceable)obj; - return t.toTraceString(); + if (obj == null || obj instanceof String || obj instanceof Number || obj instanceof Boolean || obj instanceof Exception + || obj instanceof Character || obj instanceof Class || obj instanceof File || obj instanceof StringBuffer + || obj instanceof URL) + return obj; + else + try { + + /* Classes can provide an alternative implementation of toString() */ + if (obj instanceof Traceable) { + Traceable t = (Traceable) obj; + return t.toTraceString(); + } + + /* Use classname@hashcode */ + else + return obj.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(obj)); + + /* Object.hashCode() can be override and may thow an exception */ + } catch (Exception ex) { + return obj.getClass().getName() + "@FFFFFFFF"; } - - /* Use classname@hashcode */ - else return obj.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(obj)); - - /* Object.hashCode() can be override and may thow an exception */ - } catch (Exception ex) { - return obj.getClass().getName() + "@FFFFFFFF"; - } } - + static { - String exceptionName = System.getProperty("org.aspectj.weaver.Dump.exception","true"); - if (!exceptionName.equals("false")) setDumpOnException(true); - + String exceptionName = System.getProperty("org.aspectj.weaver.Dump.exception", "true"); + if (!exceptionName.equals("false")) + setDumpOnException(true); + String conditionName = System.getProperty(DUMP_CONDITION_PROPERTY); - if (conditionName != null) setDumpOnExit(conditionName); - + if (conditionName != null) + setDumpOnExit(conditionName); + String directoryName = System.getProperty(DUMP_DIRECTORY_PROPERTY); - if (directoryName != null) setDumpDirectory(directoryName); + if (directoryName != null) + setDumpDirectory(directoryName); } public interface INode { - - public void accept (IVisitor visior); - + + public void accept(IVisitor visior); + } public interface IVisitor { - - public void visitObject (Object s); - public void visitList (List list); + + public void visitObject(Object s); + + public void visitList(List list); } } |