/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package org.codehaus.aspectwerkz.util;
import org.codehaus.aspectwerkz.reflect.ReflectionInfo;
/**
* Utility methods and constants used in the AspectWerkz system.
*
* @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a>
*/
public final class Util {
public static final Integer INTEGER_DEFAULT_VALUE = new Integer(0);
public static final Float FLOAT_DEFAULT_VALUE = new Float(0.0f);
public static final Double DOUBLE_DEFAULT_VALUE = new Double(0.0d);
public static final Long LONG_DEFAULT_VALUE = new Long(0L);
public static final Boolean BOOLEAN_DEFAULT_VALUE = new Boolean(false);
public static final Character CHARACTER_DEFAULT_VALUE = new Character('\u0000');
public static final Short SHORT_DEFAULT_VALUE;
public static final Byte BYTE_DEFAULT_VALUE;
static {
byte b = 0;
BYTE_DEFAULT_VALUE = new Byte(b);
short s = 0;
SHORT_DEFAULT_VALUE = new Short(s);
}
/**
* Calculates the hash for the class name and the meta-data.
*
* @param className the class name
* @param info the meta-data
* @return the hash
*/
public static Integer calculateHash(final String className, final ReflectionInfo info) {
if (className == null) {
throw new IllegalArgumentException("class name can not be null");
}
if (info == null) {
throw new IllegalArgumentException("info can not be null");
}
int hash = 17;
hash = (37 * hash) + className.hashCode();
hash = (37 * hash) + info.hashCode();
Integer hashKey = new Integer(hash);
return hashKey;
}
/**
* Removes the AspectWerkz specific elements from the stack trace. <p/>TODO: how to mess w/ the stacktrace in JDK
* 1.3.x?
*
* @param exception the Throwable to modify the stack trace on
* @param className the name of the fake origin class of the exception
*/
public static void fakeStackTrace(final Throwable exception, final String className) {
if (exception == null) {
throw new IllegalArgumentException("exception can not be null");
}
if (className == null) {
throw new IllegalArgumentException("class name can not be null");
}
// final List newStackTraceList = new ArrayList();
// final StackTraceElement[] stackTrace = exception.getStackTrace();
// int i;
// for (i = 1; i < stackTrace.length; i++) {
// if (stackTrace[i].getClassName().equals(className)) break;
// }
// for (int j = i; j < stackTrace.length; j++) {
// newStackTraceList.add(stackTrace[j]);
// }
//
// final StackTraceElement[] newStackTrace =
// new StackTraceElement[newStackTraceList.size()];
// int k = 0;
// for (Iterator it = newStackTraceList.iterator(); it.hasNext(); k++) {
// final StackTraceElement element = (StackTraceElement)it.next();
// newStackTrace[k] = element;
// }
// exception.setStackTrace(newStackTrace);
}
/**
* Returns a String representation of a classloader Avoid to do a toString() if the resulting string is too long
* (occurs on Tomcat)
*
* @param loader
* @return String representation (toString or FQN@hashcode)
*/
public static String classLoaderToString(ClassLoader loader) {
if ((loader != null) && (loader.toString().length() < 120)) {
return loader.toString() + "@" + loader.hashCode();
} else if (loader != null) {
return loader.getClass().getName() + "@" + loader.hashCode();
} else {
return "null";
}
}
/**
* Helper method to support Java 1.4 like Boolean.valueOf(boolean) in Java 1.3
* @param b
* @return
*/
public static Boolean booleanValueOf(boolean b) {
return b?Boolean.TRUE:Boolean.FALSE;
}
}