1. Project Clover database Tue Dec 20 2016 21:24:09 CET
  2. Package org.xwiki.component.util

File ReflectionMethodUtils.java

 

Coverage histogram

../../../../img/srcFileCovDistChart9.png
38% of files have more coverage

Code metrics

10
23
3
1
118
55
11
0.48
7.67
3
3.67

Classes

Class Line # Actions
ReflectionMethodUtils 34 23 0% 11 6
0.833333383.3%
 

Contributing tests

This file is covered by 687 tests. .

Source view

1    /*
2    * See the NOTICE file distributed with this work for additional
3    * information regarding copyright ownership.
4    *
5    * This is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU Lesser General Public License as
7    * published by the Free Software Foundation; either version 2.1 of
8    * the License, or (at your option) any later version.
9    *
10    * This software is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    * Lesser General Public License for more details.
14    *
15    * You should have received a copy of the GNU Lesser General Public
16    * License along with this software; if not, write to the Free
17    * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18    * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
19    */
20    package org.xwiki.component.util;
21   
22    import java.lang.annotation.Annotation;
23    import java.lang.annotation.Inherited;
24    import java.lang.reflect.Method;
25    import java.util.ArrayList;
26    import java.util.List;
27   
28    /**
29    * Various Reflection tools related to {@link Method}s.
30    *
31    * @version $Id: dcf3bfc8c8039a924349db4ac5152e215aa7f9e7 $
32    * @since 5.2M1
33    */
 
34    public final class ReflectionMethodUtils
35    {
36    /**
37    * Utility class.
38    */
 
39  0 toggle private ReflectionMethodUtils()
40    {
41   
42    }
43   
44    /**
45    * Get {@link Annotation}s of the provided class associated to the the provided method parameter.
46    *
47    * @param <A> the actual {@link Annotation} type
48    * @param method the method
49    * @param index the index of the parameter in the method
50    * @param annotationClass the class of the annotation
51    * @return the annotations
52    */
 
53  94450 toggle public static <A extends Annotation> List<A> getMethodParameterAnnotations(Method method, int index,
54    Class<A> annotationClass)
55    {
56  94450 Annotation[][] parametersAnnotations = method.getParameterAnnotations();
57   
58  94452 Annotation[] parameterAnnotations = parametersAnnotations[index];
59   
60  94451 List<A> foundAnnotations = new ArrayList<A>();
61  94452 for (Annotation annotation : parameterAnnotations) {
62  53905 if (annotationClass.isInstance(annotation)) {
63  26953 foundAnnotations.add((A) annotation);
64    }
65    }
66   
67  94453 return foundAnnotations;
68    }
69   
70    /**
71    * Get {@link Annotation}s of the provided class associated to the the provided method parameter.
72    *
73    * @param <A> the actual {@link Annotation} type
74    * @param method the method
75    * @param index the index of the parameter in the method
76    * @param annotationClass the class of the annotation
77    * @param inherits if true also search on overwritten methods from interfaces and super classes
78    * @return the annotations
79    */
 
80  94451 toggle public static <A extends Annotation> List<A> getMethodParameterAnnotations(Method method, int index,
81    Class<A> annotationClass, boolean inherits)
82    {
83  94452 List<A> annotations = getMethodParameterAnnotations(method, index, annotationClass);
84   
85  94453 if (inherits && annotationClass.getAnnotation(Inherited.class) != null) {
86  94452 Class<?>[] ifaces = method.getDeclaringClass().getInterfaces();
87   
88  94452 for (Class<?> iface : ifaces) {
89  128497 Method interfaceMethod;
90  128497 try {
91  128497 interfaceMethod = iface.getMethod(method.getName(), method.getParameterTypes());
92   
93  49 if (interfaceMethod != null) {
94  49 annotations
95    .addAll(getMethodParameterAnnotations(interfaceMethod, index, annotationClass, true));
96    }
97    } catch (Exception e) {
98    // Ignore it
99    }
100    }
101   
102  94451 Class<?> superClass = method.getDeclaringClass().getSuperclass();
103  94451 if (superClass != null) {
104  49 try {
105  49 Method superMethod = superClass.getMethod(method.getName(), method.getParameterTypes());
106   
107  0 if (superMethod != null) {
108  0 annotations.addAll(getMethodParameterAnnotations(superMethod, index, annotationClass, true));
109    }
110    } catch (Exception e) {
111    // Ignore it
112    }
113    }
114    }
115   
116  94452 return annotations;
117    }
118    }