package com.yoursway.utils.bugs;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.yoursway.utils.annotations.UsedFromGeneratedByteCode;
public class Bugs {
private static BugHandler handler;
static class ReflectionBugHandler implements BugHandler {
private final Method method;
public ReflectionBugHandler(Method method) {
if (method == null)
throw new NullPointerException("method is null");
this.method = method;
}
public void bug(Throwable throwable) {
try {
method.invoke(null, throwable);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
static {
try {
Class<?> feedbackClass = Thread.currentThread().getContextClassLoader().loadClass("com.yoursway.feedback.Feedback");
Method method = feedbackClass.getMethod("bug", Throwable.class);
handler = new ReflectionBugHandler(method);
} catch (ClassNotFoundException e) {
} catch (SecurityException e) {
} catch (NoSuchMethodException e) {
}
if (handler == null)
handler = new DefaultBugHandler();
}
public static void setHandler(BugHandler handler) {
Bugs.handler = handler;
}
public static void bug(Throwable throwable) {
handler.bug(throwable);
}
public static void listenerFailed(Throwable error, Object listener, String event) {
bug(new ListenerFailed(error).add("event", event));
}
@UsedFromGeneratedByteCode
public static void listenerFailed(Throwable error, Object listener) {
bug(new ListenerFailed(error));
}
public static void illegalCaseRecovery(Severity severity, String description) {
bug(new IllegalCaseRecovery(description));
}
public static void illegalCaseRecovery(String description) {
bug(new IllegalCaseRecovery(description));
}
public static void unknownErrorRecovery(Severity severity, Throwable error) {
bug(error);
}
public static void unknownErrorRecovery(Throwable error) {
bug(error);
}
public static void cleanupFailed(Throwable error, Object target) {
bug(new DisposeFailed(error));
}
}