Fixed toString(), toShortString(), and toLongString() methods for signature and join point (SPR-5437)

This commit is contained in:
Ramnivas Laddad
2009-01-27 22:58:28 +00:00
parent 27460e323a
commit c8d6c15a05
2 changed files with 109 additions and 13 deletions

View File

@@ -17,6 +17,7 @@
package org.springframework.aop.aspectj;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
@@ -44,6 +45,7 @@ import org.springframework.util.Assert;
* @author Rod Johnson
* @author Juergen Hoeller
* @author Adrian Colyer
* @author Ramnivas Laddad
* @since 2.0
*/
public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint, JoinPoint.StaticPart {
@@ -132,19 +134,17 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
public JoinPoint.StaticPart getStaticPart() {
return this;
}
public String toShortString() {
return "execution(" + this.methodInvocation.getMethod().getName() + ")";
return "execution(" + getSignature().toShortString() + ")";
}
public String toLongString() {
return getClass().getName() + ": execution: [" + this.methodInvocation + "]";
return "execution(" + getSignature().toLongString() + ")";
}
@Override
public String toString() {
return getClass().getName() + ": " + toShortString();
return "execution(" + getSignature().toString() + ")";
}
@@ -153,14 +153,6 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
*/
private class MethodSignatureImpl implements Signature, MethodSignature {
public String toShortString() {
return methodInvocation.getMethod().getName();
}
public String toLongString() {
return methodInvocation.getMethod().toString();
}
public String getName() {
return methodInvocation.getMethod().getName();
}
@@ -199,8 +191,75 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
public Class[] getExceptionTypes() {
return methodInvocation.getMethod().getExceptionTypes();
}
public String toShortString() {
return toString(false, false, false, false);
}
public String toLongString() {
return toString(true, true, true, true);
}
public String toString() {
return toString(false, true, false, true);
}
private String toString(boolean includeModifier,
boolean includeReturnTypeAndArgs,
boolean useLongReturnAndArgumentTypeName,
boolean useLongTypeName) {
StringBuilder sb = new StringBuilder();
if (includeModifier) {
sb.append(Modifier.toString(getModifiers()));
sb.append(" ");
}
if (includeReturnTypeAndArgs) {
appendType(sb, getReturnType(),
useLongReturnAndArgumentTypeName);
sb.append(" ");
}
appendType(sb, getDeclaringType(), useLongTypeName);
sb.append(".");
sb.append(getMethod().getName());
sb.append("(");
Class[] parametersTypes = getParameterTypes();
appendTypes(sb, parametersTypes, includeReturnTypeAndArgs,
useLongReturnAndArgumentTypeName);
sb.append(")");
return sb.toString();
}
}
private void appendTypes(StringBuilder sb, Class<?>[] types,
boolean includeArgs, boolean useLongReturnAndArgumentTypeName) {
if (includeArgs) {
for (int size = types.length, i = 0; i < size; i++) {
appendType(sb, types[i], useLongReturnAndArgumentTypeName);
if (i < size - 1) {
sb.append(",");
}
}
} else {
if (types.length != 0) {
sb.append("..");
}
}
}
private void appendType(StringBuilder sb, Class<?> type,
boolean useLongTypeName) {
if (type.isArray()) {
appendType(sb, type.getComponentType(), useLongTypeName);
sb.append("[]");
} else {
if (type.getPackage() != null
&& type.getPackage().equals("java.lang")) {
useLongTypeName = false;
}
sb.append(useLongTypeName ? type.getName() : type.getSimpleName());
}
}
/**
* Lazily initialized SourceLocation.