package japicmp.exception;
import japicmp.cmp.JarArchiveComparator;
import japicmp.cmp.JarArchiveComparatorOptions;
public class JApiCmpException extends RuntimeException {
private static final long serialVersionUID = 1L;
private final Reason reason;
public enum Reason {
CliError,
NormalTermination,
IoException,
JaxbException,
ClassLoading,
IllegalState,
IllegalArgument, XsltError
}
public JApiCmpException(Reason reason, String msg) {
super(msg);
this.reason = reason;
}
public JApiCmpException(Reason reason, String msg, Throwable t) {
super(msg, t);
this.reason = reason;
}
public Reason getReason() {
return reason;
}
public static JApiCmpException cliError(String format, Object... args) {
return of(Reason.CliError, format, args);
}
public static JApiCmpException of(Reason reason, String format, Object... args) {
String msg = String.format(format, args);
return new JApiCmpException(reason, msg);
}
public static JApiCmpException forClassLoading(Exception e, String name, JarArchiveComparator jarArchiveComparator) {
String classPathAsString = "(CLASSPATH=" + jarArchiveComparator.getCommonClasspathAsString() + ")";
if (jarArchiveComparator.getJarArchiveComparatorOptions().getClassPathMode() == JarArchiveComparatorOptions.ClassPathMode.TWO_SEPARATE_CLASSPATHS) {
classPathAsString = "(OLD CLASSPATH=" + jarArchiveComparator.getOldClassPathAsString() + " / NEW CLASSPATH=" + jarArchiveComparator.getNewClassPathAsString() + ")";
}
return new JApiCmpException(JApiCmpException.Reason.ClassLoading, "Could not load '" + name + "': " + e.getMessage() + ". Please make sure that all libraries have been added to the classpath " + classPathAsString + " or try the option '--ignore-missing-classes'.", e);
}
}