/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Common Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors: IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.jdt.internal.compiler.classfmt;
import java.io.PrintStream;
import java.io.PrintWriter;
public class ClassFormatException extends Exception {
public static final int ErrBadMagic = 1;
public static final int ErrBadMinorVersion = 2;
public static final int ErrBadMajorVersion = 3;
public static final int ErrBadConstantClass = 4;
public static final int ErrBadConstantString = 5;
public static final int ErrBadConstantNameAndType = 6;
public static final int ErrBadConstantFieldRef = 7;
public static final int ErrBadConstantMethodRef = 8;
public static final int ErrBadConstantInterfaceMethodRef = 9;
public static final int ErrBadConstantPoolIndex = 10;
public static final int ErrBadSuperclassName = 11;
public static final int ErrInterfaceCannotBeFinal = 12;
public static final int ErrInterfaceMustBeAbstract = 13;
public static final int ErrBadModifiers = 14;
public static final int ErrClassCannotBeAbstractFinal = 15;
public static final int ErrBadClassname = 16;
public static final int ErrBadFieldInfo = 17;
public static final int ErrBadMethodInfo = 17;
public static final int ErrEmptyConstantPool = 18;
public static final int ErrMalformedUtf8 = 19;
public static final int ErrUnknownConstantTag = 20;
public static final int ErrTruncatedInput = 21;
public static final int ErrMethodMustBeAbstract = 22;
public static final int ErrMalformedAttribute = 23;
public static final int ErrBadInterface = 24;
public static final int ErrInterfaceMustSubclassObject = 25;
public static final int ErrIncorrectInterfaceMethods = 26;
public static final int ErrInvalidMethodName = 27;
public static final int ErrInvalidMethodSignature = 28;
private static final long serialVersionUID = 6667458511042774540L; // backward compatible
private int errorCode;
private int bufferPosition;
private RuntimeException nestedException;
private char[] fileName;
public ClassFormatException(RuntimeException e, char[] fileName) {
this.nestedException = e;
}
public ClassFormatException(int code) {
errorCode = code;
}
public ClassFormatException(int code, int bufPos) {
errorCode = code;
bufferPosition = bufPos;
}
/**
* @return int
*/
public int getErrorCode() {
return errorCode;
}
/**
* @return int
*/
public int getBufferPosition() {
return bufferPosition;
}
/**
* Returns the underlying Throwable
that caused the failure.
*
* @return the wrappered Throwable
, or null
* if the direct case of the failure was at the Java model layer
*/
public Throwable getException() {
return this.nestedException;
}
public void printStackTrace() {
printStackTrace(System.err);
}
/**
* Prints this exception's stack trace to the given print stream.
*
* @param output
* the print stream
* @since 3.0
*/
public void printStackTrace(PrintStream output) {
synchronized (output) {
super.printStackTrace(output);
Throwable throwable = getException();
if (throwable != null) {
if (this.fileName != null) {
output.print("Caused in "); //$NON-NLS-1$
output.print(this.fileName);
output.print(" by: "); //$NON-NLS-1$
} else {
output.print("Caused by: "); //$NON-NLS-1$
}
throwable.printStackTrace(output);
}
}
}
/**
* Prints this exception's stack trace to the given print writer.
*
* @param output
* the print writer
* @since 3.0
*/
public void printStackTrace(PrintWriter output) {
synchronized (output) {
super.printStackTrace(output);
Throwable throwable = getException();
if (throwable != null) {
if (this.fileName != null) {
output.print("Caused in "); //$NON-NLS-1$
output.print(this.fileName);
output.print(" by: "); //$NON-NLS-1$
} else {
output.print("Caused by: "); //$NON-NLS-1$
}
throwable.printStackTrace(output);
}
}
}
}