KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > spoon > examples > delegate > processing > DelegateProcessor


1 package spoon.examples.delegate.processing;
2
3 import spoon.examples.delegate.annotation.Delegate;
4 import spoon.examples.delegate.template.DelegateTemplate;
5 import spoon.processing.AbstractAnnotationProcessor;
6 import spoon.reflect.declaration.CtClass;
7 import spoon.reflect.declaration.CtExecutable;
8 import spoon.reflect.declaration.CtInterface;
9 import spoon.reflect.declaration.CtMethod;
10 import spoon.reflect.declaration.ModifierKind;
11 import spoon.reflect.reference.CtExecutableReference;
12 import spoon.template.Substitution;
13
14 public class DelegateProcessor extends
15         AbstractAnnotationProcessor<Delegate, CtInterface<?>> {
16
17     public void process(Delegate annotation, CtInterface<?> i) {
18
19         DelegateTemplate t = new DelegateTemplate(i.getReference());
20         CtClass<?> c = getFactory().Class().create(i.getPackage(), i
21                 .getSimpleName()
22                 + "Delegate");
23         Substitution.insertAll(c, t);
24         for(CtExecutableReference<?> m:i.getReference().getAllExecutables()) {
25             CtExecutable<?> mdecl=m.getDeclaration();
26             if(mdecl!=null && !(mdecl instanceof CtMethod)) continue;
27             c.getMethods().add(t.getDelegateMethod(c,(CtMethod<?>)mdecl));
28         }
29         c.getSuperInterfaces().add(i.getReference());
30         c.getModifiers().add(ModifierKind.PUBLIC);
31         
32     }
33
34 }
35
Popular Tags