This adds a couple of annotation methods that were missing from the
original reference versions of Field, Method and Constructor and thus
are also missing from the new VM interface.

ChangeLog:

2008-03-04  Andrew John Hughes  <[EMAIL PROTECTED]>

        * java/lang/reflect/AccessibleObject.java:
        (getAnnotation(Class)): Documented.
        (getAnnotations()): Likewise.
        (getDeclaredAnnotations()): Likewise.
        (isAnnotationPresent(Class)): Likewise.
        * java/lang/reflect/Constructor.java,
        * java/lang/reflect/Field.java,
        * java/lang/reflect/Method.java,
        * vm/reference/java/lang/reflect/VMConstructor.java,
        * vm/reference/java/lang/reflect/VMField.java,
        * vm/reference/java/lang/reflect/VMMethod.java:
        (getAnnotation(Class)): Added.
        (getDeclaredAnnotations()): Likewise.

-- 
Andrew :)

Support Free Java!
Contribute to GNU Classpath and the OpenJDK
http://www.gnu.org/software/classpath
http://openjdk.java.net
PGP Key: 94EFD9D8 (http://subkeys.pgp.net)
Fingerprint = F8EF F1EA 401E 2E60 15FA  7927 142C 2591 94EF D9D8
Index: java/lang/reflect/AccessibleObject.java
===================================================================
RCS file: /sources/classpath/classpath/java/lang/reflect/AccessibleObject.java,v
retrieving revision 1.9
diff -u -3 -p -u -r1.9 AccessibleObject.java
--- java/lang/reflect/AccessibleObject.java	10 Dec 2006 20:25:45 -0000	1.9
+++ java/lang/reflect/AccessibleObject.java	5 Mar 2008 21:09:43 -0000
@@ -160,21 +160,72 @@ public class AccessibleObject
     this.flag = flag;
   }
 
+  /**
+   * <p>
+   * Returns the element's annotation for the specified annotation type,
+   * or <code>null</code> if no such annotation exists.
+   * </p>
+   * <p>
+   * <strong>This method must be overridden by subclasses to provide
+   * appropriate behaviour.</strong>
+   * </p>
+   *
+   * @param annotationClass the type of annotation to look for.
+   * @return this element's annotation for the specified type, or
+   *         <code>null</code> if no such annotation exists.
+   * @throws NullPointerException if the annotation class is <code>null</code>.
+   */
   public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
   {
     throw new AssertionError("Subclass must override this method");
   }
 
+  /**
+   * Returns all annotations associated with the element.  If there are
+   * no annotations associated with the element, then a zero-length array
+   * will be returned.  The returned array may be modified by the client
+   * code, but this will have no effect on the annotation content of the
+   * element, and hence no effect on the return value of this method for
+   * future callers.
+   *
+   * @return this element's annotations.
+   */
   public Annotation[] getAnnotations()
   {
     return getDeclaredAnnotations();
   }
 
+  /**
+   * <p>
+   * Returns all annotations directly defined by the element.  If there are
+   * no annotations directly associated with the element, then a zero-length
+   * array will be returned.  The returned array may be modified by the client
+   * code, but this will have no effect on the annotation content of this
+   * class, and hence no effect on the return value of this method for
+   * future callers.
+   * </p>
+   * <p>
+   * <strong>This method must be overridden by subclasses to provide
+   * appropriate behaviour.</strong>
+   * </p>
+   *
+   * @return the annotations directly defined by the element.
+   * @since 1.5
+   */
   public Annotation[] getDeclaredAnnotations()
   {
     throw new AssertionError("Subclass must override this method");
   }
 
+  /**
+   * Returns true if an annotation for the specified type is associated
+   * with the element.  This is primarily a short-hand for using marker
+   * annotations.
+   *
+   * @param annotationClass the type of annotation to look for.
+   * @return true if an annotation exists for the specified type.
+   * @since 1.5
+   */
   public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
   {
     return getAnnotation(annotationClass) != null;
Index: java/lang/reflect/Constructor.java
===================================================================
RCS file: /sources/classpath/classpath/java/lang/reflect/Constructor.java,v
retrieving revision 1.7
diff -u -3 -p -u -r1.7 Constructor.java
--- java/lang/reflect/Constructor.java	3 Mar 2008 21:21:32 -0000	1.7
+++ java/lang/reflect/Constructor.java	5 Mar 2008 21:09:43 -0000
@@ -414,4 +414,35 @@ public final class Constructor<T>
     return cons.getParameterAnnotations();
   }
 
