/*
 * FindBugs - Find bugs in Java programs
 * Copyright (C) 2003,2004 University of Maryland
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package edu.umd.cs.findbugs.visitclass;

import java.io.PrintStream;

import org.apache.bcel.classfile.Attribute;
import org.apache.bcel.classfile.Code;
import org.apache.bcel.classfile.CodeException;
import org.apache.bcel.classfile.Constant;
import org.apache.bcel.classfile.ConstantCP;
import org.apache.bcel.classfile.ConstantClass;
import org.apache.bcel.classfile.ConstantDouble;
import org.apache.bcel.classfile.ConstantFieldref;
import org.apache.bcel.classfile.ConstantFloat;
import org.apache.bcel.classfile.ConstantInteger;
import org.apache.bcel.classfile.ConstantInterfaceMethodref;
import org.apache.bcel.classfile.ConstantLong;
import org.apache.bcel.classfile.ConstantMethodref;
import org.apache.bcel.classfile.ConstantNameAndType;
import org.apache.bcel.classfile.ConstantPool;
import org.apache.bcel.classfile.ConstantString;
import org.apache.bcel.classfile.ConstantUtf8;
import org.apache.bcel.classfile.ConstantValue;
import org.apache.bcel.classfile.ExceptionTable;
import org.apache.bcel.classfile.Field;
import org.apache.bcel.classfile.InnerClass;
import org.apache.bcel.classfile.InnerClasses;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.LineNumber;
import org.apache.bcel.classfile.LineNumberTable;
import org.apache.bcel.classfile.LocalVariable;
import org.apache.bcel.classfile.LocalVariableTable;
import org.apache.bcel.classfile.LocalVariableTypeTable;
import org.apache.bcel.classfile.Method;
import org.apache.bcel.classfile.Signature;
import org.apache.bcel.classfile.SourceFile;
import org.apache.bcel.classfile.StackMap;
import org.apache.bcel.classfile.StackMapEntry;
import org.apache.bcel.classfile.Synthetic;
import org.apache.bcel.classfile.Unknown;
import org.apache.bcel.classfile.Visitor;


/**
 * Fixedup of from org.apache.bcel.classfile.Visitor
 *
 * @author <A HREF="http://www.cs.umd.edu/~pugh">William Pugh</A>
 * @version 980818
 */
public abstract class BetterVisitor implements Visitor {


	/** clone() is overridden to change access control from protected
	 *  to public. Originally we compelled subclasses not to throw
	 *  CloneNotSupportedException, but that was unfriendly to some
	 *  third-parties with existing code. */
	@Override
	public Object clone() throws CloneNotSupportedException {
		return super.clone();
	}


	////////////////// In short form //////////////////////
	// General classes
	public void visit(JavaClass obj) {
	}

	public void visit(ConstantPool obj) {
	}

	public void visit(Field obj) {
	}

	public void visit(Method obj) {
	}

	// Constants

	public void visit(Constant obj) {
	}

	public void visit(ConstantCP obj) {
		visit((Constant) obj);
	}

	public void visit(ConstantMethodref obj) {
		visit((ConstantCP) obj);
	}

	public void visit(ConstantFieldref obj) {
		visit((ConstantCP) obj);
	}

	public void visit(ConstantInterfaceMethodref obj) {
		visit((ConstantCP) obj);
	}

	public void visit(ConstantClass obj) {
		visit((Constant) obj);
	}

	public void visit(ConstantDouble obj) {
		visit((Constant) obj);
	}

	public void visit(ConstantFloat obj) {
		visit((Constant) obj);
	}

	public void visit(ConstantInteger obj) {
		visit((Constant) obj);
	}

	public void visit(ConstantLong obj) {
		visit((Constant) obj);
	}

	public void visit(ConstantNameAndType obj) {
		visit((Constant) obj);
	}

	public void visit(ConstantString obj) {
		visit((Constant) obj);
	}

	public void visit(ConstantUtf8 obj) {
		visit((Constant) obj);
	}

	// Attributes
	public void visit(Attribute obj) {
	}

	public void visit(Code obj) {
		visit((Attribute) obj);
	}

