]> source.dussan.org Git - aspectj.git/commitdiff
Polish
authorAndy Clement <aclement@pivotal.io>
Wed, 22 Jul 2020 21:09:06 +0000 (14:09 -0700)
committerAndy Clement <aclement@pivotal.io>
Wed, 22 Jul 2020 21:09:06 +0000 (14:09 -0700)
org.aspectj.ajdt.core/src/main/java/org/aspectj/ajdt/internal/compiler/lookup/EclipseAnnotationConvertor.java
org.aspectj.ajdt.core/src/test/java/AroundAMain.java
org.aspectj.matcher/src/main/java/org/aspectj/weaver/SimpleAnnotationValue.java
org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/ExactTypePattern.java
org.aspectj.matcher/src/main/java/org/aspectj/weaver/tools/AbstractTrace.java
runtime/src/main/java/org/aspectj/runtime/internal/Conversions.java
testing/src/test/java/org/aspectj/testing/util/RunUtils.java

index 47c56f93903f1644107d2b7f5b1cfae0a09936e3..a520124da69b5c336ac048729d8c2606b3c1f62b 100644 (file)
@@ -45,7 +45,7 @@ import org.aspectj.weaver.World;
 public class EclipseAnnotationConvertor {
        /**
         * Convert one eclipse annotation into an AnnotationX object containing an AnnotationAJ object.
-        * 
+        *
         * This code and the helper methods used by it will go *BANG* if they encounter anything not currently supported - this is safer
         * than limping along with a malformed annotation. When the *BANG* is encountered the bug reporter should indicate the kind of
         * annotation they were working with and this code can be enhanced to support it.
@@ -80,7 +80,7 @@ public class EclipseAnnotationConvertor {
                                                // is this just a marker annotation?
                                                throw new MissingImplementationException(
                                                                "Please raise an AspectJ bug.  AspectJ does not know how to convert this annotation [" + annotation
-                                                                               + "]");
+                                                               + "]");
                                        } else {
                                                AnnotationValue av = generateElementValue(memberValuePair.value, methodBinding.returnType);
                                                AnnotationNameValuePair anvp = new AnnotationNameValuePair(new String(memberValuePair.name), av);
@@ -118,7 +118,7 @@ public class EclipseAnnotationConvertor {
                if (defaultValueBinding == null) {
                        throw new MissingImplementationException(
                                        "Please raise an AspectJ bug.  AspectJ does not know how to convert this annotation value [" + defaultValue
-                                                       + "]");
+                                       + "]");
                } else {
                        if (memberValuePairReturnType.isArrayType() && !defaultValueBinding.isArrayType()) {
                                if (constant != null && constant != Constant.NotAConstant) {
@@ -159,7 +159,7 @@ public class EclipseAnnotationConvertor {
                                return new SimpleAnnotationValue(ElementValue.PRIMITIVE_INT, new Integer(iConstant.intValue()));
                        } else if (c instanceof BooleanConstant) {
                                BooleanConstant iConstant = (BooleanConstant) c;
-                               return new SimpleAnnotationValue(ElementValue.PRIMITIVE_BOOLEAN, new Boolean(iConstant.booleanValue()));
+                               return new SimpleAnnotationValue(ElementValue.PRIMITIVE_BOOLEAN, iConstant.booleanValue());
                        } else if (c instanceof StringConstant) {
                                StringConstant sConstant = (StringConstant) c;
                                return new SimpleAnnotationValue(ElementValue.STRING, sConstant.stringValue());
@@ -191,11 +191,11 @@ public class EclipseAnnotationConvertor {
                                }
                                throw new MissingImplementationException(
                                                "Please raise an AspectJ bug.  AspectJ does not know how to convert this annotation value [" + defaultValue
-                                                               + "]");
+                                               + "]");
                        } else if (defaultValueBinding.isAnnotationType()) {
                                throw new MissingImplementationException(
                                                "Please raise an AspectJ bug.  AspectJ does not know how to convert this annotation value [" + defaultValue
-                                                               + "]");
+                                               + "]");
                                // contents[contentsOffset++] = (byte) '@';
                                // generateAnnotation((Annotation) defaultValue,
                                // attributeOffset);
@@ -223,16 +223,16 @@ public class EclipseAnnotationConvertor {
                                if (defaultValue instanceof ClassLiteralAccess) {
                                        ClassLiteralAccess cla = (ClassLiteralAccess)defaultValue;
                                        ClassAnnotationValue cav = new ClassAnnotationValue(new String(cla.targetType.signature()));
-                                       return cav;                                     
+                                       return cav;
                                }
                                throw new MissingImplementationException(
                                                "Please raise an AspectJ bug.  AspectJ does not know how to convert this annotation value [" + defaultValue
-                                                               + "]");
+                                               + "]");
                        }
                } else {
                        throw new MissingImplementationException(
                                        "Please raise an AspectJ bug.  AspectJ does not know how to convert this annotation value [" + defaultValue
-                                                       + "]");
+                                       + "]");
                        // contentsOffset = attributeOffset;
                }
        }
index 94f2be84fd6ace544eb85ccfa456b9143e7c80b2..d9a2929d0015972fb93a35d98909d46576f7f540 100644 (file)
@@ -1,45 +1,44 @@
 /* *******************************************************************
  * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     PARC     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     PARC     initial implementation
  * ******************************************************************/
 
-import junit.framework.TestCase;
-
 import org.aspectj.runtime.internal.AroundClosure;
 import org.aspectj.util.Reflection;
 
 public class AroundAMain {//extends TestCase {
 
        public AroundAMain(String name) {
-//             super(name);
+               //              super(name);
        }
 
 
        public static void main(String[] args) throws ClassNotFoundException {
                AroundClosure closure = new AroundClosure() {
+                       @Override
                        public Object run(Object[] args) throws Throwable {
-//                             System.out.println("run with: " + Arrays.asList(args));
+                               //                              System.out.println("run with: " + Arrays.asList(args));
                                return new Integer(10);
                        }
                };
-               
+
                Object instance = Reflection.getStaticField(Class.forName("AroundA"),
-                       "ajc$perSingletonInstance");
+                               "ajc$perSingletonInstance");
 
                Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$1$73ebb943", // was $AroundA$46
-                                       new Integer(10), new Boolean(true), closure);
+                               new Integer(10), true, closure);
 
                Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$2$a758212d",  // Was $AroundA$c5
