@SuppressWarnings("unchecked")
	@Override
	public void validate(ProcessingEnvironment procEnv,
			RoundEnvironment roundEnv, TypeElement annotationType,
			AnnotationMirror annotation, Element e) {
		AnnotationMirror steretypeAnnotation = AnnotationProcessingUtils
				.findAnnotationMirror(procEnv, e,
						"javax.enterprise.inject.Stereotype");

		if (!(e instanceof ExecutableElement) && steretypeAnnotation == null) {
			procEnv.getMessager()
					.printMessage(
							Diagnostic.Kind.ERROR,
							"Non executable element '"
									+ e.getSimpleName()
									+ "' has been annotated with the constrainted annotation '"
									+ annotationType.getQualifiedName()
									+ "' that expects executable element", e,
							annotation);
			return;
		}

		if (steretypeAnnotation != null) {
			// Iterate over all elements that are annotated with the stereotype
			// annotation
			// and call this method recursivly to also support arbitrary depth
			// of stereotyping
			for (Element newE : (Set<Element>) roundEnv
					.getElementsAnnotatedWith((TypeElement) e)) {
				validate(procEnv, roundEnv, annotationType, annotation, newE);
			}
		} else {
			validate(procEnv, roundEnv, annotationType, annotation,
					(ExecutableElement) e);
		}
	}