Java examples for java.lang.annotation:Annotation Parameter
find Parameter Annotation
/**/*from w w w . ja va 2 s .c o m*/ * * Copyright (C) norad.fr * * 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. */ //package com.java2s; import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class Main { public static <A extends Annotation> A findParameterAnnotation( Method method, int position, Class<A> annotationType) { if (position < 0 || position > method.getParameterAnnotations().length - 1) { throw new IllegalStateException("Param position " + position + " overflow for method : " + method); } A annotation = getParameterAnnotation(method, annotationType, position); Class<?> cl = method.getDeclaringClass(); if (annotation == null) { annotation = searchParamAnnotationOnInterfaces(method, annotationType, cl.getInterfaces(), position); } while (annotation == null) { cl = cl.getSuperclass(); if (cl == null || cl == Object.class) { break; } try { Method equivalentMethod = cl.getDeclaredMethod( method.getName(), method.getParameterTypes()); annotation = getParameterAnnotation(equivalentMethod, annotationType, position); if (annotation == null) { annotation = searchParamAnnotationOnInterfaces(method, annotationType, cl.getInterfaces(), position); } } catch (NoSuchMethodException ex) { // We're done... } } return annotation; } public static <T extends Annotation> T getParameterAnnotation( Method method, Class<T> annotationType, int position) { for (Annotation annotation : method.getParameterAnnotations()[position]) { if (annotation.annotationType() .isAssignableFrom(annotationType)) { return (T) annotation; } } return null; } private static <A extends Annotation> A searchParamAnnotationOnInterfaces( Method method, Class<A> annotationType, Class<?>[] ifcs, int position) { for (Class<?> iface : ifcs) { try { Method method2 = iface.getMethod(method.getName(), method.getParameterTypes()); A parameterAnnotation = getParameterAnnotation(method2, annotationType, position); if (parameterAnnotation != null) { return parameterAnnotation; } } catch (SecurityException | NoSuchMethodException e) { // nothing to do } } return null; } }