Procesador de anotación, generando un error de compilación.

Estoy tratando de crear una anotación personalizada que, por ejemplo, asegure que un campo o método sea a la vezpublic yfinal, y generaría un error de tiempo de compilación si el campo o el método no son ambospublic yfinal, como en estos ejemplos:

// Compiles
@PublicFinal
public final int var = 2;

// Compiles
@PublicFinal
public final void myMethod {}

// Compile time error
@PublicFinal
private final int fail = 2;

Hasta ahora, he hecho tanto la interfaz de anotación personalizada:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.METHOD, ElementType.FIELD})
public @interface PublicFinal { }

yProcessor:

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import java.util.Set;

@SupportedAnnotationTypes("PublicFinal")
public class PubicFinalProcessor extends AbstractProcessor
{
    @Override
    public boolean process(
            Set<? extends TypeElement> annotations,
            RoundEnvironment roundEnv)
    {
        for (TypeElement typeElement : annotations)
        {
            Set<Modifier> modifiers = typeElement.getModifiers();

            if (!modifiers.contains(Modifier.FINAL)
                    || !modifiers.contains(Modifier.PUBLIC))
            {
                // Compile time error.
                // TODO How do I raise an error?
            }
        }

        // All PublicFinal annotations are handled by this Processor.
        return true;
    }
}

Como lo insinuó elTODO, No sé cómo generar el error de tiempo de compilación. losdocumentación of Processor deja claro que no debería lanzar una excepción,

Si un procesador lanza una excepción no detectada, la herramienta puede detener otros procesadores de anotación activos.

Continúa describiendo lo que sucede cuando se genera una condición de error, pero ahoracómo para levantar una condición de error.

Pregunta: ¿Cómo puedo generar una condición de error que genere un error de tiempo de compilación?

Respuestas a la pregunta(1)

Su respuesta a la pregunta