package gw.internal.gosu.dynamic; import gw.lang.reflect.IAnnotationInfo; import gw.lang.reflect.IMethodCallHandler; import gw.lang.reflect.IParameterInfo; import gw.lang.reflect.IType; import gw.lang.reflect.ITypeInfo; import gw.lang.reflect.MethodInfoBase; import gw.lang.reflect.ReflectUtil; import gw.lang.reflect.SimpleParameterInfo; import java.util.Collections; import java.util.List; /** */ public class DynamicMethodInfo extends MethodInfoBase implements IMethodCallHandler { private String _strName; private IType[] _paramTypes; private IParameterInfo[] _paramInfos; protected DynamicMethodInfo( ITypeInfo container, String strName, IType... paramTypes ) { super( container ); _strName = strName; _paramTypes = paramTypes == null ? IType.EMPTY_ARRAY : paramTypes; makeParameters(); } private void makeParameters() { _paramInfos = new IParameterInfo[_paramTypes.length]; for( int i = 0; i < _paramTypes.length; i++ ) { _paramInfos[i] = new SimpleParameterInfo( this, _paramTypes[i], i ); } } @Override public IParameterInfo[] getParameters() { return _paramInfos; } @Override public IType getReturnType() { return getOwnersType(); } @Override public IMethodCallHandler getCallHandler() { return this; } @Override public String getName() { return _strName; } @Override public List<IAnnotationInfo> getDeclaredAnnotations() { return Collections.emptyList(); } @Override public Object handleCall( Object ctx, Object... args ) { return ReflectUtil.invokeMethod( ctx, getName(), args ); } }