Removing isThrowableNested, isNestedThrowable and getFullStackTrace as they were all types of no-op once you got to JDK 1.4. LANG-491
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@895097 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1a433d2ec7
commit
ebfb96b0a9
|
@ -429,71 +429,6 @@ public class ExceptionUtils {
|
|||
return null;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
* <p>Checks if the Throwable class has a <code>getCause</code> method.</p>
|
||||
*
|
||||
* <p>This is true for JDK 1.4 and above.</p>
|
||||
*
|
||||
* @return true if Throwable is nestable
|
||||
* @since 2.0
|
||||
*/
|
||||
public static boolean isThrowableNested() {
|
||||
return THROWABLE_CAUSE_METHOD != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Checks whether this <code>Throwable</code> class can store a cause.</p>
|
||||
*
|
||||
* <p>This method does <b>not</b> check whether it actually does store a cause.<p>
|
||||
*
|
||||
* @param throwable the <code>Throwable</code> to examine, may be null
|
||||
* @return boolean <code>true</code> if nested otherwise <code>false</code>
|
||||
* @since 2.0
|
||||
*/
|
||||
public static boolean isNestedThrowable(Throwable throwable) {
|
||||
if (throwable == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (throwable instanceof SQLException) {
|
||||
return true;
|
||||
} else if (throwable instanceof InvocationTargetException) {
|
||||
return true;
|
||||
} else if (isThrowableNested()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Class<? extends Throwable> cls = throwable.getClass();
|
||||
synchronized(CAUSE_METHOD_NAMES_LOCK) {
|
||||
for (int i = 0, isize = CAUSE_METHOD_NAMES.length; i < isize; i++) {
|
||||
try {
|
||||
Method method = cls.getMethod(CAUSE_METHOD_NAMES[i], (Class[]) null);
|
||||
if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
|
||||
return true;
|
||||
}
|
||||
} catch (NoSuchMethodException ignored) {
|
||||
// exception ignored
|
||||
} catch (SecurityException ignored) {
|
||||
// exception ignored
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
Field field = cls.getField("detail");
|
||||
if (field != null) {
|
||||
return true;
|
||||
}
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
// exception ignored
|
||||
} catch (SecurityException ignored) {
|
||||
// exception ignored
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
* <p>Counts the number of <code>Throwable</code> objects in the
|
||||
|
@ -847,30 +782,6 @@ public class ExceptionUtils {
|
|||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
* <p>A way to get the entire nested stack-trace of an throwable.</p>
|
||||
*
|
||||
* <p>The result of this method is highly dependent on the JDK version
|
||||
* and whether the exceptions override printStackTrace or not.</p>
|
||||
*
|
||||
* @param throwable the <code>Throwable</code> to be examined
|
||||
* @return the nested stack trace, with the root cause first
|
||||
* @since 2.0
|
||||
*/
|
||||
public static String getFullStackTrace(Throwable throwable) {
|
||||
StringWriter sw = new StringWriter();
|
||||
PrintWriter pw = new PrintWriter(sw, true);
|
||||
Throwable[] ts = getThrowables(throwable);
|
||||
for (int i = 0; i < ts.length; i++) {
|
||||
ts[i].printStackTrace(pw);
|
||||
if (isNestedThrowable(ts[i])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sw.getBuffer().toString();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
* <p>Gets the stack trace from a Throwable as a String.</p>
|
||||
|
|
|
@ -210,30 +210,6 @@ public class ExceptionUtilsTest extends TestCase {
|
|||
assertNull(ExceptionUtils.getCause(ex));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
public void testIsThrowableNested() {
|
||||
if (SystemUtils.isJavaVersionAtLeast(140)) {
|
||||
assertEquals(true, ExceptionUtils.isThrowableNested());
|
||||
} else {
|
||||
assertEquals(false, ExceptionUtils.isThrowableNested());
|
||||
}
|
||||
}
|
||||
|
||||
public void testIsNestedThrowable_Throwable() {
|
||||
assertEquals(true, ExceptionUtils.isNestedThrowable(new SQLException()));
|
||||
assertEquals(true, ExceptionUtils.isNestedThrowable(new InvocationTargetException(new Exception())));
|
||||
assertEquals(true, ExceptionUtils.isNestedThrowable(new NestableRuntimeException()));
|
||||
assertEquals(true, ExceptionUtils.isNestedThrowable(withCause));
|
||||
assertEquals(true, ExceptionUtils.isNestedThrowable(nested));
|
||||
if (SystemUtils.isJavaVersionAtLeast(140)) {
|
||||
assertEquals(true, ExceptionUtils.isNestedThrowable(withoutCause));
|
||||
assertEquals(true, ExceptionUtils.isNestedThrowable(new Throwable()));
|
||||
} else {
|
||||
assertEquals(false, ExceptionUtils.isNestedThrowable(withoutCause));
|
||||
assertEquals(false, ExceptionUtils.isNestedThrowable(new Throwable()));
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
public void testGetThrowableCount_Throwable() {
|
||||
assertEquals(0, ExceptionUtils.getThrowableCount(null));
|
||||
|
|
Loading…
Reference in New Issue