[slf4j-dev] svn commit: r1186 - slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation
ravn at slf4j.org
ravn at slf4j.org
Sun Oct 5 17:19:23 CEST 2008
Author: ravn
Date: Sun Oct 5 17:19:23 2008
New Revision: 1186
Modified:
slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/JavassistHelper.java
Log:
now takes synchronized parameter in consideration and is more robust of lack of information
Modified: slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/JavassistHelper.java
==============================================================================
--- slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/JavassistHelper.java (original)
+++ slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/JavassistHelper.java Sun Oct 5 17:19:23 2008
@@ -12,7 +12,7 @@
public static String returnValue(CtBehavior method)
throws NotFoundException {
-
+
String returnValue = "";
if (methodReturnsValue(method)) {
returnValue = " returns: \" + $_ + \"";
@@ -22,30 +22,34 @@
private static boolean methodReturnsValue(CtBehavior method)
throws NotFoundException {
-
+
if (method instanceof CtMethod == false) {
return false;
}
-
+
CtClass returnType = ((CtMethod) method).getReturnType();
String returnTypeName = returnType.getName();
boolean isVoidMethod = "void".equals(returnTypeName);
-
+
boolean methodReturnsValue = isVoidMethod == false;
return methodReturnsValue;
}
public static String getSignature(CtBehavior method)
throws NotFoundException {
-
+
CtClass parameterTypes[] = method.getParameterTypes();
CodeAttribute codeAttribute = method.getMethodInfo().getCodeAttribute();
- LocalVariableAttribute locals = (LocalVariableAttribute) codeAttribute
- .getAttribute("LocalVariableTable");
-
+ LocalVariableAttribute locals = null;
+
+ if (codeAttribute != null) {
+ locals = (LocalVariableAttribute) codeAttribute
+ .getAttribute("LocalVariableTable");
+ }
+
String methodName = method.getName();
StringBuffer sb = new StringBuffer(methodName + "(\" ");
@@ -85,18 +89,26 @@
if (locals == null) {
return Integer.toString(i + 1);
}
-
int modifiers = method.getModifiers();
-
+
int j = i;
-
-
-
+
+ if (Modifier.isSynchronized(modifiers)) {
+ // skip object to synchronize upon.
+ j++;
+ // System.err.println("Synchronized");
+ }
if (Modifier.isStatic(modifiers) == false) {
- // skip #0 which is "this"
+ // skip "this"
j++;
+ // System.err.println("Instance");
+ }
+ String variableName = locals.variableName(j);
+ if (variableName.equals("this")) {
+ System.err.println("this returned as a parameter name for "
+ + method.getName() + ", names are probably shifted.");
}
- return locals.variableName(j);
+ return variableName;
}
}
More information about the slf4j-dev
mailing list