001 package edu.rice.cs.cunit.subAnnot; 002 003 import edu.rice.cs.cunit.classFile.ClassFile; 004 import edu.rice.cs.cunit.classFile.ClassFileTools; 005 import edu.rice.cs.cunit.classFile.FieldInfo; 006 import edu.rice.cs.cunit.classFile.attributes.RuntimeVisibleAnnotationsAttributeInfo; 007 008 import java.io.IOException; 009 import java.lang.reflect.AnnotatedElement; 010 import java.lang.reflect.Field; 011 import java.lang.reflect.Type; 012 013 /** 014 * Extended Field class to support annotations with subclassing. 015 * 016 * @author Mathias Ricken 017 */ 018 public class FieldEx extends AAnnotatedElementEx { 019 /** 020 * The java.lang.reflect.Field object that represents the field. 021 */ 022 public final Field java; 023 024 /** 025 * Create an extended Field instance for the specified field. 026 * @param f field 027 */ 028 public FieldEx(Field f) { 029 this(f, null); 030 } 031 032 /** 033 * Create an extended Field instance for the specified field. 034 * @param f field 035 * @param cl class loader 036 */ 037 public FieldEx(Field f, ClassLoader cl) { 038 super(cl); 039 java = f; 040 findFieldAnnotationsAttributeInfo(f); 041 } 042 043 /** 044 * Return the annotated element. 045 * @return annotated element 046 */ 047 protected AnnotatedElement getAnnotatedElement() { 048 return java; 049 } 050 051 /** 052 * Find the annotations attribute and assign it to the _ai field. 053 * @param field field whose annotations attribute should be found 054 */ 055 protected void findFieldAnnotationsAttributeInfo(Field field) { 056 ClassFileTools.ClassLocation cl = ClassFileTools.findClassFile(field.getDeclaringClass().getName(), _classPath); 057 if (cl==null) { 058 setClassFileNotFound(true); 059 return; 060 } 061 ClassFile cf = cl.getClassFile(); 062 try { 063 cl.close(); 064 } 065 catch(IOException e) { /* ignore */ } 066 for(FieldInfo fi: cf.getFields()) { 067 if (fi.getName().toString().equals(field.getName())) { 068 String pt = fi.getDescriptor().toString(); 069 String cpt = field.getType().getName(); 070 if ((pt.length()>0) && (pt.charAt(0)=='[') && 071 (cpt.length()>0) && (cpt.charAt(0)=='[')) { 072 // if both type strings are arrays, cut off matching '[' prefixes 073 do { 074 pt = pt.substring(1); 075 cpt = cpt.substring(1); 076 } while ((pt.length()>0) && (pt.charAt(0)=='[') && 077 (cpt.length()>0) && (cpt.charAt(0)=='[')); 078 // if this is an object array, the class name will be "Lxxx;" 079 // cut off the 'L' and ';' 080 if ((cpt.charAt(0)=='L') && (cpt.charAt(cpt.length()-1)==';')) { 081 cpt = cpt.substring(1,cpt.length()-1); 082 } 083 } 084 if (ClassFileTools.getTypeString(pt,"").equals(cpt+" ")) { 085 _ai = new RuntimeVisibleAnnotationsAttributeInfo[1]; 086 _ai[0] = (RuntimeVisibleAnnotationsAttributeInfo) 087 cf.getAttribute(RuntimeVisibleAnnotationsAttributeInfo.getAttributeName()); 088 return; 089 } 090 } 091 } 092 throw new ClassFormatError("Could not find field "+ field +" in class files"); 093 } 094 095 /** 096 * Returns the name of the field represented by this <code>Field</code> object. 097 * @return name 098 */ 099 public String getName() { 100 return java.getName(); 101 } 102 103 /** 104 * Returns the Java language modifiers for the field represented by this <code>Field</code> object, as an integer. 105 * The <code>Modifier</code> class should be used to decode the modifiers. 106 * @return modifiers 107 * @see java.lang.reflect.Modifier 108 */ 109 public int getModifiers() { 110 return java.getModifiers(); 111 } 112 113 /** 114 * Returns <tt>true</tt> if this field represents an element of an enumerated type; returns <tt>false</tt> 115 * otherwise. 116 * 117 * @return <tt>true</tt> if and only if this field represents an element of an enumerated type. 118 * 119 * @since 1.5 120 */ 121 public boolean isEnumConstant() { 122 return java.isEnumConstant(); 123 } 124 125 /** 126 * Returns <tt>true</tt> if this field is a synthetic field; returns <tt>false</tt> otherwise. 127 * 128 * @return true if and only if this field is a synthetic field as defined by the Java Language Specification. 129 * 130 * @since 1.5 131 */ 132 public boolean isSynthetic() { 133 return java.isSynthetic(); 134 } 135 136 /** 137 * Returns a <code>Class</code> object that identifies the declared type for the field represented by this 138 * <code>Field</code> object. 139 * 140 * @return a <code>Class</code> object identifying the declared type of the field represented by this object 141 */ 142 public Class<?> getType() { 143 return java.getType(); 144 } 145 146 /** 147 * Returns a <tt>Type</tt> object that represents the declared type for the field represented by this <tt>Field</tt> 148 * object. 149 * <p/> 150 * <p>If the <tt>Type</tt> is a parameterized type, the <tt>Type</tt> object returned must accurately reflect the 151 * actual type parameters used in the source code. 152 * <p/> 153 * <p>If an the type of the underlying field is a type variable or a parameterized type, it is created. Otherwise, 154 * it is resolved. 155 * 156 * @return a <tt>Type</tt> object that represents the declared type for the field represented by this <tt>Field</tt> 157 * object 158 * 159 * @throws java.lang.reflect.GenericSignatureFormatError 160 * if the generic field signature does not conform to the format specified in the 161 * Java Virtual Machine Specification, 3rd edition 162 * @throws TypeNotPresentException if the generic type signature of the underlying field refers to a non-existent 163 * type declaration 164 * @throws java.lang.reflect.MalformedParameterizedTypeException 165 * if the generic signature of the underlying field refers to a parameterized type 166 * that cannot be instantiated for any reason 167 * @since 1.5 168 */ 169 public Type getGenericType() { 170 return java.getGenericType(); 171 } 172 173 /** 174 * Compares this <code>Field</code> against the specified object. Returns true if the objects are the same. Two 175 * <code>Field</code> objects are the same if they were declared by the same class and have the same name and type. 176 */ 177 public boolean equals(Object obj) { 178 return (obj!=null)&&(obj.getClass().equals(this.getClass()) && (java.equals(obj))); 179 } 180 181 /** 182 * Returns a hashcode for this <code>Field</code>. This is computed as the exclusive-or of the hashcodes for the 183 * underlying field's declaring class name and its name. 184 */ 185 public int hashCode() { 186 return java.hashCode(); 187 } 188 189 /** 190 * Returns a string describing this <code>Field</code>. The format is the access modifiers for the field, if any, 191 * followed by the field type, followed by a space, followed by the fully-qualified name of the class declaring the 192 * field, followed by a period, followed by the name of the field. For example: 193 * <pre> 194 * public static final int java.lang.Thread.MIN_PRIORITY 195 * private int java.io.FileDescriptor.fd 196 * </pre> 197 * <p/> 198 * <p>The modifiers are placed in canonical order as specified by "The Java Language Specification". This is 199 * <tt>public</tt>, <tt>protected</tt> or <tt>private</tt> first, and then other modifiers in the following order: 200 * <tt>static</tt>, <tt>final</tt>, <tt>transient</tt>, <tt>volatile</tt>. 201 */ 202 public String toString() { 203 return java.toString(); 204 } 205 206 /** 207 * Returns a string describing this <code>Field</code>, including its generic type. The format is the access 208 * modifiers for the field, if any, followed by the generic field type, followed by a space, followed by the 209 * fully-qualified name of the class declaring the field, followed by a period, followed by the name of the field. 210 * <p/> 211 * <p>The modifiers are placed in canonical order as specified by "The Java Language Specification". This is 212 * <tt>public</tt>, <tt>protected</tt> or <tt>private</tt> first, and then other modifiers in the following order: 213 * <tt>static</tt>, <tt>final</tt>, <tt>transient</tt>, <tt>volatile</tt>. 214 * 215 * @return a string describing this <code>Field</code>, including its generic type 216 * 217 * @since 1.5 218 */ 219 public String toGenericString() { 220 return java.toGenericString(); 221 } 222 223 /** 224 * Returns the value of the field represented by this <code>Field</code>, on the specified object. The value is 225 * automatically wrapped in an object if it has a primitive type. 226 * <p/> 227 * <p>The underlying field's value is obtained as follows: 228 * <p/> 229 * <p>If the underlying field is a static field, the <code>obj</code> argument is ignored; it may be null. 230 * <p/> 231 * <p>Otherwise, the underlying field is an instance field. If the specified <code>obj</code> argument is null, the 232 * method throws a <code>NullPointerException.</code> If the specified object is not an instance of the class or 233 * interface declaring the underlying field, the method throws an <code>IllegalArgumentException</code>. 234 * <p/> 235 * <p>If this <code>Field</code> object enforces Java language access control, and the underlying field is 236 * inaccessible, the method throws an <code>IllegalAccessException</code>. If the underlying field is static, the 237 * class that declared the field is initialized if it has not already been initialized. 238 * <p/> 239 * <p>Otherwise, the value is retrieved from the underlying instance or static field. If the field has a primitive 240 * type, the value is wrapped in an object before being returned, otherwise it is returned as is. 241 * <p/> 242 * <p>If the field is hidden in the type of <code>obj</code>, the field's value is obtained according to the 243 * preceding rules. 244 * 245 * @param obj object from which the represented field's value is to be extracted 246 * 247 * @return the value of the represented field in object <tt>obj</tt>; primitive values are wrapped in an appropriate 248 * object before being returned 249 * 250 * @throws IllegalAccessException if the underlying field is inaccessible. 251 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 252 * declaring the underlying field (or a subclass or implementor thereof). 253 * @throws NullPointerException if the specified object is null and the field is an instance field. 254 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 255 */ 256 public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException { 257 return java.get(obj); 258 } 259 260 /** 261 * Gets the value of a static or instance <code>boolean</code> field. 262 * 263 * @param obj the object to extract the <code>boolean</code> value from 264 * 265 * @return the value of the <code>boolean</code> field 266 * 267 * @throws IllegalAccessException if the underlying field is inaccessible. 268 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 269 * declaring the underlying field (or a subclass or implementor thereof), or if 270 * the field value cannot be converted to the type <code>boolean</code> by a 271 * widening conversion. 272 * @throws NullPointerException if the specified object is null and the field is an instance field. 273 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 274 * @see java.lang.reflect.Field#get 275 */ 276 public boolean getBoolean(Object obj) throws IllegalArgumentException, IllegalAccessException { 277 return java.getBoolean(obj); 278 } 279 280 /** 281 * Gets the value of a static or instance <code>byte</code> field. 282 * 283 * @param obj the object to extract the <code>byte</code> value from 284 * 285 * @return the value of the <code>byte</code> field 286 * 287 * @throws IllegalAccessException if the underlying field is inaccessible. 288 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 289 * declaring the underlying field (or a subclass or implementor thereof), or if 290 * the field value cannot be converted to the type <code>byte</code> by a 291 * widening conversion. 292 * @throws NullPointerException if the specified object is null and the field is an instance field. 293 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 294 * @see java.lang.reflect.Field#get 295 */ 296 public byte getByte(Object obj) throws IllegalArgumentException, IllegalAccessException { 297 return java.getByte(obj); 298 } 299 300 /** 301 * Gets the value of a static or instance field of type <code>char</code> or of another primitive type convertible 302 * to type <code>char</code> via a widening conversion. 303 * 304 * @param obj the object to extract the <code>char</code> value from 305 * 306 * @return the value of the field converted to type <code>char</code> 307 * 308 * @throws IllegalAccessException if the underlying field is inaccessible. 309 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 310 * declaring the underlying field (or a subclass or implementor thereof), or if 311 * the field value cannot be converted to the type <code>char</code> by a 312 * widening conversion. 313 * @throws NullPointerException if the specified object is null and the field is an instance field. 314 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 315 * @see java.lang.reflect.Field#get 316 */ 317 public char getChar(Object obj) throws IllegalArgumentException, IllegalAccessException { 318 return java.getChar(obj); 319 } 320 321 /** 322 * Gets the value of a static or instance field of type <code>short</code> or of another primitive type convertible 323 * to type <code>short</code> via a widening conversion. 324 * 325 * @param obj the object to extract the <code>short</code> value from 326 * 327 * @return the value of the field converted to type <code>short</code> 328 * 329 * @throws IllegalAccessException if the underlying field is inaccessible. 330 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 331 * declaring the underlying field (or a subclass or implementor thereof), or if 332 * the field value cannot be converted to the type <code>short</code> by a 333 * widening conversion. 334 * @throws NullPointerException if the specified object is null and the field is an instance field. 335 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 336 * @see java.lang.reflect.Field#get 337 */ 338 public short getShort(Object obj) throws IllegalArgumentException, IllegalAccessException { 339 return java.getShort(obj); 340 } 341 342 /** 343 * Gets the value of a static or instance field of type <code>int</code> or of another primitive type convertible to 344 * type <code>int</code> via a widening conversion. 345 * 346 * @param obj the object to extract the <code>int</code> value from 347 * 348 * @return the value of the field converted to type <code>int</code> 349 * 350 * @throws IllegalAccessException if the underlying field is inaccessible. 351 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 352 * declaring the underlying field (or a subclass or implementor thereof), or if 353 * the field value cannot be converted to the type <code>int</code> by a 354 * widening conversion. 355 * @throws NullPointerException if the specified object is null and the field is an instance field. 356 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 357 * @see java.lang.reflect.Field#get 358 */ 359 public int getInt(Object obj) throws IllegalArgumentException, IllegalAccessException { 360 return java.getInt(obj); 361 } 362 363 /** 364 * Gets the value of a static or instance field of type <code>long</code> or of another primitive type convertible 365 * to type <code>long</code> via a widening conversion. 366 * 367 * @param obj the object to extract the <code>long</code> value from 368 * 369 * @return the value of the field converted to type <code>long</code> 370 * 371 * @throws IllegalAccessException if the underlying field is inaccessible. 372 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 373 * declaring the underlying field (or a subclass or implementor thereof), or if 374 * the field value cannot be converted to the type <code>long</code> by a 375 * widening conversion. 376 * @throws NullPointerException if the specified object is null and the field is an instance field. 377 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 378 * @see java.lang.reflect.Field#get 379 */ 380 public long getLong(Object obj) throws IllegalArgumentException, IllegalAccessException { 381 return java.getLong(obj); 382 } 383 384 /** 385 * Gets the value of a static or instance field of type <code>float</code> or of another primitive type convertible 386 * to type <code>float</code> via a widening conversion. 387 * 388 * @param obj the object to extract the <code>float</code> value from 389 * 390 * @return the value of the field converted to type <code>float</code> 391 * 392 * @throws IllegalAccessException if the underlying field is inaccessible. 393 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 394 * declaring the underlying field (or a subclass or implementor thereof), or if 395 * the field value cannot be converted to the type <code>float</code> by a 396 * widening conversion. 397 * @throws NullPointerException if the specified object is null and the field is an instance field. 398 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 399 * @see java.lang.reflect.Field#get 400 */ 401 public float getFloat(Object obj) throws IllegalArgumentException, IllegalAccessException { 402 return java.getFloat(obj); 403 } 404 405 /** 406 * Gets the value of a static or instance field of type <code>double</code> or of another primitive type convertible 407 * to type <code>double</code> via a widening conversion. 408 * 409 * @param obj the object to extract the <code>double</code> value from 410 * 411 * @return the value of the field converted to type <code>double</code> 412 * 413 * @throws IllegalAccessException if the underlying field is inaccessible. 414 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 415 * declaring the underlying field (or a subclass or implementor thereof), or if 416 * the field value cannot be converted to the type <code>double</code> by a 417 * widening conversion. 418 * @throws NullPointerException if the specified object is null and the field is an instance field. 419 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 420 * @see java.lang.reflect.Field#get 421 */ 422 public double getDouble(Object obj) throws IllegalArgumentException, IllegalAccessException { 423 return java.getDouble(obj); 424 } 425 426 /** 427 * Sets the field represented by this <code>Field</code> object on the specified object argument to the specified 428 * new value. The new value is automatically unwrapped if the underlying field has a primitive type. 429 * <p/> 430 * <p>The operation proceeds as follows: 431 * <p/> 432 * <p>If the underlying field is static, the <code>obj</code> argument is ignored; it may be null. 433 * <p/> 434 * <p>Otherwise the underlying field is an instance field. If the specified object argument is null, the method 435 * throws a <code>NullPointerException</code>. If the specified object argument is not an instance of the class or 436 * interface declaring the underlying field, the method throws an <code>IllegalArgumentException</code>. 437 * <p/> 438 * <p>If this <code>Field</code> object enforces Java language access control, and the underlying field is 439 * inaccessible, the method throws an <code>IllegalAccessException</code>. 440 * <p/> 441 * <p>If the underlying field is final, the method throws an <code>IllegalAccessException</code> unless 442 * <code>setAccessible(true)</code> has succeeded for this field and this field is non-static. Setting a final field 443 * in this way is meaningful only during deserialization or reconstruction of instances of classes with blank final 444 * fields, before they are made available for access by other parts of a program. Use in any other context may have 445 * unpredictable effects, including cases in which other parts of a program continue to use the original value of 446 * this field. 447 * <p/> 448 * <p>If the underlying field is of a primitive type, an unwrapping conversion is attempted to convert the new value 449 * to a value of a primitive type. If this attempt fails, the method throws an 450 * <code>IllegalArgumentException</code>. 451 * <p/> 452 * <p>If, after possible unwrapping, the new value cannot be converted to the type of the underlying field by an 453 * identity or widening conversion, the method throws an <code>IllegalArgumentException</code>. 454 * <p/> 455 * <p>If the underlying field is static, the class that declared the field is initialized if it has not already been 456 * initialized. 457 * <p/> 458 * <p>The field is set to the possibly unwrapped and widened new value. 459 * <p/> 460 * <p>If the field is hidden in the type of <code>obj</code>, the field's value is set according to the preceding 461 * rules. 462 * 463 * @param obj the object whose field should be modified 464 * @param value the new value for the field of <code>obj</code> being modified 465 * 466 * @throws IllegalAccessException if the underlying field is inaccessible. 467 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 468 * declaring the underlying field (or a subclass or implementor thereof), or if 469 * an unwrapping conversion fails. 470 * @throws NullPointerException if the specified object is null and the field is an instance field. 471 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 472 */ 473 public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException { 474 java.set(obj, value); 475 } 476 477 /** 478 * Sets the value of a field as a <code>boolean</code> on the specified object. This method is equivalent to 479 * <code>set(obj, zObj)</code>, where <code>zObj</code> is a <code>Boolean</code> object and 480 * <code>zObj.booleanValue() == z</code>. 481 * 482 * @param obj the object whose field should be modified 483 * @param z the new value for the field of <code>obj</code> being modified 484 * 485 * @throws IllegalAccessException if the underlying field is inaccessible. 486 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 487 * declaring the underlying field (or a subclass or implementor thereof), or if 488 * an unwrapping conversion fails. 489 * @throws NullPointerException if the specified object is null and the field is an instance field. 490 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 491 * @see java.lang.reflect.Field#set 492 */ 493 public void setBoolean(Object obj, boolean z) throws IllegalArgumentException, IllegalAccessException { 494 java.setBoolean(obj, z); 495 } 496 497 /** 498 * Sets the value of a field as a <code>byte</code> on the specified object. This method is equivalent to 499 * <code>set(obj, bObj)</code>, where <code>bObj</code> is a <code>Byte</code> object and <code>bObj.byteValue() == 500 * b</code>. 501 * 502 * @param obj the object whose field should be modified 503 * @param b the new value for the field of <code>obj</code> being modified 504 * 505 * @throws IllegalAccessException if the underlying field is inaccessible. 506 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 507 * declaring the underlying field (or a subclass or implementor thereof), or if 508 * an unwrapping conversion fails. 509 * @throws NullPointerException if the specified object is null and the field is an instance field. 510 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 511 * @see java.lang.reflect.Field#set 512 */ 513 public void setByte(Object obj, byte b) throws IllegalArgumentException, IllegalAccessException { 514 java.setByte(obj, b); 515 } 516 517 /** 518 * Sets the value of a field as a <code>char</code> on the specified object. This method is equivalent to 519 * <code>set(obj, cObj)</code>, where <code>cObj</code> is a <code>Character</code> object and 520 * <code>cObj.charValue() == c</code>. 521 * 522 * @param obj the object whose field should be modified 523 * @param c the new value for the field of <code>obj</code> being modified 524 * 525 * @throws IllegalAccessException if the underlying field is inaccessible. 526 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 527 * declaring the underlying field (or a subclass or implementor thereof), or if 528 * an unwrapping conversion fails. 529 * @throws NullPointerException if the specified object is null and the field is an instance field. 530 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 531 * @see java.lang.reflect.Field#set 532 */ 533 public void setChar(Object obj, char c) throws IllegalArgumentException, IllegalAccessException { 534 java.setChar(obj, c); 535 } 536 537 /** 538 * Sets the value of a field as a <code>short</code> on the specified object. This method is equivalent to 539 * <code>set(obj, sObj)</code>, where <code>sObj</code> is a <code>Short</code> object and <code>sObj.shortValue() 540 * == s</code>. 541 * 542 * @param obj the object whose field should be modified 543 * @param s the new value for the field of <code>obj</code> being modified 544 * 545 * @throws IllegalAccessException if the underlying field is inaccessible. 546 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 547 * declaring the underlying field (or a subclass or implementor thereof), or if 548 * an unwrapping conversion fails. 549 * @throws NullPointerException if the specified object is null and the field is an instance field. 550 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 551 * @see java.lang.reflect.Field#set 552 */ 553 public void setShort(Object obj, short s) throws IllegalArgumentException, IllegalAccessException { 554 java.setShort(obj, s); 555 } 556 557 /** 558 * Sets the value of a field as an <code>int</code> on the specified object. This method is equivalent to 559 * <code>set(obj, iObj)</code>, where <code>iObj</code> is a <code>Integer</code> object and <code>iObj.intValue() 560 * == i</code>. 561 * 562 * @param obj the object whose field should be modified 563 * @param i the new value for the field of <code>obj</code> being modified 564 * 565 * @throws IllegalAccessException if the underlying field is inaccessible. 566 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 567 * declaring the underlying field (or a subclass or implementor thereof), or if 568 * an unwrapping conversion fails. 569 * @throws NullPointerException if the specified object is null and the field is an instance field. 570 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 571 * @see java.lang.reflect.Field#set 572 */ 573 public void setInt(Object obj, int i) throws IllegalArgumentException, IllegalAccessException { 574 java.setInt(obj, i); 575 } 576 577 /** 578 * Sets the value of a field as a <code>long</code> on the specified object. This method is equivalent to 579 * <code>set(obj, lObj)</code>, where <code>lObj</code> is a <code>Long</code> object and <code>lObj.longValue() == 580 * l</code>. 581 * 582 * @param obj the object whose field should be modified 583 * @param l the new value for the field of <code>obj</code> being modified 584 * 585 * @throws IllegalAccessException if the underlying field is inaccessible. 586 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 587 * declaring the underlying field (or a subclass or implementor thereof), or if 588 * an unwrapping conversion fails. 589 * @throws NullPointerException if the specified object is null and the field is an instance field. 590 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 591 * @see java.lang.reflect.Field#set 592 */ 593 public void setLong(Object obj, long l) throws IllegalArgumentException, IllegalAccessException { 594 java.setLong(obj, l); 595 } 596 597 /** 598 * Sets the value of a field as a <code>float</code> on the specified object. This method is equivalent to 599 * <code>set(obj, fObj)</code>, where <code>fObj</code> is a <code>Float</code> object and <code>fObj.floatValue() 600 * == f</code>. 601 * 602 * @param obj the object whose field should be modified 603 * @param f the new value for the field of <code>obj</code> being modified 604 * 605 * @throws IllegalAccessException if the underlying field is inaccessible. 606 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 607 * declaring the underlying field (or a subclass or implementor thereof), or if 608 * an unwrapping conversion fails. 609 * @throws NullPointerException if the specified object is null and the field is an instance field. 610 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 611 * @see java.lang.reflect.Field#set 612 */ 613 public void setFloat(Object obj, float f) throws IllegalArgumentException, IllegalAccessException { 614 java.setFloat(obj, f); 615 } 616 617 /** 618 * Sets the value of a field as a <code>double</code> on the specified object. This method is equivalent to 619 * <code>set(obj, dObj)</code>, where <code>dObj</code> is a <code>Double</code> object and <code>dObj.doubleValue() 620 * == d</code>. 621 * 622 * @param obj the object whose field should be modified 623 * @param d the new value for the field of <code>obj</code> being modified 624 * 625 * @throws IllegalAccessException if the underlying field is inaccessible. 626 * @throws IllegalArgumentException if the specified object is not an instance of the class or interface 627 * declaring the underlying field (or a subclass or implementor thereof), or if 628 * an unwrapping conversion fails. 629 * @throws NullPointerException if the specified object is null and the field is an instance field. 630 * @throws ExceptionInInitializerError if the initialization provoked by this method fails. 631 * @see java.lang.reflect.Field#set 632 */ 633 public void setDouble(Object obj, double d) throws IllegalArgumentException, IllegalAccessException { 634 java.setDouble(obj, d); 635 } 636 }