For the given Class get a collection of the the AnnotatedElement s that match the given annotations or if no annotations are specified then return all of the annotated elements of the given Class. - Java java.lang.annotation

Java examples for java.lang.annotation:Class Annotation

Description

For the given Class get a collection of the the AnnotatedElement s that match the given annotations or if no annotations are specified then return all of the annotated elements of the given Class.

Demo Code

/*// ww w . ja  v a 2s  .  c  o m
 * Copyright 2002-2006,2009 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.io.File;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main{
    public static void main(String[] argv) throws Exception{
        Class clazz = String.class;
        Class annotation = String.class;
        System.out.println(getAnnotatedMethods(clazz,annotation));
    }
    /**
     * For the given <code>Class</code> get a collection of the the {@link AnnotatedElement}s 
     * that match the given <code>annotation</code>s or if no <code>annotation</code>s are 
     * specified then return all of the annotated elements of the given <code>Class</code>. 
     * Includes only the method level annotations.
     * 
     * @param clazz The {@link Class} to inspect
     * @param annotation the {@link Annotation}s to find
     * @return A {@link Collection}&lt;{@link AnnotatedElement}&gt; containing all of the
     *  method {@link AnnotatedElement}s matching the specified {@link Annotation}s
     */
    public static final Collection<Method> getAnnotatedMethods(Class clazz,
            Class<? extends Annotation>... annotation) {
        Collection<Method> toReturn = new HashSet<Method>();

        for (Method m : clazz.getMethods()) {
            if (ArrayUtils.isNotEmpty(annotation)
                    && isAnnotatedBy(m, annotation)) {
                toReturn.add(m);
            } else if (ArrayUtils.isEmpty(annotation)
                    && ArrayUtils.isNotEmpty(m.getAnnotations())) {
                toReturn.add(m);
            }
        }

        return toReturn;
    }
    /**
     * Varargs version of <code>AnnotatedElement.isAnnotationPresent()</code>
     * @see AnnotatedElement
     */
    public static final boolean isAnnotatedBy(
            AnnotatedElement annotatedElement,
            Class<? extends Annotation>... annotation) {
        if (ArrayUtils.isEmpty(annotation))
            return false;

        for (Class<? extends Annotation> c : annotation) {
            if (annotatedElement.isAnnotationPresent(c))
                return true;
        }

        return false;
    }
}

Related Tutorials