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 |