All Downloads are FREE. Search and download functionalities are using the official Maven repository.

spoon.examples.delegate.processing.DelegateProcessor Maven / Gradle / Ivy

The newest version!
package spoon.examples.delegate.processing;

import spoon.examples.delegate.annotation.Delegate;
import spoon.examples.delegate.template.DelegateTemplate;
import spoon.processing.AbstractAnnotationProcessor;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtExecutable;
import spoon.reflect.declaration.CtInterface;
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.declaration.ModifierKind;
import spoon.reflect.reference.CtExecutableReference;
import spoon.template.Substitution;

public class DelegateProcessor extends
		AbstractAnnotationProcessor> {

	public void process(Delegate annotation, CtInterface i) {

		DelegateTemplate t = new DelegateTemplate(i.getReference());
		CtClass c = getFactory().Class().create(i.getPackage(), i
				.getSimpleName()
				+ "Delegate");
		Substitution.insertAll(c, t);
		for(CtExecutableReference m:i.getReference().getAllExecutables()) {
			CtExecutable mdecl=m.getDeclaration();
			if(mdecl!=null && !(mdecl instanceof CtMethod)) continue;
			c.getMethods().add(t.getDelegateMethod(c,(CtMethod)mdecl));
		}
		c.getSuperInterfaces().add(i.getReference());
		c.getModifiers().add(ModifierKind.PUBLIC);
		
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy