public class org.apache.isis.commons.exceptions.ExceptionUtils extends java.lang.Object
{
private static java.lang.String[] CAUSE_METHOD_NAMES;
private static final java.lang.reflect.Method THROWABLE_CAUSE_METHOD;
public void <init>()
{
org.apache.isis.commons.exceptions.ExceptionUtils v;
v := @this: org.apache.isis.commons.exceptions.ExceptionUtils;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
public static java.lang.Throwable getCause(java.lang.Throwable)
{
java.lang.Throwable v, v;
int v, v;
java.lang.String[] v;
java.lang.String v;
v := @parameter: java.lang.Throwable;
if v != null goto label;
return null;
label:
v = staticinvoke <org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.Throwable getCauseUsingWellKnownTypes(java.lang.Throwable)>(v);
if v != null goto label;
v = <org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.String[] CAUSE_METHOD_NAMES>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
if v == null goto label;
v = staticinvoke <org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.Throwable getCauseUsingMethodName(java.lang.Throwable,java.lang.String)>(v, v);
if v != null goto label;
label:
v = v + 1;
goto label;
label:
if v != null goto label;
v = staticinvoke <org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.Throwable getCauseUsingFieldName(java.lang.Throwable,java.lang.String)>(v, "detail");
label:
return v;
}
private static java.lang.Throwable getCauseUsingWellKnownTypes(java.lang.Throwable)
{
java.lang.Throwable v, v;
java.sql.SQLException v;
boolean v, v;
v := @parameter: java.lang.Throwable;
v = v instanceof java.sql.SQLException;
if v == 0 goto label;
v = virtualinvoke v.<java.sql.SQLException: java.sql.SQLException getNextException()>();
return v;
label:
v = v instanceof java.lang.reflect.InvocationTargetException;
if v == 0 goto label;
v = virtualinvoke v.<java.lang.reflect.InvocationTargetException: java.lang.Throwable getTargetException()>();
return v;
label:
return null;
}
private static java.lang.Throwable getCauseUsingMethodName(java.lang.Throwable, java.lang.String)
{
java.lang.Throwable v;
java.lang.Object[] v;
java.lang.Class[] v;
java.lang.Exception v, v;
java.lang.Class v, v, v;
java.lang.Object v;
java.lang.String v;
java.lang.reflect.Method v;
boolean v;
v := @parameter: java.lang.Throwable;
v := @parameter: java.lang.String;
label:
v = virtualinvoke v.<java.lang.Object: java.lang.Class getClass()>();
v = newarray (java.lang.Class)[0];
v = virtualinvoke v.<java.lang.Class: java.lang.reflect.Method getMethod(java.lang.String,java.lang.Class[])>(v, v);
label:
goto label;
label:
v := @caughtexception;
return null;
label:
v = class "Ljava/lang/Throwable;";
v = virtualinvoke v.<java.lang.reflect.Method: java.lang.Class getReturnType()>();
v = virtualinvoke v.<java.lang.Class: boolean isAssignableFrom(java.lang.Class)>(v);
if v != 0 goto label;
return null;
label:
v = newarray (java.lang.Object)[0];
v = virtualinvoke v.<java.lang.reflect.Method: java.lang.Object invoke(java.lang.Object,java.lang.Object[])>(v, v);
label:
return v;
label:
v := @caughtexception;
return null;
catch java.lang.NoSuchMethodException from label to label with label;
catch java.lang.SecurityException from label to label with label;
catch java.lang.IllegalAccessException from label to label with label;
catch java.lang.IllegalArgumentException from label to label with label;
catch java.lang.reflect.InvocationTargetException from label to label with label;
}
private static java.lang.Throwable getCauseUsingFieldName(java.lang.Throwable, java.lang.String)
{
java.lang.Throwable v;
java.lang.reflect.Field v;
java.lang.Exception v, v;
java.lang.Class v, v, v;
java.lang.Object v;
java.lang.String v;
boolean v;
v := @parameter: java.lang.Throwable;
v := @parameter: java.lang.String;
v = null;
label:
v = virtualinvoke v.<java.lang.Object: java.lang.Class getClass()>();
v = virtualinvoke v.<java.lang.Class: java.lang.reflect.Field getField(java.lang.String)>(v);
label:
goto label;
label:
v := @caughtexception;
label:
if v == null goto label;
v = class "Ljava/lang/Throwable;";
v = virtualinvoke v.<java.lang.reflect.Field: java.lang.Class getType()>();
v = virtualinvoke v.<java.lang.Class: boolean isAssignableFrom(java.lang.Class)>(v);
if v == 0 goto label;
label:
v = virtualinvoke v.<java.lang.reflect.Field: java.lang.Object get(java.lang.Object)>(v);
label:
return v;
label:
v := @caughtexception;
label:
return null;
catch java.lang.NoSuchFieldException from label to label with label;
catch java.lang.SecurityException from label to label with label;
catch java.lang.IllegalAccessException from label to label with label;
catch java.lang.IllegalArgumentException from label to label with label;
}
public static boolean isThrowableNested()
{
java.lang.reflect.Method v;
boolean v;
v = <org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.reflect.Method THROWABLE_CAUSE_METHOD>;
if v == null goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public static boolean isNestedThrowable(java.lang.Throwable)
{
java.lang.Throwable v;
java.lang.String[] v;
int v, v;
java.lang.String v;
java.lang.reflect.Method v;
boolean v, v, v, v;
java.lang.Class[] v;
java.lang.reflect.Field v;
java.lang.Exception v, v;
java.lang.Class v, v, v;
v := @parameter: java.lang.Throwable;
if v != null goto label;
return 0;
label:
v = v instanceof java.sql.SQLException;
if v == 0 goto label;
return 1;
label:
v = v instanceof java.lang.reflect.InvocationTargetException;
if v == 0 goto label;
return 1;
label:
v = staticinvoke <org.apache.isis.commons.exceptions.ExceptionUtils: boolean isThrowableNested()>();
if v == 0 goto label;
return 1;
label:
v = virtualinvoke v.<java.lang.Object: java.lang.Class getClass()>();
v = <org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.String[] CAUSE_METHOD_NAMES>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
label:
v = <org.apache.isis.commons.internal._Constants: java.lang.Class[] emptyClasses>;
v = virtualinvoke v.<java.lang.Class: java.lang.reflect.Method getMethod(java.lang.String,java.lang.Class[])>(v, v);
if v == null goto label;
v = class "Ljava/lang/Throwable;";
v = virtualinvoke v.<java.lang.reflect.Method: java.lang.Class getReturnType()>();
v = virtualinvoke v.<java.lang.Class: boolean isAssignableFrom(java.lang.Class)>(v);
if v == 0 goto label;
label:
return 1;
label:
v := @caughtexception;
label:
v = v + 1;
goto label;
label:
v = virtualinvoke v.<java.lang.Class: java.lang.reflect.Field getField(java.lang.String)>("detail");
if v == null goto label;
label:
return 1;
label:
v := @caughtexception;
label:
return 0;
catch java.lang.NoSuchMethodException from label to label with label;
catch java.lang.SecurityException from label to label with label;
catch java.lang.NoSuchFieldException from label to label with label;
catch java.lang.SecurityException from label to label with label;
}
public static java.lang.Throwable[] getThrowables(java.lang.Throwable)
{
java.lang.Throwable v;
java.util.List v;
java.lang.Object[] v;
java.lang.Throwable[] v;
int v;
v := @parameter: java.lang.Throwable;
v = staticinvoke <org.apache.isis.commons.exceptions.ExceptionUtils: java.util.List getThrowableList(java.lang.Throwable)>(v);
v = interfaceinvoke v.<java.util.List: int size()>();
v = newarray (java.lang.Throwable)[v];
v = interfaceinvoke v.<java.util.List: java.lang.Object[] toArray(java.lang.Object[])>(v);
return v;
}
public static java.util.List getThrowableList(java.lang.Throwable)
{
java.lang.Throwable v;
boolean v;
java.util.ArrayList v;
v := @parameter: java.lang.Throwable;
v = new java.util.ArrayList;
specialinvoke v.<java.util.ArrayList: void <init>()>();
label:
if v == null goto label;
v = interfaceinvoke v.<java.util.List: boolean contains(java.lang.Object)>(v);
if v != 0 goto label;
interfaceinvoke v.<java.util.List: boolean add(java.lang.Object)>(v);
v = staticinvoke <org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.Throwable getCause(java.lang.Throwable)>(v);
goto label;
label:
return v;
}
public static java.lang.String getFullStackTrace(java.lang.Throwable)
{
java.io.PrintWriter v;
java.lang.Throwable v, v, v;
java.io.StringWriter v;
java.lang.StringBuffer v;
java.lang.Throwable[] v;
int v, v;
java.lang.String v;
boolean v;
v := @parameter: java.lang.Throwable;
v = new java.io.StringWriter;
specialinvoke v.<java.io.StringWriter: void <init>()>();
v = new java.io.PrintWriter;
specialinvoke v.<java.io.PrintWriter: void <init>(java.io.Writer,boolean)>(v, 1);
v = staticinvoke <org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.Throwable[] getThrowables(java.lang.Throwable)>(v);
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v = v[v];
virtualinvoke v.<java.lang.Throwable: void printStackTrace(java.io.PrintWriter)>(v);
v = v[v];
v = staticinvoke <org.apache.isis.commons.exceptions.ExceptionUtils: boolean isNestedThrowable(java.lang.Throwable)>(v);
if v != 0 goto label;
v = v + 1;
goto label;
label:
v = virtualinvoke v.<java.io.StringWriter: java.lang.StringBuffer getBuffer()>();
v = virtualinvoke v.<java.lang.StringBuffer: java.lang.String toString()>();
return v;
}
static void <clinit>()
{
java.lang.Class[] v;
java.lang.Class v;
java.lang.String[] v;
java.lang.reflect.Method v;
java.lang.Exception v;
v = newarray (java.lang.String)[12];
v[0] = "getCause";
v[1] = "getNextException";
v[2] = "getTargetException";
v[3] = "getException";
v[4] = "getSourceException";
v[5] = "getRootCause";
v[6] = "getCausedByException";
v[7] = "getNested";
v[8] = "getLinkedException";
v[9] = "getNestedException";
v[10] = "getLinkedCause";
v[11] = "getThrowable";
<org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.String[] CAUSE_METHOD_NAMES> = v;
label:
v = class "Ljava/lang/Throwable;";
v = <org.apache.isis.commons.internal._Constants: java.lang.Class[] emptyClasses>;
v = virtualinvoke v.<java.lang.Class: java.lang.reflect.Method getMethod(java.lang.String,java.lang.Class[])>("getCause", v);
label:
goto label;
label:
v := @caughtexception;
v = null;
label:
<org.apache.isis.commons.exceptions.ExceptionUtils: java.lang.reflect.Method THROWABLE_CAUSE_METHOD> = v;
return;
catch java.lang.Exception from label to label with label;
}
}