/******************************************************************************* * Copyright (c) 2000, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-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; this.fileName= fileName; } public ClassFormatException(int code) { this.errorCode= code; } public ClassFormatException(int code, int bufPos) { this.errorCode= code; this.bufferPosition= bufPos; } /** * @return int */ public int getErrorCode() { return this.errorCode; } /** * @return int */ public int getBufferPosition() { return this.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); } } } }