1 27 package ch.ethz.prose.query; 28 29 import java.lang.reflect.Method ; 31 import java.lang.NoSuchMethodException ; 32 33 39 public 40 class MethodSurrogate extends Surrogate implements java.io.Serializable { 41 42 private String declaringClassName; 43 private String methodName; 44 private String [] parameterTypes; 45 private int hashCode; 46 47 52 public MethodSurrogate(Method m) 53 { 54 if (m == null) 55 throw new IllegalArgumentException ("specified method must not be null"); 56 57 hashCode = m.hashCode(); 58 methodName = m.getName(); 59 Class [] pt = m.getParameterTypes(); 60 parameterTypes = new String [pt.length]; 61 for (int i=0; i<pt.length; i++) 62 parameterTypes[i] = pt[i].getName(); 63 64 declaringClassName = m.getDeclaringClass().getName(); 65 } 66 67 68 73 public String getName() 74 { 75 return methodName; 76 } 77 78 79 84 public String [] getParameterTypes() 85 { 86 return parameterTypes; 87 } 88 89 90 public Object toRealInstance() throws ClassNotFoundException , NoSuchMethodException 91 { 92 return toRealInstance(declaringClassName); 93 } 94 95 102 public Method toRealInstance(String className) throws ClassNotFoundException , NoSuchMethodException 103 { 104 Class [] parameterClasses = new Class [parameterTypes.length]; 105 106 Class declaringClass = Class.forName(className); 107 for (int i=0; i < parameterTypes.length; i++) 108 { 109 if (parameterTypes[i].equals("byte")) 110 parameterClasses[i] = byte.class; 111 else if (parameterTypes[i].equals("short")) 112 parameterClasses[i] = short.class; 113 else if (parameterTypes[i].equals("int")) 114 parameterClasses[i] = int.class; 115 else if (parameterTypes[i].equals("long")) 116 parameterClasses[i] = long.class; 117 else if (parameterTypes[i].equals("char")) 118 parameterClasses[i] = char.class; 119 else if (parameterTypes[i].equals("float")) 120 parameterClasses[i] = float.class; 121 else if (parameterTypes[i].equals("double")) 122 parameterClasses[i] = double.class; 123 else if (parameterTypes[i].equals("boolean")) 124 parameterClasses[i] = boolean.class; 125 else 126 parameterClasses[i] = Class.forName(parameterTypes[i]); 127 } 128 return (declaringClass.getDeclaredMethod(methodName, parameterClasses)); 129 } 130 131 132 139 public boolean equals(Object o) 140 { 141 if (!(o instanceof MethodSurrogate)) 142 return false; 143 144 MethodSurrogate other = (MethodSurrogate) o; 145 146 if (!this.getName().equals(other.getName())) 147 return false; 148 149 if (this.parameterTypes.length != other.parameterTypes.length) 150 return false; 151 152 for (int i=0; i<this.parameterTypes.length; i++) 153 if (!this.parameterTypes[i].equals(other.parameterTypes[i])) 154 return false; 155 156 return true; 157 } 158 159 public int hashCode() 160 { 161 return hashCode; 162 } 163 164 168 public String toString() 169 { 170 String s = methodName + "("; 171 for (int i=0; i < parameterTypes.length; i++) 172 { 173 if (i==0) 174 { 175 s += parameterTypes[i]; 176 continue; 177 } 178 s += (", " + parameterTypes[i]); 179 } 180 s += ")"; 181 return s; 182 } 183 } 184 185 | Popular Tags |