	public void visit(ConstantValue obj) {
		visit((Attribute) obj);
	}

	public void visit(ExceptionTable obj) {
		visit((Attribute) obj);
	}

	public void visit(InnerClasses obj) {
		visit((Attribute) obj);
	}

	public void visit(LineNumberTable obj) {
		visit((Attribute) obj);
	}

	public void visit(LocalVariableTable obj) {
		visit((Attribute) obj);
	}
	public void visit(LocalVariableTypeTable obj) {
		// must explicitly override to get functionality
	}

	public void visit(SourceFile obj) {
		visit((Attribute) obj);
	}

	public void visit(Synthetic obj) {
		visit((Attribute) obj);
	}

	public void visit(org.apache.bcel.classfile.Deprecated obj) {
		visit((Attribute) obj);
	}

	public void visit(Unknown obj) {
		visit((Attribute) obj);
	}

	public void visit(Signature obj) {
		visit((Attribute) obj);
	}

	// Extra classes (i.e. leaves in this context)
	public void visit(InnerClass obj) {
	}

	public void visit(LocalVariable obj) {
	}

	public void visit(LineNumber obj) {
	}

	public void visit(CodeException obj) {
	}

	public void visit(StackMapEntry obj) {
	}

	// Attributes
	public void visitCode(Code obj) {
		visit(obj);
	}

	public void visitCodeException(CodeException obj) {
		visit(obj);
	}

	// Constants
	public void visitConstantClass(ConstantClass obj) {
		visit(obj);
	}

	public void visitConstantDouble(ConstantDouble obj) {
		visit(obj);
	}

	public void visitConstantFieldref(ConstantFieldref obj) {
		visit(obj);
	}

	public void visitConstantFloat(ConstantFloat obj) {
		visit(obj);
	}

	public void visitConstantInteger(ConstantInteger obj) {
		visit(obj);
	}

	public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj) {
		visit(obj);
	}

	public void visitConstantLong(ConstantLong obj) {
		visit(obj);
	}

	public void visitConstantMethodref(ConstantMethodref obj) {
		visit(obj);
	}

	public void visitConstantNameAndType(ConstantNameAndType obj) {
		visit(obj);
	}

	public void visitConstantPool(ConstantPool obj) {
		visit(obj);
	}

	public void visitConstantString(ConstantString obj) {
		visit(obj);
	}

	public void visitConstantUtf8(ConstantUtf8 obj) {
		visit(obj);
	}

	public void visitConstantValue(ConstantValue obj) {
		visit(obj);
	}

	public void visitDeprecated(org.apache.bcel.classfile.Deprecated obj) {
		visit(obj);
	}

	public void visitExceptionTable(ExceptionTable obj) {
		visit(obj);
	}

	public void visitField(Field obj) {
		visit(obj);
	}

	// Extra classes (i.e. leaves in this context)
	public void visitInnerClass(InnerClass obj) {
		visit(obj);
	}

	public void visitInnerClasses(InnerClasses obj) {
		visit(obj);
	}

	// General classes
	public void visitJavaClass(JavaClass obj) {
		visit(obj);
	}

	public void visitLineNumber(LineNumber obj) {
		visit(obj);
	}

	public void visitLineNumberTable(LineNumberTable obj) {
		visit(obj);
	}

	public void visitLocalVariable(LocalVariable obj) {
		visit(obj);
	}

	public void visitLocalVariableTable(LocalVariableTable obj) {
		visit(obj);
	}
	public void visitLocalVariableTypeTable(LocalVariableTypeTable obj) {
		visit(obj);
	}


	public void visitMethod(Method obj) {
		visit(obj);
	}

	public void visitSignature(Signature obj) {
		visit(obj);
	}

	public void visitSourceFile(SourceFile obj) {
		visit(obj);
	}

	public void visitSynthetic(Synthetic obj) {
		visit(obj);
	}

	public void visitUnknown(Unknown obj) {
		visit(obj);
	}

	public void visitStackMapEntry(StackMapEntry obj) {
		visit(obj);
	}

	public void visitStackMap(StackMap obj) {
		visit(obj);
	}

	public void report(PrintStream out) {
	}



}
