package com.telerik.metadata;
import com.telerik.metadata.desc.ClassDescriptor;
import com.telerik.metadata.desc.MethodDescriptor;
import com.telerik.metadata.desc.TypeDescriptor;
import java.util.ArrayList;
import org.apache.bcel.generic.Type;
public class ClassUtil {
private ClassUtil() {
}
public static boolean isPrimitive(ClassDescriptor clazz) {
boolean isPrimitive = !clazz.isClass() && !clazz.isEnum()
&& !clazz.isInterface();
return isPrimitive;
}
public static boolean isPrimitive(TypeDescriptor type) {
boolean isPrimitive = type.equals(TypeDescriptor.BOOLEAN)
|| type.equals(TypeDescriptor.CHAR) || type.equals(TypeDescriptor.BYTE)
|| type.equals(TypeDescriptor.SHORT) || type.equals(TypeDescriptor.INT)
|| type.equals(TypeDescriptor.LONG) || type.equals(TypeDescriptor.FLOAT)
|| type.equals(TypeDescriptor.DOUBLE) || type.equals(TypeDescriptor.VOID);
return isPrimitive;
}
public static boolean isPrimitive(String name) {
boolean isPrimitive = name.equals("C") || name.equals("Z")
|| name.equals("B") || name.equals("S") || name.equals("I")
|| name.equals("J") || name.equals("F") || name.equals("D")
|| name.equals("V");
return isPrimitive;
}
public static boolean isArray(ClassDescriptor clazz) {
boolean isArray = isArray(clazz.getClassName());
return isArray;
}
public static boolean isArray(String className) {
boolean isArray = className.startsWith("[");
return isArray;
}
public static ClassDescriptor getEnclosingClass(ClassDescriptor clazz) {
ClassDescriptor enclosingClass = null;
String className = clazz.getClassName();
int idx = className.lastIndexOf("$");
if (idx > 0) {
String name = className.substring(0, idx);
enclosingClass = ClassRepo.findClass(name);
}
return enclosingClass;
}
public static String getSimpleName(ClassDescriptor clazz) {
String className = clazz.getClassName();
int idx = className.lastIndexOf("$");
if (idx < 0) {
idx = className.lastIndexOf(".");
}
String simpleName = className.substring(idx + 1);
return simpleName;
}
public static MethodDescriptor[] getAllMethods(ClassDescriptor clazz) {
ArrayList<MethodDescriptor> methods = new ArrayList<MethodDescriptor>();
ClassDescriptor currentClass = clazz;
while (currentClass != null) {
MethodDescriptor[] currentClassMethods = currentClass.getMethods();
for (MethodDescriptor m : currentClassMethods) {
if ((m.isPublic() || m.isProtected()) && !m.isSynthetic()) {
methods.add(m);
}
}
currentClass = getSuperclass(currentClass);
}
return methods.toArray(new MethodDescriptor[methods.size()]);
}
public static String getCanonicalName(String className) {
String canonicalName;
if (className.startsWith("L") && className.endsWith(";")) {
canonicalName = className.substring(1, className.length() - 1)
.replace('/', '.');
} else {
canonicalName = className;
}
return canonicalName;
}
public static ClassDescriptor getSuperclass(ClassDescriptor clazz) {
ClassDescriptor superClass = null;
if (!clazz.getClassName().equals("java.lang.Object")) {
String superClassName = clazz.getSuperclassName();
superClass = ClassRepo.findClass(superClassName);
}
return superClass;
}
public static ClassDescriptor getClassByName(String className) {
ClassDescriptor clazz = ClassRepo.findClass(className);
return clazz;
}
}