throw new LayerGenerationException("@ActionRegistration can only be used together with @ActionID annotation", e, processingEnv, ar);
if (aid.id() == null) {
continue;
throw new LayerGenerationException("@ActionID category() should not start with Actions/", e, processingEnv, aid, "category");
if (!FQN.matcher(aid.id()).matches()) {
throw new LayerGenerationException("@ActionID id() must be valid fully qualified name", e, processingEnv, aid, "id");
String id = aid.id().replace('.', '-');
LayerBuilder builder = layer(e);
File f = builder.file("Actions/" + aid.category() + "/" + id + ".instance");
if (id != null) {
for (ActionReference actionReference : refs.value()) {
if (!actionReference.id().id().isEmpty() || !actionReference.id().category().isEmpty()) {
throw new LayerGenerationException("Don't specify additional id=@ActionID(...) when using @ActionID on the element", e, processingEnv, actionReference.id());
if (actionReference.id().id().isEmpty() || actionReference.id().category().isEmpty()) {
throw new LayerGenerationException("Specify real id=@ActionID(...)", e, processingEnv, actionReference.id());