+  /**
+   * Returns the element's annotation for the specified annotation type,
+   * or <code>null</code> if no such annotation exists.
+   *
+   * @param annotationClass the type of annotation to look for.
+   * @return this element's annotation for the specified type, or
+   *         <code>null</code> if no such annotation exists.
+   * @throws NullPointerException if the annotation class is <code>null</code>.
+   */
+  @SuppressWarnings("unchecked")
+  public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+  {
+    return (T) cons.getAnnotation(annotationClass);
+  }
+
+  /**
+   * Returns all annotations directly defined by the element.  If there are
+   * no annotations directly associated with the element, then a zero-length
+   * array will be returned.  The returned array may be modified by the client
+   * code, but this will have no effect on the annotation content of this
+   * class, and hence no effect on the return value of this method for
+   * future callers.
+   *
+   * @return the annotations directly defined by the element.
+   * @since 1.5
+   */
+  public Annotation[] getDeclaredAnnotations()
+  {
+    return cons.getDeclaredAnnotations();
+  }
+
 }
Index: java/lang/reflect/Field.java
===================================================================
RCS file: /sources/classpath/classpath/java/lang/reflect/Field.java,v
retrieving revision 1.7
diff -u -3 -p -u -r1.7 Field.java
--- java/lang/reflect/Field.java	3 Mar 2008 21:21:32 -0000	1.7
+++ java/lang/reflect/Field.java	5 Mar 2008 21:09:43 -0000
@@ -43,6 +43,8 @@ import gnu.java.lang.CPStringBuilder;
 
 import gnu.java.lang.reflect.FieldSignatureParser;
 
+import java.lang.annotation.Annotation;
+
 /**
  * The Field class represents a member variable of a class. It also allows
  * dynamic access to a member, via reflection. This works for both
@@ -698,4 +700,35 @@ extends AccessibleObject implements Memb
     return p.getFieldType();
   }
 
+  /**
+   * Returns the element's annotation for the specified annotation type,
+   * or <code>null</code> if no such annotation exists.
+   *
+   * @param annotationClass the type of annotation to look for.
+   * @return this element's annotation for the specified type, or
+   *         <code>null</code> if no such annotation exists.
+   * @throws NullPointerException if the annotation class is <code>null</code>.
+   */
+  @SuppressWarnings("unchecked")
+  public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+  {
+    return (T) f.getAnnotation(annotationClass);
+  }
+
+  /**
+   * Returns all annotations directly defined by the element.  If there are
+   * no annotations directly associated with the element, then a zero-length
+   * array will be returned.  The returned array may be modified by the client
+   * code, but this will have no effect on the annotation content of this
+   * class, and hence no effect on the return value of this method for
+   * future callers.
+   *
+   * @return the annotations directly defined by the element.
+   * @since 1.5
+   */
+  public Annotation[] getDeclaredAnnotations()
+  {
+    return f.getDeclaredAnnotations();
+  }
+
 }
Index: java/lang/reflect/Method.java
===================================================================
RCS file: /sources/classpath/classpath/java/lang/reflect/Method.java,v
retrieving revision 1.6
diff -u -3 -p -u -r1.6 Method.java
--- java/lang/reflect/Method.java	3 Mar 2008 21:21:32 -0000	1.6
+++ java/lang/reflect/Method.java	5 Mar 2008 21:09:43 -0000
@@ -464,4 +464,35 @@ extends AccessibleObject implements Memb
     return m.getParameterAnnotations();
   }
 
+  /**
+   * Returns the element's annotation for the specified annotation type,
+   * or <code>null</code> if no such annotation exists.
+   *
+   * @param annotationClass the type of annotation to look for.
+   * @return this element's annotation for the specified type, or
+   *         <code>null</code> if no such annotation exists.
+   * @throws NullPointerException if the annotation class is <code>null</code>.
+   */
+  @SuppressWarnings("unchecked")
+  public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+  {
+    return (T) m.getAnnotation(annotationClass);
+  }
+
+  /**
+   * Returns all annotations directly defined by the element.  If there are
+   * no annotations directly associated with the element, then a zero-length
+   * array will be returned.  The returned array may be modified by the client
+   * code, but this will have no effect on the annotation content of this
+   * class, and hence no effect on the return value of this method for
+   * future callers.
+   *
+   * @return the annotations directly defined by the element.
+   * @since 1.5
+   */
+  public Annotation[] getDeclaredAnnotations()
+  {
+    return m.getDeclaredAnnotations();
+  }
+
 }
