Skip to content

Latest commit

 

History

History
76 lines (57 loc) · 2.22 KB

README.md

File metadata and controls

76 lines (57 loc) · 2.22 KB

Annotation Processor Example

Simple example to illustrate the use of android annotation processor.

This code will create an annotation named @Activity which is meant to target activities. The processor will generate a Navigator class with static methods to start the annotated activities.

Creation Steps (Android Studio)

1) File > New > New Module... > Java Library -> Name it "annotation"

2) File > New > New Module... > Java Library -> Name it "processor"

3) In processor build.gradle :

dependencies {
    /*...*/

    implementation project(':annotation')
    implementation 'com.squareup:javapoet:1.9.0'
    implementation 'com.google.auto.service:auto-service:1.0-rc3'
}

4) In app build.gradle :

dependencies {
    /*...*/

    implementation project(':annotation')
    annotationProcessor project(':processor')
}

5) Create new file called Activity.java in annotation module :

@Target(ElementType.TYPE) // To target classes
@Retention(RetentionPolicy.SOURCE)
public @interface Activity {
}

6) Create new file called ActivityProcessor.java in processor module :

@AutoService(Processor.class) // DON'T FORGET THIS
public class ActivityProcessor extends AbstractProcessor{
    @Override
    public synchronized void init(ProcessingEnvironment processingEnvironment) {
        /* initialize variables */
    }

    @Override
    public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
        /* code generation happens here (using JavaPoet) */
        return false;
    }

    @Override
    public Set<String> getSupportedAnnotationTypes() {
        return Collections.singleton(Activity.class.getCanonicalName());
    }

    @Override
    public SourceVersion getSupportedSourceVersion() {
        return SourceVersion.latestSupported();
    }
}

7) Annotate any class and Rebuild your project to generate the code

Sample