annotation processing

Post on 09-Jan-2017

248 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Annotation ProcessingBenjamin Cheng

Examples

AutoValue github.com/google/auto/

AutoValue github.com/google/auto/

Butterknife jakewharton.github.io/butterknife/

Butterknife jakewharton.github.io/butterknife/

Annotation Processing

Annotation Processing (Why?)

●Reduce writing boilerplate code

●May beyond our imagination

Annotation Processing (What?)

●Part of javac

●@Annotation based

●Generate .java source files (new files only)

Components

●Annotations

●Processor

●APT (Annotation Processing Tool)

●Annotated Sources

Annotations

Annotation Processor

Annotation Processor (conti.)

Annotation Processor (conti.)

Elements

ServiceLoader Discovery File

- com/example/ExampleProcessor.class- META-INF/services/javax.annotation.processing.Processor

com.example.ExampleProcessor

Processing Rounds

javacBuilderProcessorOtherProcessor

out/

User.class

UserBuilder.class

@Otherpublic class GeneratedClass { // …}

Processing Rounds (conti.)

javacBuilderProcessorOtherProcessor

out/

User.class

UserBuilder.classpublic class OtherGenClass { // …}

GeneratedClass.class

Processing Rounds (conti.)

javacBuilderProcessorOtherProcessor

out/

User.class

UserBuilder.classpublic class OtherGenClass { // …}

GeneratedClass.class

Processing Rounds (conti.)

javacBuilderProcessorOtherProcessor

out/

User.class

UserBuilder.class

GeneratedClass.class

OtherGenClass.class

Add to APT Classpath

Code Generation

Code Generation

●StringBuilder

●JavaPoet

JavaPoet

●Use Fluent API with builders

●Based on Specs○ TypeSpec

○ MethodSpec

○ ParameterSpec

○ FiledSpec

github.com/square/javapoet/

JavaPoet (conti.)github.com/square/javapoet/

JavaPoet (conti.)github.com/square/javapoet/

public final class UserBuilder { … }

JavaPoet (conti.)github.com/square/javapoet/public final class UserBuilder { // fields private String username;}

JavaPoet (conti.)github.com/square/javapoet/

JavaPoet (conti.)github.com/square/javapoet/

JavaPoet (conti.)github.com/square/javapoet/

Testing and Debugging

Testing and Debugging

●Guava

●compile-testing

●Truth

References●Droidcon NYC 2016 - @Eliminate("Boilerplate")

https://youtu.be/NBkl_SIHUr8

●#droidconDE 2015: Hannes Dorfmann – Annotation Processing 101 https://youtu.be/43FFfTyDYEg http://hannesdorfmann.com/annotation-processing/annotationprocessing101

●Android Tech Talk: Annotation Processing Boilerplate Destruction by Jake Wharton https://youtu.be/dOcs-NKK-RA https://speakerdeck.com/jakewharton/annotation-processing-boilerplate-destruction-square-waterloo-2014

●The 10-step guide to annotation processing in Android studio by Chris Logan http://blog.stablekernel.com/the-10-step-guide-to-annotation-processing-in-android-studio

Q&A

top related