Home | History | Annotate | Download | only in validator
      1 package org.robolectric.annotation.processing.validator;
      2 
      3 import com.google.common.collect.ImmutableSet;
      4 import java.util.Set;
      5 import javax.annotation.processing.ProcessingEnvironment;
      6 import javax.lang.model.element.ExecutableElement;
      7 import javax.lang.model.element.Modifier;
      8 import javax.lang.model.element.TypeElement;
      9 import javax.tools.Diagnostic.Kind;
     10 import org.robolectric.annotation.processing.RobolectricModel.Builder;
     11 
     12 /**
     13  * Validator that checks usages of {@link org.robolectric.annotation.Implementation}.
     14  */
     15 public class ImplementationValidator extends FoundOnImplementsValidator {
     16   public static final ImmutableSet<String> METHODS_ALLOWED_TO_BE_PUBLIC =
     17       ImmutableSet.of(
     18           "toString",
     19           "hashCode",
     20           "equals"
     21       );
     22 
     23   public ImplementationValidator(Builder modelBuilder, ProcessingEnvironment env) {
     24     super(modelBuilder, env, "org.robolectric.annotation.Implementation");
     25   }
     26 
     27   @Override
     28   public Void visitExecutable(ExecutableElement elem, TypeElement parent) {
     29     Set<Modifier> modifiers = elem.getModifiers();
     30     if (!METHODS_ALLOWED_TO_BE_PUBLIC.contains(elem.getSimpleName().toString())) {
     31       if (!modifiers.contains(Modifier.PUBLIC) && !modifiers.contains(Modifier.PROTECTED)) {
     32         message(Kind.ERROR, "@Implementation methods should be protected (preferred) or public (deprecated)");
     33       }
     34     }
     35 
     36     // TODO: Check that it has the right signature
     37     return null;
     38   }
     39 }
     40