Browse Source

Polish

tags/V1_9_7M1
Andy Clement 3 years ago
parent
commit
c3289ab86b

+ 9
- 9
org.aspectj.ajdt.core/src/main/java/org/aspectj/ajdt/internal/compiler/lookup/EclipseAnnotationConvertor.java View 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;
}
}

+ 16
- 17
org.aspectj.ajdt.core/src/test/java/AroundAMain.java View 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);

}
}

+ 11
- 9
org.aspectj.matcher/src/main/java/org/aspectj/weaver/SimpleAnnotationValue.java View 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();
}

+ 12
- 12
org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/ExactTypePattern.java View 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);

+ 50
- 38
org.aspectj.matcher/src/main/java/org/aspectj/weaver/tools/AbstractTrace.java View 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;
}
}

+ 37
- 37
runtime/src/main/java/org/aspectj/runtime/internal/Conversions.java View 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.

+ 332
- 323
testing/src/test/java/org/aspectj/testing/util/RunUtils.java View 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() {
}

}

Loading…
Cancel
Save