Index: vm/reference/java/lang/reflect/VMConstructor.java
===================================================================
RCS file: /sources/classpath/classpath/vm/reference/java/lang/reflect/VMConstructor.java,v
retrieving revision 1.2
diff -u -3 -p -u -r1.2 VMConstructor.java
--- vm/reference/java/lang/reflect/VMConstructor.java	3 Mar 2008 21:21:32 -0000	1.2
+++ vm/reference/java/lang/reflect/VMConstructor.java	5 Mar 2008 21:09:51 -0000
@@ -136,4 +136,28 @@ final class VMConstructor
     return true;
   }
 
+  /**
+   * Returns the element's annotation for the specified annotation type,
+   * or <code>null</code> if no such annotation exists.
+   *
+   * @param annotationClass the type of annotation to look for.
+   * @return this element's annotation for the specified type, or
+   *         <code>null</code> if no such annotation exists.
+   * @throws NullPointerException if the annotation class is <code>null</code>.
+   */
+  native Annotation getAnnotation(Class annotationClass);
+
+  /**
+   * Returns all annotations directly defined by the element.  If there are
+   * no annotations directly associated with the element, then a zero-length
+   * array will be returned.  The returned array may be modified by the client
+   * code, but this will have no effect on the annotation content of this
+   * class, and hence no effect on the return value of this method for
+   * future callers.
+   *
+   * @return the annotations directly defined by the element.
+   * @since 1.5
+   */
+  native Annotation[] getDeclaredAnnotations();
+
 }
Index: vm/reference/java/lang/reflect/VMField.java
===================================================================
RCS file: /sources/classpath/classpath/vm/reference/java/lang/reflect/VMField.java,v
retrieving revision 1.2
diff -u -3 -p -u -r1.2 VMField.java
--- vm/reference/java/lang/reflect/VMField.java	3 Mar 2008 21:21:32 -0000	1.2
+++ vm/reference/java/lang/reflect/VMField.java	5 Mar 2008 21:09:51 -0000
@@ -38,6 +38,8 @@ exception statement from your version. *
 
 package java.lang.reflect;
 
+import java.lang.annotation.Annotation;
+
 final class VMField
 {
   Class declaringClass;
@@ -514,4 +516,28 @@ final class VMField
     return true;
   }
 
+  /**
+   * Returns the element's annotation for the specified annotation type,
+   * or <code>null</code> if no such annotation exists.
+   *
+   * @param annotationClass the type of annotation to look for.
+   * @return this element's annotation for the specified type, or
+   *         <code>null</code> if no such annotation exists.
+   * @throws NullPointerException if the annotation class is <code>null</code>.
+   */
+  native Annotation getAnnotation(Class annotationClass);
+
+  /**
+   * Returns all annotations directly defined by the element.  If there are
+   * no annotations directly associated with the element, then a zero-length
+   * array will be returned.  The returned array may be modified by the client
+   * code, but this will have no effect on the annotation content of this
+   * class, and hence no effect on the return value of this method for
+   * future callers.
+   *
+   * @return the annotations directly defined by the element.
+   * @since 1.5
+   */
+  native Annotation[] getDeclaredAnnotations();
+
 }
Index: vm/reference/java/lang/reflect/VMMethod.java
===================================================================
RCS file: /sources/classpath/classpath/vm/reference/java/lang/reflect/VMMethod.java,v
retrieving revision 1.2
diff -u -3 -p -u -r1.2 VMMethod.java
--- vm/reference/java/lang/reflect/VMMethod.java	3 Mar 2008 21:21:33 -0000	1.2
+++ vm/reference/java/lang/reflect/VMMethod.java	5 Mar 2008 21:09:51 -0000
@@ -175,5 +175,29 @@ final class VMMethod
     return true;
   }
 
+  /**
+   * Returns the element's annotation for the specified annotation type,
+   * or <code>null</code> if no such annotation exists.
+   *
+   * @param annotationClass the type of annotation to look for.
+   * @return this element's annotation for the specified type, or
+   *         <code>null</code> if no such annotation exists.
+   * @throws NullPointerException if the annotation class is <code>null</code>.
+   */
+  native Annotation getAnnotation(Class annotationClass);
+
+  /**
+   * Returns all annotations directly defined by the element.  If there are
+   * no annotations directly associated with the element, then a zero-length
+   * array will be returned.  The returned array may be modified by the client
+   * code, but this will have no effect on the annotation content of this
+   * class, and hence no effect on the return value of this method for
+   * future callers.
+   *
+   * @return the annotations directly defined by the element.
+   * @since 1.5
+   */
+  native Annotation[] getDeclaredAnnotations();
+
 }
 

Attachment: signature.asc
Description: Digital signature

Reply via email to