1 /***************************************************************************************
2 * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. *
3 * http://aspectwerkz.codehaus.org *
4 * ---------------------------------------------------------------------------------- *
5 * The software in this package is published under the terms of the LGPL license *
6 * a copy of which has been included with this distribution in the license.txt file. *
7 **************************************************************************************/
8 package org.codehaus.aspectwerkz.util;
9
10 import org.codehaus.aspectwerkz.reflect.ReflectionInfo;
11
12 /***
13 * Utility methods and constants used in the AspectWerkz system.
14 *
15 * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
16 */
17 public final class Util {
18 public static final Integer INTEGER_DEFAULT_VALUE = new Integer(0);
19
20 public static final Float FLOAT_DEFAULT_VALUE = new Float(0.0f);
21
22 public static final Double DOUBLE_DEFAULT_VALUE = new Double(0.0d);
23
24 public static final Long LONG_DEFAULT_VALUE = new Long(0L);
25
26 public static final Boolean BOOLEAN_DEFAULT_VALUE = new Boolean(false);
27
28 public static final Character CHARACTER_DEFAULT_VALUE = new Character('\u0000');
29
30 public static final Short SHORT_DEFAULT_VALUE;
31
32 public static final Byte BYTE_DEFAULT_VALUE;
33
34 static {
35 byte b = 0;
36 BYTE_DEFAULT_VALUE = new Byte(b);
37 short s = 0;
38 SHORT_DEFAULT_VALUE = new Short(s);
39 }
40
41 /***
42 * Calculates the hash for the class name and the meta-data.
43 *
44 * @param className the class name
45 * @param info the meta-data
46 * @return the hash
47 */
48 public static Integer calculateHash(final String className, final ReflectionInfo info) {
49 if (className == null) {
50 throw new IllegalArgumentException("class name can not be null");
51 }
52 if (info == null) {
53 throw new IllegalArgumentException("info can not be null");
54 }
55 int hash = 17;
56 hash = (37 * hash) + className.hashCode();
57 hash = (37 * hash) + info.hashCode();
58 Integer hashKey = new Integer(hash);
59 return hashKey;
60 }
61
62 /***
63 * Removes the AspectWerkz specific elements from the stack trace. <p/>TODO: how to mess w/ the stacktrace in JDK
64 * 1.3.x?
65 *
66 * @param exception the Throwable to modify the stack trace on
67 * @param className the name of the fake origin class of the exception
68 */
69 public static void fakeStackTrace(final Throwable exception, final String className) {
70 if (exception == null) {
71 throw new IllegalArgumentException("exception can not be null");
72 }
73 if (className == null) {
74 throw new IllegalArgumentException("class name can not be null");
75 }
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 }
96
97 /***
98 * Returns a String representation of a classloader Avoid to do a toString() if the resulting string is too long
99 * (occurs on Tomcat)
100 *
101 * @param loader
102 * @return String representation (toString or FQN@hashcode)
103 */
104 public static String classLoaderToString(ClassLoader loader) {
105 if ((loader != null) && (loader.toString().length() < 120)) {
106 return loader.toString() + "@" + loader.hashCode();
107 } else if (loader != null) {
108 return loader.getClass().getName() + "@" + loader.hashCode();
109 } else {
110 return "null";
111 }
112 }
113
114 /***
115 * Helper method to support Java 1.4 like Boolean.valueOf(boolean) in Java 1.3
116
117 * @param b
118 * @return
119 */
120 public static Boolean booleanValueOf(boolean b) {
121 return b?Boolean.TRUE:Boolean.FALSE;
122 }
123 }