package com.github.czyzby.autumn.processor.impl;
import com.github.czyzby.autumn.annotation.Processor;
import com.github.czyzby.autumn.context.Context;
import com.github.czyzby.autumn.context.ContextDestroyer;
import com.github.czyzby.autumn.context.ContextInitializer;
import com.github.czyzby.autumn.context.error.ContextInitiationException;
import com.github.czyzby.autumn.processor.AbstractAnnotationProcessor;
import com.github.czyzby.autumn.processor.AnnotationProcessor;
/** Handles other processors. Registers annotation processors to context initializer.
*
* @author MJ */
public class MetaAnnotationProcessor extends AbstractAnnotationProcessor<Processor> {
@Override
public Class<Processor> getSupportedAnnotationType() {
return Processor.class;
}
@Override
public boolean isSupportingTypes() {
return true;
}
@Override
public void processType(final Class<?> type, final Processor annotation, final Object component,
final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
if (component instanceof AnnotationProcessor<?>) {
initializer.addProcessor((AnnotationProcessor<?>) component);
} else {
throw new ContextInitiationException(
"@Processor annotation should annotate only classes that implement AnnotationProcessor interface.");
}
}
}