/*
 * Common Library for TBAS Softwares
 * Language: Java
 *
 * All Rights Reserved.
 * Copyright (c) 1999-2003 Tsukuba Bunko.
 *
 * $Id: ReflectionUtil.java,v 1.1 2003/08/31 13:49:10 ppoi Exp $
 */
package tsukuba_bunko.util;

import	java.lang.reflect.Method;


/**
 * リフレクション操作をサポートするためのユーティリティクラスです。
 * @author	$Author: ppoi $
 * @version	$Revision: 1.1 $
 */
public final class ReflectionUtil	{

	/**
	 * <code>ReflectionUtil</code> はインスタンスを生成できません。
	 */
	private ReflectionUtil(){;}


	/**
	 * メソッドを検索します。
	 * @param	clazz	検索対象のクラス
	 * @param	methodName	検索するメソッド名
	 * @param	parameterTypes	検索するメソッドの仮引数クラスリスト(配列)
	 * @param	searchSuperclasses	スーパークラスを検索対象にする場合 <code>true</code>、それ以外の場合 <code>false</code>
	 * @return	検索結果。メソッドが検出されなかった場合は <code>null</code>
	 */
	public static Method findMethod( Class clazz, String methodName, Class[] parameterTypes, boolean searchSuperclasses )
	{
		Method	method = null;
		do	{
			try	{
				method = clazz.getDeclaredMethod( methodName, parameterTypes );
			}
			catch( NoSuchMethodException nsme )	{
				//ignore.
			}
			clazz = clazz.getSuperclass();
		} while( (method == null) && (clazz != null) && searchSuperclasses );

		return method;
	}
}