package ash.reverse.struct;

/**
 * VisotorパターンのVisitor：ObjectRecordのサブクラスを訪問し処理する。
 * <p>
 * 訪問対象は、FileRecord、ClassRecord、MethodRecord、FieldRecord の４種類。
 * 訪問対象の各クラスに対して visit(object)メソッドを定義する。
 * 各メソッドは、訪問対象クラスが提供するメソッドやデータを利用できる。
 * @see ObjectRecord
 */
public interface ObjectVisitor {
	/**
	 * FileRecordを訪問する。
	 * @param frec 訪問対象のFileRecord
	 */
	public void visit(FileRecord frec);

	/**
	 * ClassRecordを訪問する。
	 * @param crec 訪問対象のClassRecord
	 */
	public void visit(ClassRecord crec);

	/**
	 * MethodRecordを訪問する。
	 * @param mrec 訪問対象のMethodRecord
	 */
	public void visit(MethodRecord mrec);

	/**
	 * FieldRecordを訪問する。
	 * @param field 訪問対象のFieldRecord
	 */
	public void visit(FieldRecord field);
}
