Java Reflection Method Annotation getMethodsWithAnnotation(final Class clazz, final Class... annotationClasses)

Here you can find the source of getMethodsWithAnnotation(final Class clazz, final Class... annotationClasses)

Description

Get all the methods of this object and its superclasses that are annotated with this annotation.

License

Open Source License

Declaration

public static List<Method> getMethodsWithAnnotation(final Class<?> clazz, final Class<?>... annotationClasses) 

Method Source Code


//package com.java2s;
/*/*  w  w w . j ava  2 s. c o  m*/
 *
 *  * Copyright (c) 2014- MHISoft LLC and/or its affiliates. All rights reserved.
 *  * Licensed to MHISoft LLC under one or more contributor
 *  * license agreements. See the NOTICE file distributed with
 *  * this work for additional information regarding copyright
 *  * ownership. MHISoft LLC licenses this file to you 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.util.ArrayList;

import java.util.List;

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Main {
    /**
     * Get all the methods of this object and its superclasses that are annotated with this annotation.
     */
    public static List<Method> getMethodsWithAnnotation(final Class<?> clazz, final Class<?>... annotationClasses) {
        final List<Method> result = new ArrayList<Method>();
        final List<Method> methods = getMethods(clazz);
        for (final Method m : methods) {
            if (isAnnotationPresent(m.getAnnotations(), annotationClasses))
                result.add(m);
        }
        return result;
    }

    /**
     * List of all the methods of the class, and all of its superclasses.
     * NOTE: This returns the most common kind of methods which by default excludes
     * {@link Modifier#STATIC} methods.
     */
    public static List<Method> getMethods(final Class<?> clazz) {
        return getMethods(clazz, Modifier.STATIC);
    }

    /**
     * List of all the methods of the class and all of its superclasses.
     */
    public static List<Method> getMethods(final Class<?> clazz, final int excludedModifiers) {
        final ArrayList<Method> result = new ArrayList<Method>();
        for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
            final List<Method> methods = getDeclaredMethods(c, 0, excludedModifiers);
            result.addAll(0, methods);
        }
        return result;
    }

    /**
     * Determine if any of the annotations requested are present in the specified array of annotations.
     */
    public static boolean isAnnotationPresent(final Annotation[] annotations, final Class<?>... annotationClasses) {
        boolean result = false;
        for (final Annotation a : annotations) {
            for (final Class<?> c : annotationClasses) {
                if (c.isAssignableFrom(a.getClass())) {
                    result = true;
                    break;
                }
            }
        }
        return result;
    }

    /**
     * List of all the methods of the class (not its superclasses).
     */
    private static List<Method> getDeclaredMethods(final Class<?> clazz, final int includedModifiers,
            final int excludedModifiers) {
        final List<Method> result = new ArrayList<Method>();
        for (final Method m : clazz.getDeclaredMethods()) {
            final int methodModifiers = m.getModifiers();
            if (includedModifiers != 0 && ((methodModifiers & includedModifiers) == 0))
                continue;
            if ((methodModifiers & excludedModifiers) == 0)
                result.add(m);
        }
        return result;
    }
}

Related

  1. getMethodsInAnnotation(Annotation anno)
  2. getMethodsWithAnnotation(Class annotation, Class clazz)
  3. getMethodsWithAnnotation(Class type, Class obj)
  4. getMethodsWithAnnotation(Class clazz, Class annotationType)
  5. getMethodsWithAnnotation(Class type, Class annotation, boolean checkSuper)
  6. getMethodValue(Class annotationClasss, Class targetClass, String... annotationFields)