Convert from Deque to a Stack. Deque is only available in Java 6
git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers@1178779 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/log4j2-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java b/log4j2-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
index 5e92a45..f02ca2e 100644
--- a/log4j2-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
+++ b/log4j2-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
@@ -25,10 +25,9 @@
import java.lang.reflect.Modifier;
import java.net.URL;
import java.security.CodeSource;
-import java.util.ArrayDeque;
-import java.util.Deque;
import java.util.HashMap;
import java.util.Map;
+import java.util.Stack;
/**
* Wraps a Throwable to add packaging information about each stack trace element.
@@ -61,7 +60,7 @@
public ThrowableProxy(Throwable throwable) {
this.throwable = throwable;
Map<String, CacheEntry> map = new HashMap<String, CacheEntry>();
- Deque<Class> stack = getCurrentStack();
+ Stack<Class> stack = getCurrentStack();
callerPackageData = resolvePackageData(stack, map, null, throwable.getStackTrace());
this.cause = (throwable.getCause() == null) ? null :
new ThrowableProxy(throwable, stack, map, throwable.getCause());
@@ -75,7 +74,7 @@
* @param map The cache containing the packaging data.
* @param cause The Throwable to wrap.
*/
- private ThrowableProxy(Throwable parent, Deque<Class> stack, Map<String, CacheEntry> map, Throwable cause) {
+ private ThrowableProxy(Throwable parent, Stack<Class> stack, Map<String, CacheEntry> map, Throwable cause) {
this.throwable = cause;
callerPackageData = resolvePackageData(stack, map, parent.getStackTrace(), cause.getStackTrace());
this.cause = (throwable.getCause() == null) ? null :
@@ -198,35 +197,36 @@
* to be accurate.
* @return A Deque containing the current stack of Class objects.
*/
- private Deque<Class> getCurrentStack() {
+ private Stack<Class> getCurrentStack() {
if (getCallerClass != null) {
- Deque<Class> classes = new ArrayDeque<Class>();
+ Stack<Class> classes = new Stack<Class>();
int index = 2;
Class clazz = getCallerClass(index);
while (clazz != null) {
- classes.add(clazz);
+ classes.push(clazz);
clazz = getCallerClass(++index);
}
return classes;
} else if (securityManager != null) {
Class[] array = securityManager.getClasses();
- Deque<Class> classes = new ArrayDeque<Class>(array.length);
+ Stack<Class> classes = new Stack<Class>();
for (Class clazz : array) {
- classes.add(clazz);
+ classes.push(clazz);
}
return classes;
}
- return new ArrayDeque<Class>();
+ return new Stack<Class>();
}
/**
* Resolve all the stack entries in this stack trace that are not common with the parent.
+ * @param stack The callers Class stack.
* @param map The cache of CacheEntry objects.
* @param rootTrace The first stack trace resolve or null.
* @param stackTrace The stack trace being resolved.
- * @return
+ * @return The StackTracePackageElement array.
*/
- private StackTracePackageElement[] resolvePackageData(Deque<Class> stack, Map<String, CacheEntry> map,
+ private StackTracePackageElement[] resolvePackageData(Stack<Class> stack, Map<String, CacheEntry> map,
StackTraceElement[] rootTrace,
StackTraceElement[] stackTrace) {
int stackLength;
@@ -244,7 +244,7 @@
stackLength = stackTrace.length;
}
StackTracePackageElement[] packageArray = new StackTracePackageElement[stackLength];
- Class clazz = stack.peekLast();
+ Class clazz = stack.peek();
ClassLoader lastLoader = null;
for (int i = stackLength - 1; i >= 0 ; --i) {
String className = stackTrace[i].getClassName();
@@ -255,8 +255,8 @@
CacheEntry entry = resolvePackageElement(clazz, true);
packageArray[i] = entry.element;
lastLoader = entry.loader;
- stack.removeLast();
- clazz = stack.peekLast();
+ stack.pop();
+ clazz = stack.peek();
} else {
if (map.containsKey(className)) {
CacheEntry entry = map.get(className);
@@ -345,7 +345,7 @@
* @return The Class object for the Class or null if it could not be located.
*/
private Class loadClass(ClassLoader lastLoader, String className) {
- Class clazz = null;
+ Class clazz;
if (lastLoader != null) {
try {
clazz = lastLoader.loadClass(className);
diff --git a/log4j2-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java b/log4j2-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
index 895e90f..07d22d9 100644
--- a/log4j2-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
+++ b/log4j2-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
@@ -59,7 +59,7 @@
PrintWriter pw = new PrintWriter(sw);
parent.printStackTrace(pw);
String result = sb.toString();
- //System.out.print(result);
+ System.out.print(result);
result = result.replaceAll(" ~?\\[.*\\]", "");
assertEquals(sw.toString(), result);
}