@Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Processing @Implemented..."); for (TypeElement annotation : annotations) { for (Element element : roundEnv.getElementsAnnotatedWith(annotation)) { TypeElement serviceElement = (TypeElement) element; PackageElement packageElement = getPackage(serviceElement); final String packageName = packageElement == null ? "" : packageElement.getQualifiedName().toString(); Implemented implemented = serviceElement.getAnnotation(Implemented.class); final String implName = "".equals(implemented.value()) ? serviceElement.getSimpleName().toString() + "Impl" : implemented.value(); final List<FieldDescriptor> fields = createFieldList(serviceElement); final String localName = determineLocalName(serviceElement); final boolean isPublic = serviceElement.getModifiers().contains(Modifier.PUBLIC); ImplementedDescriptor annotationDescriptor = new ImplementedDescriptor(isPublic, packageName, implName, localName, fields); createImplSourceFile(annotationDescriptor, serviceElement, packageName + "." + implName); } } return true; }