Skip to content

Commit

Permalink
Add generated annotation when possible
Browse files Browse the repository at this point in the history
  • Loading branch information
JakeWharton committed Dec 9, 2019
1 parent 5cbb51d commit a4e4b55
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 4 deletions.
Expand Up @@ -16,6 +16,7 @@
package dagger.reflect.compiler;

import static java.util.Collections.singleton;
import static javax.lang.model.SourceVersion.RELEASE_8;
import static javax.lang.model.element.Modifier.FINAL;
import static javax.lang.model.element.Modifier.PRIVATE;
import static javax.lang.model.element.Modifier.PUBLIC;
Expand All @@ -24,6 +25,7 @@
import static net.ltgt.gradle.incap.IncrementalAnnotationProcessorType.ISOLATING;

import com.google.auto.service.AutoService;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
Expand All @@ -48,12 +50,27 @@
public final class DaggerReflectCompiler extends AbstractProcessor {
private Filer filer;
private Messager messager;
private @Nullable AnnotationSpec generatedAnnotation;

@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
filer = processingEnv.getFiler();
messager = processingEnv.getMessager();

String generatedAnnotationName =
processingEnv.getSourceVersion().compareTo(RELEASE_8) <= 0
? "javax.annotation.Generated"
: "javax.annotation.processing.Generated";
TypeElement generatedAnnotationType =
processingEnv.getElementUtils().getTypeElement(generatedAnnotationName);
if (generatedAnnotationType != null) {
generatedAnnotation =
AnnotationSpec.builder(ClassName.get(generatedAnnotationType))
.addMember("value", "$S", getClass().getName())
.addMember("comments", "$S", "https://github.com/JakeWharton/dagger-reflect")
.build();
}
}

@Override
Expand All @@ -77,13 +94,15 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
TypeElement factory = findFactory(component);
ClassName factoryName = factory != null ? ClassName.get(factory) : null;

TypeSpec type =
TypeSpec.Builder typeBuilder =
createComponent(componentName, builderName, factoryName)
.toBuilder()
.addOriginatingElement(component)
.build();
.addOriginatingElement(component);
if (generatedAnnotation != null) {
typeBuilder.addAnnotation(generatedAnnotation);
}
JavaFile file =
JavaFile.builder(componentName.packageName(), type)
JavaFile.builder(componentName.packageName(), typeBuilder.build())
.addFileComment("Generated by Dagger's reflect-compiler. Do not modify!")
.build();
try {
Expand Down
Expand Up @@ -23,6 +23,18 @@
import org.junit.Test;

public final class DaggerReflectCompilerTest {
private static final String generatedAnnotationImport;

static {
String line = "import javax.annotation.processing.Generated;\n";
try {
Class.forName("javax.annotation.processing.Generated");
} catch (ClassNotFoundException ignored) {
line = "import javax.annotation.Generated;\n";
}
generatedAnnotationImport = line;
}

@Test
public void simple() {
JavaFileObject component =
Expand All @@ -45,7 +57,12 @@ public void simple() {
+ "\n"
+ "import dagger.reflect.DaggerReflect;\n"
+ "import java.lang.AssertionError;\n"
+ generatedAnnotationImport
+ "\n"
+ "@Generated(\n"
+ " value = \"dagger.reflect.compiler.DaggerReflectCompiler\",\n"
+ " comments = \"https://github.com/JakeWharton/dagger-reflect\"\n"
+ ")\n"
+ "public final class DaggerTestComponent {\n"
+ " private DaggerTestComponent() {\n"
+ " throw new AssertionError();\n"
Expand Down Expand Up @@ -89,7 +106,12 @@ public void nested() {
+ "\n"
+ "import dagger.reflect.DaggerReflect;\n"
+ "import java.lang.AssertionError;\n"
+ generatedAnnotationImport
+ "\n"
+ "@Generated(\n"
+ " value = \"dagger.reflect.compiler.DaggerReflectCompiler\",\n"
+ " comments = \"https://github.com/JakeWharton/dagger-reflect\"\n"
+ ")\n"
+ "public final class DaggerOne_Two_TestComponent {\n"
+ " private DaggerOne_Two_TestComponent() {\n"
+ " throw new AssertionError();\n"
Expand Down Expand Up @@ -132,7 +154,12 @@ public void builder() {
+ "\n"
+ "import dagger.reflect.DaggerReflect;\n"
+ "import java.lang.AssertionError;\n"
+ generatedAnnotationImport
+ "\n"
+ "@Generated(\n"
+ " value = \"dagger.reflect.compiler.DaggerReflectCompiler\",\n"
+ " comments = \"https://github.com/JakeWharton/dagger-reflect\"\n"
+ ")\n"
+ "public final class DaggerTestComponent {\n"
+ " private DaggerTestComponent() {\n"
+ " throw new AssertionError();\n"
Expand Down Expand Up @@ -178,7 +205,12 @@ public void factory() {
+ "\n"
+ "import dagger.reflect.DaggerReflect;\n"
+ "import java.lang.AssertionError;\n"
+ generatedAnnotationImport
+ "\n"
+ "@Generated(\n"
+ " value = \"dagger.reflect.compiler.DaggerReflectCompiler\",\n"
+ " comments = \"https://github.com/JakeWharton/dagger-reflect\"\n"
+ ")\n"
+ "public final class DaggerTestComponent {\n"
+ " private DaggerTestComponent() {\n"
+ " throw new AssertionError();\n"
Expand Down

0 comments on commit a4e4b55

Please sign in to comment.