--- /dev/null
+/*******************************************************************************
+ * 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 <code>Throwable</code> that caused the failure.
+ *
+ * @return the wrappered <code>Throwable</code>, or <code>null</code>
+ * 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);
+ }
+ }
+ }
+}
\ No newline at end of file