KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > kohsuke > stapler > ClassDescriptor


1 package org.kohsuke.stapler;
2
3 import java.lang.reflect.Field JavaDoc;
4 import java.lang.reflect.Method JavaDoc;
5 import java.lang.reflect.Modifier JavaDoc;
6 import java.util.ArrayList JavaDoc;
7 import java.util.List JavaDoc;
8
9 /**
10  * Reflection information of a {@link Class}.
11  *
12  * @author Kohsuke Kawaguchi
13  */

14 final class ClassDescriptor {
15     public final Class JavaDoc clazz;
16     public final FunctionList methods;
17     public final Field JavaDoc[] fields;
18
19     /**
20      * @param clazz
21      * The class to build a descriptor around.
22      * @param wrappers
23      * Optional wrapper duck-typing classes.
24      * Static methods on this class that has the first parameter
25      * as 'clazz' will be handled as if it's instance methods on
26      * 'clazz'. Useful for adding view/controller methods on
27      * model classes.
28      */

29     public ClassDescriptor(Class JavaDoc clazz, Class JavaDoc... wrappers) {
30         this.clazz = clazz;
31         this.fields = clazz.getFields();
32
33         // instance methods
34
List JavaDoc<Function> functions = new ArrayList JavaDoc<Function>();
35         for (Method JavaDoc m : clazz.getMethods()) {
36             functions.add(new Function.InstanceFunction(m).protectBy(m));
37         }
38         if(wrappers!=null) {
39             for (Class JavaDoc w : wrappers) {
40                 for (Method JavaDoc m : w.getMethods()) {
41                     if(!Modifier.isStatic(m.getModifiers()))
42                         continue;
43                     Class JavaDoc<?>[] p = m.getParameterTypes();
44                     if(p.length==0)
45                         continue;
46                     if(p[0].isAssignableFrom(clazz))
47                         continue;
48                     functions.add(new Function.StaticFunction(m).protectBy(m));
49                 }
50             }
51         }
52         this.methods = new FunctionList(functions);
53     }
54 }
55
Popular Tags