package totalcross.lang.reflect;
public class Method4D implements Member4D
{
int mod;
Object nativeStruct; // TClass
String name;
Class<?> declaringClass; // class that owns this method
Class<?> parameterTypes[];
Class<?> exceptionTypes[];
Class<?> type;
Class<?> returnType;
String cached;
public Class<?> getDeclaringClass()
{
return declaringClass;
}
public String getName()
{
return name;
}
public int getModifiers()
{
return mod;
}
public Class<?> getType()
{
return type;
}
public boolean equals(Object obj)
{
if (!(obj instanceof Method4D))
return false;
Method4D m = (Method4D)obj;
if (m.mod != mod || !m.name.equals(name) || !m.type.getName().equals(type.getName()) || !m.declaringClass.getName().equals(declaringClass.getName()) || parameterTypes.length != m.parameterTypes.length/* || exceptionTypes.length != m.exceptionTypes.length*/)
return false;
for (int i =0; i < parameterTypes.length; i++) if (!parameterTypes[i].equals(m.parameterTypes[i])) return false;
//for (int i =0; i < exceptionTypes.length; i++) if (!exceptionTypes[i].equals(m.exceptionTypes[i])) return false; - not needed
return true;
}
public int hashCode()
{
return declaringClass.getName().hashCode() ^ name.hashCode();
}
static String toString(Class<?> c)
{
if (c == Void.TYPE) return "void";
if (!c.isPrimitive())
return c.getName();
if (c == Integer.TYPE) return "int";
if (c == Boolean.TYPE) return "boolean";
if (c == Byte.TYPE) return "byte";
if (c == Character.TYPE) return "char";
if (c == Short.TYPE) return "short";
if (c == Long.TYPE) return "long";
if (c == Double.TYPE) return "double";
if (c == Float.TYPE) return "float";
return null;
}
public String toString()
{
if (cached != null) return cached;
StringBuffer sb = new StringBuffer(128); // public static final void TCTestWin$TestMethod.printTest(int,short,java.lang.String,boolean,java.lang.Object,long,byte,char,double)
sb.append(Modifier4D.toString(mod)); if (sb.length() > 0) sb.append(' ');
sb.append(toString(returnType)).append(' ');
sb.append(declaringClass.getName()).append('.').append(name).append('(');
for (int i = 0, last = parameterTypes.length-1; i <= last; i++)
{
sb.append(toString(parameterTypes[i]));
if (i < last) sb.append(',');
}
return cached = sb.append(')').toString();
}
public Class<?> getReturnType()
{
return returnType;
}
public Class<?>[] getParameterTypes()
{
return parameterTypes;
}
public Class<?>[] getExceptionTypes()
{
return exceptionTypes;
}
public native Object invoke(Object obj, Object args[]) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException4D;
}