/** * Iterate over everything that has a {@link Validated} annotation and check for invalid usages. * * @param types classes annotated with the {@link Validated} annotation. * @return {@link RaveIR} with initial parameters set. */ private RaveIR verify(List<TypeElement> types) { AnnotationVerifier verifier = new AnnotationVerifier(messager, elementUtils, typesUtils); for (TypeElement type : types) { verifier.verify(type); } factoryTypeMirror = verifier.getSeenFactoryTypeMirror(); TypeElement element = (TypeElement) typesUtils.asElement(factoryTypeMirror); Validator strategy = element.getAnnotation(Validator.class); return new RaveIR( CompilerUtils.packageNameOf(element), element.getSimpleName().toString(), strategy == null ? DEFAULT : strategy.mode()); }
@Test(expected = AbortProcessingException.class) public void verify_whenTypeElementDoesNotHaveAnnotation_shouldAbortWithError() { Messager messager = mock(Messager.class); Elements element = mock(Elements.class); Types types = mock(Types.class); AnnotationVerifier verifier = new AnnotationVerifier(messager, element, types); TypeElement typeElement = mock(TypeElement.class); verifier.verify(typeElement); verify(messager).printMessage(eq(Diagnostic.Kind.ERROR), anyString(), eq(typeElement)); }
@Test(expected = AbortProcessingException.class) public void verify_whenTypeElementIsPackagePrivate_shouldAbortWithError() { Set<Modifier> modSet = new HashSet<>(); modSet.add(Modifier.PROTECTED); Messager messager = mock(Messager.class); Elements element = mock(Elements.class); Types types = mock(Types.class); AnnotationVerifier verifier = new AnnotationVerifier(messager, element, types); PackageElement packageElement = mock(PackageElement.class); Name name = mock(Name.class); when(packageElement.getQualifiedName()).thenReturn(name); when(name.toString()).thenReturn("Nonmatching.package"); TypeElement typeElement = mock(TypeElement.class); when(typeElement.getModifiers()).thenReturn(modSet); when(typeElement.getEnclosingElement()).thenReturn(packageElement); verifier.verify(typeElement); verify(messager).printMessage(eq(Diagnostic.Kind.ERROR), anyString(), eq(typeElement)); } }