diff options
Diffstat (limited to 'gl4java/GL4JavaReflections.java')
-rw-r--r-- | gl4java/GL4JavaReflections.java | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/gl4java/GL4JavaReflections.java b/gl4java/GL4JavaReflections.java new file mode 100644 index 0000000..79969bf --- /dev/null +++ b/gl4java/GL4JavaReflections.java @@ -0,0 +1,163 @@ + +/** + * @(#) GL4JavaReflections.java + */ + +package gl4java; + +import java.lang.System; +import java.lang.String; +import java.lang.reflect.*; + +/** + * The function-declaration holder ! + * + * @see CFuncVariable + * @version 1.00, 12. Novemeber 1999 + * @author Sven Goethel + * + */ +public class GL4JavaReflections + implements Cloneable +{ + public Object methodClassInstance=null; + public Class type=null; + public String methodName=null; + public Class[] argList=null; + + public GL4JavaReflections ( Object methodClassInstance, + Class type, String methodName, + Class[] argList ) + { + this.methodClassInstance=methodClassInstance; + this.type=type; + this.methodName=methodName; + this.argList=argList; + } + + protected Object clone() + throws CloneNotSupportedException + { + int i; + Class[] args = new Class[argList.length]; + + for(i=0; i<argList.length; i++) + args[i] = argList[i]; + + GL4JavaReflections nobj = + new GL4JavaReflections(methodClassInstance, + type, methodName, args); + + + return nobj; + } + + public String getMethodSignature() + { + return getMethodSignature(argList, type); + } + + public static String patchJvmSigType(String s) + { + if(s==null) + return null; + + if(s.startsWith("[")) + return s; + + if(s.equals("boolean")) + return "Z"; + if(s.equals("byte")) + return "B"; + if(s.equals("char")) + return "C"; + if(s.equals("short")) + return "S"; + if(s.equals("int")) + return "I"; + if(s.equals("long")) + return "J"; + if(s.equals("float")) + return "F"; + if(s.equals("double")) + return "D"; + if(s.equals("void")) + return "V"; + + return s; + } + + public static String getMethodSignature(Class[] args, Class type) + { + String res = new String(); + String helper = null; + int i,j; + + res += "("; + + for (i=0; i<args.length; i++) + { + res += patchJvmSigType(args[i].getName()); + } + res += ")"+patchJvmSigType(type.getName()); + return res; + } + + public static GL4JavaReflections findMethod(Object methodClassInstance, + String methodName, + String signature) + { + Method[] methods = null; + try { + methods = + methodClassInstance.getClass().getDeclaredMethods(); + } catch (Exception ex) { + System.out.println("ERROR: GL4JavaReflections.findMethod"); + ex.printStackTrace(); + return null; + } + + GL4JavaReflections res=null; + Method method = null; + String name = null; + Class[] args = null; + Class t = null; + + for(int i=0; i<methods.length; i++) + { + method = methods[i]; + name = method.getName(); + if(name.equals(methodName)) + { + args = method.getParameterTypes(); + t = method.getReturnType(); + if(signature==null || + signature.equals(getMethodSignature(args, t)) + ) + { + res = new GL4JavaReflections( + methodClassInstance, + method.getReturnType(), + methodName, + args); + return res; + } + } + } + System.out.println("GL4JavaReflections.findMethod: could not find method: "+methodName+" "+signature); + + return null; + } + + public static String findMethodSignature (Object methodClassInstance, + String methodName, + String signature) + { + GL4JavaReflections ref = + findMethod(methodClassInstance, methodName, signature); + if(ref==null) return null; + return ref.getMethodSignature(); + } +} + + |