Próbuję utworzyć niestandardową adnotację, która na przykład zapewnia, że pole lub metoda jest zarówno public
, jak i final
, i generuje błąd czasu kompilacji, jeśli pole lub metoda nie jest zarówno public
i final
, jak w tych przykładach:Procesor adnotacji generujący błąd kompilatora
// Compiles
@PublicFinal
public final int var = 2;
// Compiles
@PublicFinal
public final void myMethod {}
// Compile time error
@PublicFinal
private final int fail = 2;
tej pory zrobiłem zarówno interfejs niestandardowy adnotacji:
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 { }
i Processor
:
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;
}
}
Zgodnie z sugestią TODO
, nie wiem, jak wygenerować błąd czasu kompilacji. documentation Processor wyraźnie wskazuje, że nie powinny rzucać wyjątek,
Jeśli procesor zgłasza wyjątek nieprzechwycony, narzędzie może przestać innych aktywnych procesorów opisów.
To idzie do opisania tego, co się dzieje, gdy zaistniały błąd jest podniesiona, ale teraz jak podnieść stan błędu.
Pytanie: jak podnieść warunek błędu, który generuje błąd czasu kompilacji?