/** * Returns {@code @Generated("processorClass"} for the target {@code SourceVersion}. * * <p>Returns {@code javax.annotation.processing.Generated} for JDK 9 and newer, {@code * javax.annotation.Generated} for earlier releases, and Optional#empty()} if the annotation is * not available. */ public static Optional<AnnotationSpec> generatedAnnotationSpec( Elements elements, SourceVersion sourceVersion, Class<?> processorClass) { return generatedAnnotationSpecBuilder(elements, sourceVersion, processorClass) .map(AnnotationSpec.Builder::build); }
void writeFactory(final FactoryDescriptor descriptor) throws IOException { String factoryName = getSimpleName(descriptor.name()).toString(); TypeSpec.Builder factory = classBuilder(factoryName); generatedAnnotationSpec( elements, sourceVersion, AutoFactoryProcessor.class, "https://github.com/google/auto/tree/master/factory") .ifPresent(factory::addAnnotation); if (!descriptor.allowSubclasses()) { factory.addModifiers(FINAL); } if (descriptor.publicType()) { factory.addModifiers(PUBLIC); } factory.superclass(TypeName.get(descriptor.extendingType())); for (TypeMirror implementingType : descriptor.implementingTypes()) { factory.addSuperinterface(TypeName.get(implementingType)); } addConstructorAndProviderFields(factory, descriptor); addFactoryMethods(factory, descriptor); addImplementationMethods(factory, descriptor); addCheckNotNullMethod(factory, descriptor); JavaFile.builder(getPackage(descriptor.name()), factory.build()) .skipJavaLangImports(true) .build() .writeTo(filer); }
/** * Returns {@code @Generated("processorClass"} if either {@code * javax.annotation.processing.Generated} or {@code javax.annotation.Generated} is {@linkplain * GeneratedAnnotations#generatedAnnotation(Elements) available at compile time}. * * @deprecated prefer {@link #generatedAnnotationSpec(Elements, SourceVersion, Class)} */ @Deprecated public static Optional<AnnotationSpec> generatedAnnotationSpec( Elements elements, Class<?> processorClass) { return generatedAnnotationSpecBuilder(elements, processorClass) .map(AnnotationSpec.Builder::build); }
/** * Returns {@code @Generated(value = "processorClass", comments = "comments"} if either {@code * javax.annotation.processing.Generated} or {@code javax.annotation.Generated} is {@linkplain * GeneratedAnnotations#generatedAnnotation(Elements) available at compile time}. * * @deprecated prefer {@link #generatedAnnotationSpec(Elements, SourceVersion, Class, String)} */ @Deprecated public static Optional<AnnotationSpec> generatedAnnotationSpec( Elements elements, Class<?> processorClass, String comments) { return generatedAnnotationSpecBuilder(elements, processorClass) .map(annotation -> annotation.addMember("comments", "$S", comments).build()); }
/** * Returns {@code @Generated(value = "processorClass", comments = "comments"} for the target * {@code SourceVersion}. * * <p>Returns {@code javax.annotation.processing.Generated} for JDK 9 and newer, {@code * javax.annotation.Generated} for earlier releases, and Optional#empty()} if the annotation is * not available. */ public static Optional<AnnotationSpec> generatedAnnotationSpec( Elements elements, SourceVersion sourceVersion, Class<?> processorClass, String comments) { return generatedAnnotationSpecBuilder(elements, sourceVersion, processorClass) .map(annotation -> annotation.addMember("comments", "$S", comments).build()); }