-                                       "hello there", closure);
+                               "hello there", closure);
                Reflection.invoke(Class.forName("AroundA"), instance, "ajc$around$AroundA$3$a758212d",  // Was $AroundA$150
-                                       new String[1], closure);
+                               new String[1], closure);
 
        }
 }
index 312f7726b782b0033406a7e5a96f54d9da12de49..27af4e8f5dddc19fb88700c2a2337a36d2143a05 100644 (file)
@@ -1,13 +1,13 @@
 /* *******************************************************************
  * Copyright (c) 2006 Contributors
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Andy Clement IBM     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Andy Clement IBM     initial implementation
  * ******************************************************************/
 package org.aspectj.weaver;
 
@@ -78,6 +78,7 @@ public class SimpleAnnotationValue extends AnnotationValue {
                theInt = i;
        }
 
+       @Override
        public String stringify() {
                switch (valueKind) {
                case 'B': // byte
@@ -95,7 +96,7 @@ public class SimpleAnnotationValue extends AnnotationValue {
                case 'S': // short
                        return Short.toString(theShort);
                case 'Z': // boolean
-                       return new Boolean(theBoolean).toString();
+                       return Boolean.valueOf(theBoolean).toString();
                case 's': // String
                        return theString;
                default:
@@ -103,6 +104,7 @@ public class SimpleAnnotationValue extends AnnotationValue {
                }
        }
 
+       @Override
        public String toString() {
                return stringify();
        }
index 68353422fb1b99977cac621eba927fee06a32beb..d54ad29abffa882ea2ae837ecaed978a5b8c7c0e 100644 (file)
@@ -1,13 +1,13 @@
 /* *******************************************************************
  * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     PARC     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     PARC     initial implementation
  * ******************************************************************/
 
 package org.aspectj.weaver.patterns;
@@ -97,7 +97,7 @@ public class ExactTypePattern extends TypePattern {
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.aspectj.weaver.patterns.TypePattern#couldEverMatchSameTypesAs(org.aspectj.weaver.patterns.TypePattern)
         */
        @Override
@@ -234,8 +234,8 @@ public class ExactTypePattern extends TypePattern {
        public int hashCode() {
                int result = 17;
                result = 37 * result + type.hashCode();
-               result = 37 * result + new Boolean(includeSubtypes).hashCode();
-               result = 37 * result + new Boolean(isVarArgs).hashCode();
+               result = 37 * result + Boolean.valueOf(includeSubtypes).hashCode();
+               result = 37 * result + Boolean.valueOf(isVarArgs).hashCode();
                result = 37 * result + typeParameters.hashCode();
                result = 37 * result + annotationPattern.hashCode();
                return result;
@@ -322,7 +322,7 @@ public class ExactTypePattern extends TypePattern {
                        TypeVariableReference t = (TypeVariableReference) type;
                        String key = t.getTypeVariable().getName();
                        if (typeVariableMap.containsKey(key)) {
-                               newType = (UnresolvedType) typeVariableMap.get(key);
+                               newType = typeVariableMap.get(key);
                        }
                } else if (type.isParameterizedType()) {
                        newType = w.resolve(type).parameterize(typeVariableMap);
index 52217f880dcbcf06eacbeef3da09f94ff8805575..252a164fe290cf9a1172222049d9c9d0ff32b007 100644 (file)
@@ -1,10 +1,10 @@
 /*******************************************************************************
  * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
+ * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *     Matthew Webster - initial implementation
  *******************************************************************************/
@@ -27,17 +27,21 @@ public abstract class AbstractTrace implements Trace {
        protected Class<?> tracedClass;
 
        private static SimpleDateFormat timeFormat;
-       
+
        protected AbstractTrace (Class clazz) {
                this.tracedClass = clazz;
        }
-       
+
+       @Override
        public abstract void enter (String methodName, Object thiz, Object[] args);
-       
+
+       @Override
        public abstract void enter(String methodName, Object thiz);
 
+       @Override
        public abstract void exit(String methodName, Object ret);
 
+       @Override
        public abstract void exit(String methodName, Throwable th);
 
        /*
@@ -47,38 +51,46 @@ public abstract class AbstractTrace implements Trace {
                enter(methodName,null,null);
        }
 
+       @Override
        public void enter (String methodName, Object thiz, Object arg) {
                enter(methodName,thiz,new Object[] { arg });
        }
 
+       @Override
        public void enter (String methodName, Object thiz, boolean z) {
-               enter(methodName,thiz,new Boolean(z));
+               enter(methodName,thiz,Boolean.valueOf(z));
        }
 
+       @Override
        public void exit (String methodName, boolean b) {
-               exit(methodName,new Boolean(b));
+               exit(methodName,Boolean.valueOf(b));
        }
 
+       @Override
        public void exit (String methodName, int i) {
                exit(methodName,new Integer(i));
        }
 
+       @Override
        public void event (String methodName, Object thiz, Object arg) {
                event(methodName,thiz,new Object[] { arg });
        }
 
+       @Override
        public void warn(String message) {
                warn(message,null);
        }
 
+       @Override
        public void error(String message) {
                error(message,null);
        }
 
+       @Override
        public void fatal (String message) {
                fatal(message,null);
        }
-       
+
        /*
         * Formatting
         */
@@ -94,7 +106,7 @@ public abstract class AbstractTrace implements Trace {
                if (args != null) message.append(" ").append(formatArgs(args));
                return message.toString();
        }
-       
+
        /**
         * @param className full dotted class name
         * @return short version of class name with package collapse to initials
@@ -102,7 +114,7 @@ public abstract class AbstractTrace implements Trace {
        private String formatClassName(String className) {
                return packagePrefixPattern.matcher(className).replaceAll("$1.");
        }
-       
+
        protected String formatMessage(String kind, String text, Throwable th) {
                StringBuffer message = new StringBuffer();
                Date now = new Date();
@@ -113,37 +125,37 @@ public abstract class AbstractTrace implements Trace {
                if (th != null) message.append(" ").append(formatObj(th));
                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,
         * NullPointerExceptions or highly verbose results.
-        *  
+        *
         * @param obj parameter to be formatted
         * @return the formatted parameter
         */
        protected 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
-                           || obj instanceof Kind
-                   ) return obj;
+                               || obj instanceof Number
+                               || obj instanceof Boolean
+                               || obj instanceof Exception
+                               || obj instanceof Character
+                               || obj instanceof Class
+                               || obj instanceof File
+                               || obj instanceof StringBuffer
+                               || obj instanceof URL
+                               || obj instanceof Kind
+                               ) return obj;
                else if (obj.getClass().isArray()) {
                        return formatArray(obj);
                }
@@ -151,52 +163,52 @@ public abstract class AbstractTrace implements Trace {
                        return formatCollection((Collection)obj);
                }
                else try {
-                       
+
                        // Classes can provide an alternative implementation of toString()
                        if (obj instanceof Traceable) {
                                return ((Traceable)obj).toTraceString();
                        }
-                       
+
                        // classname@hashcode
                        else return formatClassName(obj.getClass().getName()) + "@" + Integer.toHexString(System.identityHashCode(obj));
-               
-               /* Object.hashCode() can be override and may thow an exception */       
+
+                       /* Object.hashCode() can be override and may thow an exception */
                } catch (Exception ex) {
                        return obj.getClass().getName() + "@FFFFFFFF";
                }
        }
-       
+
        protected String formatArray(Object obj) {
-               return obj.getClass().getComponentType().getName() + "[" + Array.getLength(obj) + "]"; 
+               return obj.getClass().getComponentType().getName() + "[" + Array.getLength(obj) + "]";
        }
-       
+
        protected String formatCollection(Collection<?> c) {
-               return c.getClass().getName() + "(" + c.size() + ")"; 
+               return c.getClass().getName() + "(" + c.size() + ")";
        }
 
-       /** 
+       /**
         * Format arguments into a comma separated list
-        * 
+        *
         * @param names array of argument names
         * @param args array of arguments
         * @return the formated list
         */
        protected String formatArgs(Object[] args) {
                StringBuffer sb = new StringBuffer();
-               
+
                for (int i = 0; i < args.length; i++) {
                        sb.append(formatObj(args[i]));
                        if (i < args.length-1) sb.append(", ");
                }
-               
+
                return sb.toString();
        }
-       
+
        protected Object[] formatObjects(Object[] args) {
                for (int i = 0; i < args.length; i++) {
                        args[i] = formatObj(args[i]);
                }
-               
+
                return args;
        }
 }
\ No newline at end of file
index 0632ae8f832a6052eb53620db5c3e77f2078079a..13e8d9eddf24117b08d6605c3e20c2cd1fb1ac20 100644 (file)
@@ -1,14 +1,14 @@
 /* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
+ * Copyright (c) 1999-2001 Xerox Corporation,
  *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Xerox/PARC     initial implementation
  * ******************************************************************/
 
 
@@ -18,34 +18,34 @@ public final class Conversions {
        // Can't make instances of me
        private Conversions() {}
 
-    // we might want to keep a cache of small integers around
+       // we might want to keep a cache of small integers around
        public static Object intObject(int i) {
-        return new Integer(i);
-    }
+               return new Integer(i);
+       }
        public static Object shortObject(short i) {
-        return new Short(i);
-    }
+               return new Short(i);
+       }
        public static Object byteObject(byte i) {
-        return new Byte(i);
-    }
+               return new Byte(i);
+       }
        public static Object charObject(char i) {
-        return new Character(i);
-    }
+               return new Character(i);
+       }
        public static Object longObject(long i) {
-        return new Long(i);
-    }
+               return new Long(i);
+       }
        public static Object floatObject(float i) {
-        return new Float(i);
-    }
+               return new Float(i);
+       }
        public static Object doubleObject(double i) {
-        return new Double(i);
-    }
+               return new Double(i);
+       }
        public static Object booleanObject(boolean i) {
-        return new Boolean(i);
-    }
+               return i;
+       }
        public static Object voidObject() {
-        return null;
-    }
+               return null;
+       }
 
 
        public static int intValue(Object o) {
@@ -55,7 +55,7 @@ public final class Conversions {
                        return ((Number)o).intValue();
                } else {
                        throw new ClassCastException(o.getClass().getName() +
-                                                                                " can not be converted to int");
+                                       " can not be converted to int");
                }
        }
        public static long longValue(Object o) {
@@ -65,7 +65,7 @@ public final class Conversions {
                        return ((Number)o).longValue();
                } else {
                        throw new ClassCastException(o.getClass().getName() +
-                                                                                " can not be converted to long");
+                                       " can not be converted to long");
                }
        }
        public static float floatValue(Object o) {
@@ -75,7 +75,7 @@ public final class Conversions {
                        return ((Number)o).floatValue();
                } else {
                        throw new ClassCastException(o.getClass().getName() +
-                                                                                " can not be converted to float");
+                                       " can not be converted to float");
                }
        }
        public static double doubleValue(Object o) {
@@ -85,7 +85,7 @@ public final class Conversions {
                        return ((Number)o).doubleValue();
                } else {
                        throw new ClassCastException(o.getClass().getName() +
-                                                                                " can not be converted to double");
+                                       " can not be converted to double");
                }
        }
        public static byte byteValue(Object o) {
@@ -95,7 +95,7 @@ public final class Conversions {
                        return ((Number)o).byteValue();
                } else {
                        throw new ClassCastException(o.getClass().getName() +
-                                                                                " can not be converted to byte");
+                                       " can not be converted to byte");
                }
        }
        public static short shortValue(Object o) {
@@ -105,7 +105,7 @@ public final class Conversions {
                        return ((Number)o).shortValue();
                } else {
                        throw new ClassCastException(o.getClass().getName() +
-                                                                                " can not be converted to short");
+                                       " can not be converted to short");
                }
        }
        public static char charValue(Object o) {
@@ -115,7 +115,7 @@ public final class Conversions {
                        return ((Character)o).charValue();
                } else {
                        throw new ClassCastException(o.getClass().getName() +
-                                                                                " can not be converted to char");
+                                       " can not be converted to char");
                }
        }
        public static boolean booleanValue(Object o) {
@@ -125,10 +125,10 @@ public final class Conversions {
                        return ((Boolean)o).booleanValue();
                } else {
                        throw new ClassCastException(o.getClass().getName() +
-                                                                                " can not be converted to boolean");
+                                       " can not be converted to boolean");
                }
        }
