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 ClassInfo implements ClassDescriptor { private final Class<?> clazz; public ClassInfo(Class<?> clazz) { this.clazz = clazz; } @Override public boolean equals(Object o) { if ((o == null) || !(o instanceof ClassDescriptor)) { return false; } ClassDescriptor other = (ClassDescriptor)o; return getSignature().equals(other.getSignature()); } @Override public boolean isPrimitive() { return clazz.isPrimitive(); } @Override public boolean isArray() { return clazz.isArray(); } @Override public boolean isInterface() { return clazz.isInterface(); } @Override public String getSignature() { String sig; if (clazz == void.class) { sig = "V"; } else if (clazz == boolean.class) { sig = "Z"; } else if (clazz == char.class) { sig = "C"; } else if (clazz == byte.class) { sig = "B"; } else if (clazz == short.class) { sig = "S"; } else if (clazz == int.class) { sig = "I"; } else if (clazz == long.class) { sig = "J"; } else if (clazz == float.class) { sig = "F"; } else if (clazz == double.class) { sig = "D"; } else { sig = clazz.getName(); } return sig; } @Override public String getName() { return clazz.getName(); } @Override public MethodDescriptor[] getConstructors() { Constructor<?>[] ctors = clazz.getConstructors(); MethodDescriptor[] ret = new MethodDescriptor[ctors.length]; for (int i=0; i<ctors.length; i++) { ret[i] = new MethodInfo(ctors[i]); } return ret; } @Override public ClassDescriptor getComponentType() { return new ClassInfo(clazz.getComponentType()); } @Override public MethodDescriptor[] getDeclaredMethods() { Method[] methods = clazz.getDeclaredMethods(); MethodDescriptor[] ret = new MethodDescriptor[methods.length]; for (int i=0; i<methods.length; i++) { ret[i] = new MethodInfo(methods[i]); } return ret; } @Override public ClassDescriptor[] getInterfaces() { Class<?>[] ifaces = clazz.getInterfaces(); ClassDescriptor[] ret = new ClassDescriptor[ifaces.length]; for (int i=0; i<ifaces.length; i++) { ret[i] = new ClassInfo(ifaces[i]); } return ret; } @Override public ClassDescriptor getSuperclass() { Class<?> superClass = clazz.getSuperclass(); return (superClass != null) ? new ClassInfo(superClass) : null; } @Override public boolean isSynthetic() { return clazz.isSynthetic(); } @Override public boolean isStatic() { return Modifier.isStatic(clazz.getModifiers()); } @Override public boolean isPrivate() { return Modifier.isPrivate(clazz.getModifiers()); } @Override public boolean isPublic() { return Modifier.isPublic(clazz.getModifiers()); } @Override public boolean isProtected() { return Modifier.isProtected(clazz.getModifiers()); } @Override public boolean isFinal() { return Modifier.isFinal(clazz.getModifiers()); } @Override public boolean isAbstract() { return Modifier.isAbstract(clazz.getModifiers()); } }