package com.tns.bindings.desc.reflection; import com.tns.bindings.desc.ClassDescriptor; import com.tns.bindings.desc.MethodDescriptor; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class MethodInfo implements MethodDescriptor { private boolean m_isSynthetic; private final boolean m_isStatic; private final boolean m_isPrivate; private final boolean m_isPublic; private final boolean m_isProtected; private final boolean m_isFinal; private final boolean m_isAbstract; private Class<?>[] m_parameterTypes; private Class<?> m_retType; private String m_name; private String m_genericSig; private boolean m_isInterface; public MethodInfo(Method method) { this(method.getModifiers()); m_isSynthetic = method.isSynthetic(); m_parameterTypes = method.getParameterTypes(); m_retType = method.getReturnType(); m_name = method.getName(); m_genericSig = method.toGenericString(); m_isInterface = false; } public MethodInfo(Constructor<?> ctor) { this(ctor.getModifiers()); m_isSynthetic = ctor.isSynthetic(); m_parameterTypes = ctor.getParameterTypes(); m_retType = void.class; m_name = ctor.getName(); m_genericSig = ctor.toGenericString(); m_isInterface = false; } private MethodInfo(int modifiers) { m_isStatic = Modifier.isStatic(modifiers); m_isPrivate = Modifier.isPrivate(modifiers); m_isPublic = Modifier.isPublic(modifiers); m_isProtected = Modifier.isProtected(modifiers); m_isFinal = Modifier.isFinal(modifiers); m_isAbstract = Modifier.isAbstract(modifiers); } @Override public ClassDescriptor[] getParameterTypes() { ClassDescriptor[] ret = new ClassDescriptor[m_parameterTypes.length]; for (int i=0; i<m_parameterTypes.length; i++) { ret[i] = new ClassInfo(m_parameterTypes[i]); } return ret; } @Override public String getName() { return m_name; } @Override public ClassDescriptor getReturnType() { return new ClassInfo(m_retType); } @Override public String toGenericString() { return m_genericSig; } @Override public boolean isInterfaceMethod() { return m_isInterface; } @Override public void setAsInterfaceMethod() { this.m_isInterface = true; } @Override public boolean isSynthetic() { return m_isSynthetic; } @Override public boolean isStatic() { return m_isStatic; } @Override public boolean isPrivate() { return m_isPrivate; } @Override public boolean isPublic() { return m_isPublic; } @Override public boolean isProtected() { return m_isProtected; } @Override public boolean isFinal() { return m_isFinal; } @Override public boolean isAbstract() { return m_isAbstract; } }