package com.arellomobile.mvp.compiler; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.Modifier; /** * Date: 17-Feb-16 * Time: 16:57 * * @author esorokin */ public abstract class AnnotationRule { protected final ElementKind mValidKind; protected final Set<Modifier> mValidModifiers; protected StringBuilder mErrorBuilder; public AnnotationRule(ElementKind validKind, Modifier... validModifiers) { if (validModifiers == null || validModifiers.length == 0) { throw new RuntimeException("Valid modifiers cant be empty or null."); } mValidKind = validKind; mValidModifiers = new HashSet<>(Arrays.asList(validModifiers)); mErrorBuilder = new StringBuilder(); } /** * Method describe rules for using Annotation. * * @param AnnotatedField Checking annotated field. */ public abstract void checkAnnotation(Element AnnotatedField); public String getErrorStack() { return mErrorBuilder.toString(); } protected String validModifiersToString() { if (mValidModifiers.size() > 1) { StringBuilder result = new StringBuilder("one of ["); boolean addSeparator = false; for (Modifier validModifier : mValidModifiers) { if (addSeparator) { result.append(", "); } addSeparator = true; result.append(validModifier.toString()); } result.append("]"); return result.toString(); } else { return mValidModifiers.iterator().next() + "."; } } }