001    
002    package net.sourceforge.retroweaver.runtime.java.lang.reflect;
003    
004    import net.sourceforge.retroweaver.runtime.java.lang.annotation.Annotation;
005    import java.lang.reflect.*;
006    
007    /**
008     * @author Toby Reyelts
009     *         Date: Feb 21, 2005
010     *         Time: 10:30:37 PM
011     */
012    public class AccessibleObject_ {
013    
014      private AccessibleObject_() {
015              // private constructor
016      }
017     
018      public static <T extends Annotation> T getAnnotation(final AccessibleObject obj, final Class<T> annotationClass) {
019        if ( obj instanceof Constructor ) {
020          return Constructor_.getAnnotation( ( Constructor ) obj, annotationClass );
021        }
022        else if ( obj instanceof Method ) {
023          return Method_.getAnnotation( ( Method ) obj, annotationClass );
024        }
025        else if ( obj instanceof Field ) {
026          return Field_.getAnnotation( ( Field ) obj, annotationClass );
027        }
028        else {
029          throw new UnsupportedOperationException( "Unexpected AccessibleObject type: " + obj.getClass() );
030        }
031      }
032    
033      public static Annotation[] getAnnotations(final AccessibleObject obj) {
034        return getDeclaredAnnotations( obj );
035      }
036    
037      public static Annotation[] getDeclaredAnnotations(final AccessibleObject obj) {
038        if ( obj instanceof Constructor ) {
039          return Constructor_.getDeclaredAnnotations( ( Constructor ) obj );
040        }
041        else if ( obj instanceof Method ) {
042          return Method_.getDeclaredAnnotations( ( Method ) obj );
043        }
044        else if ( obj instanceof Field ) {
045          return Field_.getDeclaredAnnotations( ( Field ) obj );
046        }
047        else {
048          throw new UnsupportedOperationException( "Unexpected AccessibleObject type: " + obj.getClass() );
049        }
050      }
051    
052       public static boolean isAnnotationPresent(final AccessibleObject obj, final Class<? extends Annotation> annotationClass) {
053         if ( obj instanceof Constructor ) {
054           return Constructor_.isAnnotationPresent( ( Constructor ) obj, annotationClass );
055         }
056         else if ( obj instanceof Method ) {
057           return Method_.isAnnotationPresent( ( Method ) obj, annotationClass );
058         }
059         else if ( obj instanceof Field ) {
060           return Field_.isAnnotationPresent( ( Field ) obj, annotationClass );
061         }
062         else {
063           throw new UnsupportedOperationException( "Unexpected AccessibleObject type: " + obj.getClass() );
064         }
065       }
066    
067    }
068