@Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

        if (!roundEnv.processingOver()) {
            // We only have one annotation, but this is still easier.
            for (TypeElement annotationType : annotations) {
                for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(annotationType)) {
                    // Our annotation is only valid on a field so we can assume that our element
                    // represents a field, but just to show how we check:
                    if (annotatedElement.getKind() == ElementKind.FIELD) {
                        VariableElement field = (VariableElement)annotatedElement;
                        // Out annotation only makes sense on a constant value.
                        if (checkModifier(field.getModifiers(), Modifier.STATIC) && checkModifier(field.getModifiers(), Modifier.FINAL)) {
                            // Now we know it is a constant.
                            String path = field.getConstantValue().toString();
                            boolean found = checkInClasspath(path);
                            if (!found) {
                                found = checkInMavenResourcePath(path);
                            }
                            if (!found) {
                                // Since we use Kind.ERROR here this will cause a compilation failure with our message.
                                super.processingEnv.getMessager().printMessage(Kind.ERROR, "The '" + path + "' path is not available!", field);
                            }
                        }
                        else {
                            super.processingEnv.getMessager().printMessage(Kind.ERROR, "@ResourcePath is only allowed on constants!", field);
                        }
                    }
                }
            }
        } 

        return true; // We always process our annotation.
    }