-       
+
        // identity function for now.  This is not typed to "void" because we happen
        // to know that in Java, any void context (i.e., {@link ExprStmt})
        // can also handle a return value.
index 86c29a4a2dadb3efd0224db87994908a4aa4aa3a..df889f2225d93a2d5116c3680fef8f2d23cb0f44 100644 (file)
@@ -1,20 +1,19 @@
 /* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
+ * Copyright (c) 1999-2001 Xerox Corporation,
  *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Xerox/PARC     initial implementation
  * ******************************************************************/
 
 package org.aspectj.testing.util;
 
 import java.io.PrintStream;
-import java.util.Iterator;
 
 import org.aspectj.bridge.IMessage;
 import org.aspectj.bridge.IMessageHandler;
@@ -28,341 +27,351 @@ import org.aspectj.testing.run.RunValidator;
 import org.aspectj.util.LangUtil;
 
 /**
- * 
+ *
  */
 public class RunUtils {
 
-    /** enable verbose for this an any related AbstractRunSpec children */
-    public static void enableVerbose(AbstractRunSpec spec) { // instanceof hack
-        LangUtil.throwIaxIfNull(spec, "spec");
-        spec.runtime.setVerbose(true);
-        for (Iterator iter = spec.getChildren().iterator(); iter.hasNext();) {
-                       IRunSpec child = (IRunSpec) iter.next();
+       /** enable verbose for this an any related AbstractRunSpec children */
+       public static void enableVerbose(AbstractRunSpec spec) { // instanceof hack
+               LangUtil.throwIaxIfNull(spec, "spec");
+               spec.runtime.setVerbose(true);
+               for (Object element : spec.getChildren()) {
+                       IRunSpec child = (IRunSpec) element;
                        if (child instanceof AbstractRunSpec) {
-                enableVerbose((AbstractRunSpec) child);
-            }
+                               enableVerbose((AbstractRunSpec) child);
+                       }
+               }
+       }
+
+       /**
+        * Calculate failures for this status.
+        * If the input status has no children and failed, the result is 1.
+        * If it has children and recurse is false, then
+        * the result is the number of children whose status has failed
+        * (so a failed status with some passing and no failing children
+        *  will return 0).
+        * If it has children and recurse is true,
+        * then return the number of leaf failures in the tree,
+        * ignoring (roll-up) node failures.
+        * @return number of failures in children of this status
+        */
+       public static int numFailures(IRunStatus status, boolean recurse) {
+               int numFails = 0;
+               IRunStatus[] children = status.getChildren();
+               int numChildren = (null == children? 0 : children.length);
+               if (0 == numChildren) {
+                       if (!RunValidator.NORMAL.runPassed(status)) {
+                               return 1;
+                       }
+               } else {
+                       //            int i = 0;
+                       for (IRunStatus element : children) {
+                               if (recurse) {
+                                       numFails += numFailures(element, recurse);
+                               } else {
+                                       if (!RunValidator.NORMAL.runPassed(element)) {
+                                               numFails++;
+                                       }
+                               }
+                       }
+               }
+               return numFails;
+       }
+
+       // ------------------------ printing status
+       public static void printShort(PrintStream out, IRunStatus status) {
+               if ((null == out) || (null == status)) {
+                       return;
+               }
+               printShort(out, "", status);
+       }
+
+       public static void printShort(PrintStream out, String prefix, IRunStatus status) {
+               int numFails = numFailures(status, true);
+               String fails = (0 == numFails ? "" : " - " + numFails + " failures");
+               out.println(prefix + toShortString(status) + fails);
+               IRunStatus[] children = status.getChildren();
+               int numChildren = (null == children? 0 : children.length);
+               if (0 < numChildren) {
+                       int i = 0;
+                       for (IRunStatus element : children) {
+                               printShort(out, prefix + "[" + LangUtil.toSizedString(i++, 3) + "]: ", element);
+                               if (!RunValidator.NORMAL.runPassed(element)) {
+                                       numFails++;
+                               }
+                       }
+               }
+       }
+
+       public static void print(PrintStream out, IRunStatus status) {
+               if ((null == out) || (null == status)) {
+                       return;
+               }
+               print(out, "", status);
+       }
+
+       public static void print(PrintStream out, String prefix, IRunStatus status) {
+               print(out, prefix, status, MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ALL);
+       }
+
+       public static void print(PrintStream out, String prefix, IRunStatus status,
+                       IMessageRenderer renderer, IMessageHandler selector) {
+               String label = status.getIdentifier()
+                               + (status.runResult() ? "PASS" : "FAIL");
+               out.println(prefix + label);
+               out.println(prefix + debugString(status));
+               IMessageHolder messageHolder = status;
+               if ((null != messageHolder) && (0 < messageHolder.numMessages(null, true))) {
+                       MessageUtil.print(out, messageHolder, prefix, renderer, selector);
+               }
+               Throwable thrown = status.getThrown();
+               if (null != thrown) {
+                       out.println(prefix + "--- printing stack trace for thrown");
+                       thrown.printStackTrace(out);
+               }
+               IRunStatus[] children = status.getChildren();
+               int numChildren = (null == children? 0 : children.length);
+               int numFails = 0;
+               if (0 < numChildren) {
+                       out.println(prefix + "--- printing children [" + numChildren + "]");
+                       int i = 0;
+                       for (IRunStatus element : children) {
+                               print(out, prefix + "[" + LangUtil.toSizedString(i++, 3) + "]: ", element);
+                               if (!RunValidator.NORMAL.runPassed(element)) {
+                                       numFails++;
+                               }
+                       }
+               }
+               if (0 < numFails) {
+                       label = numFails + " fails " + label;
+               }
+               out.println("");
+       }
+
+
+       public static String debugString(IRunStatus status) {
+               if (null == status) {
+                       return "null";
                }
-    }
-    
-    /** 
-     * Calculate failures for this status.
-     * If the input status has no children and failed, the result is 1.
-     * If it has children and recurse is false, then
-     * the result is the number of children whose status has failed
-     * (so a failed status with some passing and no failing children
-     *  will return 0).
-     * If it has children and recurse is true,
-     * then return the number of leaf failures in the tree,
-     * ignoring (roll-up) node failures.
-     * @return number of failures in children of this status 
-     */
-    public static int numFailures(IRunStatus status, boolean recurse) {
-        int numFails = 0;
-        IRunStatus[] children = status.getChildren();
-        int numChildren = (null == children? 0 : children.length);
-        if (0 == numChildren) {
-            if (!RunValidator.NORMAL.runPassed(status)) {
-                return 1;
-            }
-        } else { 
-//            int i = 0;
-            for (int j = 0; j < children.length; j++) {
-                if (recurse) {
-                    numFails += numFailures(children[j], recurse);
-                } else {
-                    if (!RunValidator.NORMAL.runPassed(children[j])) {
-                        numFails++;
-                    }
-                }
-            }
-        }
-        return numFails;
-    }
-    
-    // ------------------------ printing status
-    public static void printShort(PrintStream out, IRunStatus status) {
-        if ((null == out) || (null == status)) {
-            return;
-        }
-        printShort(out, "", status);
-    }
+               final String[] LABELS =
+                               new String[] {
+                                               "runResult",
+                                               "id",
+                                               "result",
+                                               "numChildren",
+                                               "completed",
+                                               //"parent",
+                                               "abort",
+                                               "started",
+                                               "thrown",
+               "messages" };
+               String runResult = status.runResult() ? "PASS" : "FAIL";
+               Throwable thrown = status.getThrown();
+               String thrownString = LangUtil.unqualifiedClassName(thrown);
+               IRunStatus[] children = status.getChildren();
+               String numChildren = (null == children? "0" : ""+children.length);
+               String numMessages = ""+status.numMessages(null, IMessageHolder.EQUAL);
+               Object[] values =
+                               new Object[] {
+                                               runResult,
+                                               status.getIdentifier(),
+                                               status.getResult(),
+                                               numChildren,
+                                               status.isCompleted(),
+                                               //status.getParent(),               // costly if parent printing us
+                                               status.getAbortRequest(),
+                                               status.started(),
+                                               thrownString,
+                                               numMessages };
+               return org.aspectj.testing.util.LangUtil.debugStr(status.getClass(), LABELS, values);
+       }
 
-    public static void printShort(PrintStream out, String prefix, IRunStatus status) {
-        int numFails = numFailures(status, true);
-        String fails = (0 == numFails ? "" : " - " + numFails + " failures");
-        out.println(prefix + toShortString(status) + fails);
-        IRunStatus[] children = status.getChildren();
-        int numChildren = (null == children? 0 : children.length);
-        if (0 < numChildren) {
-            int i = 0;
-            for (int j = 0; j < children.length; j++) {
-                printShort(out, prefix + "[" + LangUtil.toSizedString(i++, 3) + "]: ", children[j]);
-                if (!RunValidator.NORMAL.runPassed(children[j])) {
-                    numFails++;
-                }
-            }
-        }
-    }
+       public static String toShortString(IRunStatus status) {
+               if (null == status) {
+                       return "null";
+               }
+               String runResult = status.runResult() ? " PASS: " : " FAIL: ";
+               return (runResult + status.getIdentifier());
+       }
 
-    public static void print(PrintStream out, IRunStatus status) {
-        if ((null == out) || (null == status)) {
-            return;
-        }
-        print(out, "", status);
-    }
-    
-    public static void print(PrintStream out, String prefix, IRunStatus status) {
-        print(out, prefix, status, MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ALL);
-    }     
+       /** renderer for IRunStatus */
+       public static interface IRunStatusPrinter {
+               void printRunStatus(PrintStream out, IRunStatus status);
+       }
 
-    public static void print(PrintStream out, String prefix, IRunStatus status,
-        IMessageRenderer renderer, IMessageHandler selector) {
-        String label = status.getIdentifier()         
-                    + (status.runResult() ? "PASS" : "FAIL");
-        out.println(prefix + label);
-        out.println(prefix + debugString(status));
-        IMessageHolder messageHolder = status;
-        if ((null != messageHolder) && (0 < messageHolder.numMessages(null, true))) {
-            MessageUtil.print(out, messageHolder, prefix, renderer, selector);
-        }   
-        Throwable thrown = status.getThrown();
-        if (null != thrown) {
-            out.println(prefix + "--- printing stack trace for thrown");
-            thrown.printStackTrace(out);
-        } 
-        IRunStatus[] children = status.getChildren();
-        int numChildren = (null == children? 0 : children.length);
-        int numFails = 0;
-        if (0 < numChildren) {
-            out.println(prefix + "--- printing children [" + numChildren + "]");
-            int i = 0;
-            for (int j = 0; j < children.length; j++) {
-                print(out, prefix + "[" + LangUtil.toSizedString(i++, 3) + "]: ", children[j]);
-                if (!RunValidator.NORMAL.runPassed(children[j])) {
-                    numFails++;
-                }
-            }
-        }
-        if (0 < numFails) {
-            label = numFails + " fails " + label;
-        }
-        out.println("");
-    }
+       public static final IRunStatusPrinter VERBOSE_PRINTER = new IRunStatusPrinter() {
+               @Override
+               public String toString() { return "VERBOSE_PRINTER"; }
+               /** Render IRunStatus produced by running an AjcTest */
+               @Override
+               public void printRunStatus(PrintStream out, IRunStatus status) {
+                       printRunStatus(out, status, "");
+               }
+               private void printRunStatus(PrintStream out, IRunStatus status, String prefix) {
+                       LangUtil.throwIaxIfNull(out, "out");
+                       LangUtil.throwIaxIfNull(status, "status");
+                       String label = (status.runResult() ? " PASS: " : " FAIL: ")
+                                       + status.getIdentifier();
+                       out.println(prefix + "------------ " + label);
+                       out.println(prefix + "--- result: " + status.getResult());
+                       if (0 < status.numMessages(null, true)) {
+                               out.println(prefix + "--- messages ");
+                               MessageUtil.print(out, status, prefix, MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ALL);
+                       }
+                       Throwable thrown = status.getThrown();
+                       if (null != thrown) {
+                               out.println(prefix + "--- thrown");
+                               thrown.printStackTrace(out);
+                       }
+                       IRunStatus[] children = status.getChildren();
+                       for (int i = 0; i < children.length; i++) {
+                               String number = "[" + LangUtil.toSizedString(i,3) + "] ";
+                               printRunStatus(out, children[i], prefix + number);
+                       }
+               }
+       };
 
-   
-    public static String debugString(IRunStatus status) {
-        if (null == status) {
-            return "null";
-        }
-        final String[] LABELS =
-            new String[] {
-                "runResult",
-                "id",
-                "result",
-                "numChildren",
-                "completed",
-                //"parent",
-                "abort",
-                "started",
-                "thrown",
-                "messages" };
-        String runResult = status.runResult() ? "PASS" : "FAIL";
-        Throwable thrown = status.getThrown();
-        String thrownString = LangUtil.unqualifiedClassName(thrown);
-        IRunStatus[] children = status.getChildren();
-        String numChildren = (null == children? "0" : ""+children.length);
-        String numMessages = ""+status.numMessages(null, IMessageHolder.EQUAL);
-        Object[] values =
-            new Object[] {
-                runResult,
-                status.getIdentifier(),
-                status.getResult(),
-                numChildren,
-                new Boolean(status.isCompleted()),
-                //status.getParent(),               // costly if parent printing us
-                status.getAbortRequest(),
-                new Boolean(status.started()),
-                thrownString,
-                numMessages };
-        return org.aspectj.testing.util.LangUtil.debugStr(status.getClass(), LABELS, values);
-    }
+       /** print only status and fail/abort messages */
+       public static final IRunStatusPrinter TERSE_PRINTER = new IRunStatusPrinter() {
+               @Override
+               public String toString() { return "TERSE_PRINTER"; }
 
-    public static String toShortString(IRunStatus status) {
-        if (null == status) {
-            return "null";
-        }
-        String runResult = status.runResult() ? " PASS: " : " FAIL: ";
-        return (runResult + status.getIdentifier());
-    }
-    
-    /** renderer for IRunStatus */
-    public static interface IRunStatusPrinter {
-        void printRunStatus(PrintStream out, IRunStatus status);
-    }
-    
-    public static final IRunStatusPrinter VERBOSE_PRINTER = new IRunStatusPrinter() {
-        public String toString() { return "VERBOSE_PRINTER"; }
-        /** Render IRunStatus produced by running an AjcTest */
-        public void printRunStatus(PrintStream out, IRunStatus status) {
-            printRunStatus(out, status, "");
-        }
-        private void printRunStatus(PrintStream out, IRunStatus status, String prefix) {
-            LangUtil.throwIaxIfNull(out, "out");
-            LangUtil.throwIaxIfNull(status, "status");
-            String label = (status.runResult() ? " PASS: " : " FAIL: ") 
-                + status.getIdentifier();       
-            out.println(prefix + "------------ " + label);
-            out.println(prefix + "--- result: " + status.getResult());
-            if (0 < status.numMessages(null, true)) {
-                out.println(prefix + "--- messages ");
-                MessageUtil.print(out, status, prefix, MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ALL);
-            }
-            Throwable thrown = status.getThrown();
-            if (null != thrown) {
-                out.println(prefix + "--- thrown");
-                thrown.printStackTrace(out);
-            } 
-            IRunStatus[] children = status.getChildren();
-            for (int i = 0; i < children.length; i++) {
-                String number = "[" + LangUtil.toSizedString(i,3) + "] ";
-                printRunStatus(out, children[i], prefix + number);
+               /** print only status and fail messages */
+               @Override
+               public void printRunStatus(PrintStream out, IRunStatus status) {
+                       printRunStatus(out, status, "");
+               }
+               private void printRunStatus(PrintStream out, IRunStatus status, String prefix) {
+                       LangUtil.throwIaxIfNull(out, "out");
+                       LangUtil.throwIaxIfNull(status, "status");
+                       String label = (status.runResult() ? "PASS: " : "FAIL: ")
+                                       + status.getIdentifier();
+                       out.println(prefix + label);
+                       Object result = status.getResult();
+                       if ((null != result) && (IRunStatus.PASS != result) && (IRunStatus.FAIL != result)) {
+                               out.println(prefix + "--- result: " + status.getResult());
+                       }
+                       if (0 < status.numMessages(IMessage.FAIL, true)) {
+                               MessageUtil.print(out, status, prefix, MessageUtil.MESSAGE_ALL, MessageUtil.PICK_FAIL_PLUS);
+                       }
+                       Throwable thrown = status.getThrown();
+                       if (null != thrown) {
+                               out.println(prefix + "--- thrown: " + LangUtil.renderException(thrown, true));
                        }
-        }            
-    };
+                       IRunStatus[] children = status.getChildren();
+                       for (int i = 0; i < children.length; i++) {
+                               if (!children[i].runResult()) {
+                                       String number = "[" + LangUtil.toSizedString(i,3) + "] ";
+                                       printRunStatus(out, children[i], prefix + number);
+                               }
+                       }
+                       out.println("");
+               }
+       };
 
-    /** print only status and fail/abort messages */
-    public static final IRunStatusPrinter TERSE_PRINTER = new IRunStatusPrinter() {
-        public String toString() { return "TERSE_PRINTER"; }
+       /** Render IRunStatus produced by running an AjcTest.Suite. */
+       public static final IRunStatusPrinter AJCSUITE_PRINTER  = new IRunStatusPrinter() {
+               @Override
+               public String toString() { return "AJCSUITE_PRINTER"; }
 
-        /** print only status and fail messages */
-        public void printRunStatus(PrintStream out, IRunStatus status) {
-            printRunStatus(out, status, "");
-        }
-        private void printRunStatus(PrintStream out, IRunStatus status, String prefix) {
-            LangUtil.throwIaxIfNull(out, "out");
-            LangUtil.throwIaxIfNull(status, "status");
-            String label = (status.runResult() ? "PASS: " : "FAIL: ") 
-                + status.getIdentifier();       
-            out.println(prefix + label);
-            Object result = status.getResult();
-            if ((null != result) && (IRunStatus.PASS != result) && (IRunStatus.FAIL != result)) {
-                out.println(prefix + "--- result: " + status.getResult());
-            } 
-            if (0 < status.numMessages(IMessage.FAIL, true)) {
-                MessageUtil.print(out, status, prefix, MessageUtil.MESSAGE_ALL, MessageUtil.PICK_FAIL_PLUS);
-            }
-            Throwable thrown = status.getThrown();
-            if (null != thrown) {
-                out.println(prefix + "--- thrown: " + LangUtil.renderException(thrown, true));
-            } 
-            IRunStatus[] children = status.getChildren();
-            for (int i = 0; i < children.length; i++) {
-                if (!children[i].runResult()) {
-                    String number = "[" + LangUtil.toSizedString(i,3) + "] ";
-                    printRunStatus(out, children[i], prefix + number);
-                }
-            }
-            out.println("");
-        }
-    };
+               /**
+                * Render IRunStatus produced by running an AjcTest.Suite.
+                * This renders only test failures and
+                * a summary at the end.
+                */
+               @Override
+               public void printRunStatus(PrintStream out, IRunStatus status) {
+                       LangUtil.throwIaxIfNull(out, "out");
+                       LangUtil.throwIaxIfNull(status, "status");
+                       final String prefix = "";
+                       final boolean failed = status.runResult();
+                       String label = (status.runResult() ? "PASS: " : "FAIL: ")
+                                       + status.getIdentifier();
+                       out.println(prefix + label);
+                       // print all messages - these are validator comments
+                       if (0 < status.numMessages(null, true)) {
+                               MessageUtil.print(out, status, "init", MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ALL);
+                       }
+                       // XXX ignore thrown if failed - will be printed as message anyway?
+                       Throwable thrown = status.getThrown();
+                       if ((null != thrown) && !failed) {
+                               out.println(prefix + "--- printing stack trace for thrown");
+                               thrown.printStackTrace(out);
+                       }
+                       IRunStatus[] children = status.getChildren();
+                       int numChildren = (null == children? 0 : children.length);
+                       int numFails = 0;
+                       if (0 < numChildren) {
+                               for (IRunStatus element : children) {
+                                       if (!RunValidator.NORMAL.runPassed(element)) {
+                                               numFails++;
+                                       }
+                               }
+                       }
+                       if (0 < numFails) {
+                               out.println(prefix + "--- " + numFails + " failures when running " + children.length + " tests");
+                               for (int j = 0; j < children.length; j++) {
+                                       if (!RunValidator.NORMAL.runPassed(children[j])) {
+                                               print(out, prefix + "[" + LangUtil.toSizedString(j, 3) + "]: ", children[j]);
+                                               out.println("");
+                                       }
+                               }
+                       }
+                       label = "ran " + children.length + " tests"
+                                       + (numFails == 0 ? "" : "(" + numFails + " fails)");
+                       out.println("");
+               }
 
-    /** Render IRunStatus produced by running an AjcTest.Suite. */
-    public static final IRunStatusPrinter AJCSUITE_PRINTER  = new IRunStatusPrinter() {
-        public String toString() { return "AJCSUITE_PRINTER"; }
-        
-        /** 
-         * Render IRunStatus produced by running an AjcTest.Suite.
-         * This renders only test failures and 
-         * a summary at the end.
-         */
-        public void printRunStatus(PrintStream out, IRunStatus status) {
-            LangUtil.throwIaxIfNull(out, "out");
-            LangUtil.throwIaxIfNull(status, "status");
-            final String prefix = "";
-            final boolean failed = status.runResult();
-            String label = (status.runResult() ? "PASS: " : "FAIL: ") 
-                + status.getIdentifier();       
-            out.println(prefix + label);
-            // print all messages - these are validator comments
-            if (0 < status.numMessages(null, true)) {
-                MessageUtil.print(out, status, "init", MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ALL);
-            }
-            // XXX ignore thrown if failed - will be printed as message anyway?
-            Throwable thrown = status.getThrown();
-            if ((null != thrown) && !failed) {
-                out.println(prefix + "--- printing stack trace for thrown");
-                thrown.printStackTrace(out);
-            } 
-            IRunStatus[] children = status.getChildren();
-            int numChildren = (null == children? 0 : children.length);
-            int numFails = 0;
-            if (0 < numChildren) {
-                for (int j = 0; j < children.length; j++) {
-                    if (!RunValidator.NORMAL.runPassed(children[j])) {
-                        numFails++;
-                    }
-                }
-            }
-            if (0 < numFails) {
-                out.println(prefix + "--- " + numFails + " failures when running " + children.length + " tests");
-                for (int j = 0; j < children.length; j++) {
-                    if (!RunValidator.NORMAL.runPassed(children[j])) {
-                        print(out, prefix + "[" + LangUtil.toSizedString(j, 3) + "]: ", children[j]);
-                        out.println("");
-                    }
-                }
-            }
-            label = "ran " + children.length + " tests" 
-                + (numFails == 0 ? "" : "(" + numFails + " fails)");            
-            out.println("");
-        }
-        
-    };
-    /** Render IRunStatus produced by running an AjcTest (verbose) */
-    public static final IRunStatusPrinter AJCTEST_PRINTER = VERBOSE_PRINTER;    
+       };
+       /** Render IRunStatus produced by running an AjcTest (verbose) */
+       public static final IRunStatusPrinter AJCTEST_PRINTER = VERBOSE_PRINTER;
 
        /** print this with messages, then children using AJCRUN_PRINTER */
-    public static final IRunStatusPrinter AJC_PRINTER = new IRunStatusPrinter() {
-        public String toString() { return "AJC_PRINTER"; }
-        /** Render IRunStatus produced by running an AjcTest */
-        public void printRunStatus(PrintStream out, IRunStatus status) {
-            LangUtil.throwIaxIfNull(out, "out");
-            LangUtil.throwIaxIfNull(status, "status");
-            String label = (status.runResult() ? " PASS: " : " FAIL: ") 
-                + status.getIdentifier();       
-            out.println("------------ " + label);
-            MessageUtil.print(out, status, "", MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ALL);
-            IRunStatus[] children = status.getChildren();
-            for (int i = 0; i < children.length; i++) {
-                AJCRUN_PRINTER.printRunStatus(out, children[i]);
+       public static final IRunStatusPrinter AJC_PRINTER = new IRunStatusPrinter() {
+               @Override
+               public String toString() { return "AJC_PRINTER"; }
+               /** Render IRunStatus produced by running an AjcTest */
+               @Override
+               public void printRunStatus(PrintStream out, IRunStatus status) {
+                       LangUtil.throwIaxIfNull(out, "out");
+                       LangUtil.throwIaxIfNull(status, "status");
+                       String label = (status.runResult() ? " PASS: " : " FAIL: ")
+                                       + status.getIdentifier();
+                       out.println("------------ " + label);
+                       MessageUtil.print(out, status, "", MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ALL);
+                       IRunStatus[] children = status.getChildren();
+                       for (IRunStatus element : children) {
+                               AJCRUN_PRINTER.printRunStatus(out, element);
                        }
-            //out.println("------------   END "  + label);
-            out.println("");
-        }        
-    };
+                       //out.println("------------   END "  + label);
+                       out.println("");
+               }
+       };
 
 
        /** print only fail messages */
-    public static final IRunStatusPrinter AJCRUN_PRINTER = new IRunStatusPrinter() {
-        public String toString() { return "AJCRUN_PRINTER"; }
-        /** Render IRunStatus produced by running an AjcTest child */
-        public void printRunStatus(PrintStream out, IRunStatus status) {
-            LangUtil.throwIaxIfNull(out, "out");
-            LangUtil.throwIaxIfNull(status, "status");
-            final boolean orGreater = false;
-            int numFails = status.numMessages(IMessage.FAIL, orGreater);
-            if (0 < numFails) { 
-                out.println("--- " + status.getIdentifier());
-                IMessage[] fails = status.getMessages(IMessage.FAIL, orGreater); 
-                for (int i = 0; i < fails.length; i++) {
-                    out.println("[fail " + LangUtil.toSizedString(i, 3) + "]: " 
-                      + MessageUtil.MESSAGE_ALL.renderToString(fails[i]));
+       public static final IRunStatusPrinter AJCRUN_PRINTER = new IRunStatusPrinter() {
+               @Override
+               public String toString() { return "AJCRUN_PRINTER"; }
+               /** Render IRunStatus produced by running an AjcTest child */
+               @Override
+               public void printRunStatus(PrintStream out, IRunStatus status) {
+                       LangUtil.throwIaxIfNull(out, "out");
+                       LangUtil.throwIaxIfNull(status, "status");
+                       final boolean orGreater = false;
+                       int numFails = status.numMessages(IMessage.FAIL, orGreater);
+                       if (0 < numFails) {
+                               out.println("--- " + status.getIdentifier());
+                               IMessage[] fails = status.getMessages(IMessage.FAIL, orGreater);
+                               for (int i = 0; i < fails.length; i++) {
+                                       out.println("[fail " + LangUtil.toSizedString(i, 3) + "]: "
+                                                       + MessageUtil.MESSAGE_ALL.renderToString(fails[i]));
                                }
-            }
-        }        
-    };
+                       }
+               }
+       };
 
        private RunUtils() {
        }
-    
+
 }