annotation processing

36
Annotation Processing Benjamin Cheng

Upload: chengwc

Post on 09-Jan-2017

248 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Annotation processing

Annotation ProcessingBenjamin Cheng

Page 2: Annotation processing

Examples

Page 3: Annotation processing

AutoValue github.com/google/auto/

Page 4: Annotation processing

AutoValue github.com/google/auto/

Page 5: Annotation processing

Butterknife jakewharton.github.io/butterknife/

Page 6: Annotation processing

Butterknife jakewharton.github.io/butterknife/

Page 7: Annotation processing
Page 8: Annotation processing

Annotation Processing

Page 9: Annotation processing
Page 10: Annotation processing

Annotation Processing (Why?)

●Reduce writing boilerplate code

●May beyond our imagination

Page 11: Annotation processing

Annotation Processing (What?)

●Part of javac

●@Annotation based

●Generate .java source files (new files only)

Page 12: Annotation processing

Components

●Annotations

●Processor

●APT (Annotation Processing Tool)

●Annotated Sources

Page 13: Annotation processing

Annotations

Page 14: Annotation processing

Annotation Processor

Page 15: Annotation processing

Annotation Processor (conti.)

Page 16: Annotation processing

Annotation Processor (conti.)

Page 17: Annotation processing

Elements

Page 18: Annotation processing

ServiceLoader Discovery File

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

com.example.ExampleProcessor

Page 19: Annotation processing

Processing Rounds

javacBuilderProcessorOtherProcessor

out/

User.class

UserBuilder.class

@Otherpublic class GeneratedClass { // …}

Page 20: Annotation processing

Processing Rounds (conti.)

javacBuilderProcessorOtherProcessor

out/

User.class

UserBuilder.classpublic class OtherGenClass { // …}

GeneratedClass.class

Page 21: Annotation processing

Processing Rounds (conti.)

javacBuilderProcessorOtherProcessor

out/

User.class

UserBuilder.classpublic class OtherGenClass { // …}

GeneratedClass.class

Page 22: Annotation processing

Processing Rounds (conti.)

javacBuilderProcessorOtherProcessor

out/

User.class

UserBuilder.class

GeneratedClass.class

OtherGenClass.class

Page 23: Annotation processing

Add to APT Classpath

Page 24: Annotation processing

Code Generation

Page 25: Annotation processing

Code Generation

●StringBuilder

●JavaPoet

Page 26: Annotation processing

JavaPoet

●Use Fluent API with builders

●Based on Specs○ TypeSpec

○ MethodSpec

○ ParameterSpec

○ FiledSpec

github.com/square/javapoet/

Page 27: Annotation processing

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

Page 28: Annotation processing

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

public final class UserBuilder { … }

Page 29: Annotation processing

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

Page 30: Annotation processing

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

Page 31: Annotation processing

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

Page 32: Annotation processing

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

Page 33: Annotation processing

Testing and Debugging

Page 34: Annotation processing

Testing and Debugging

●Guava

●compile-testing

●Truth

Page 35: Annotation processing

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

Page 36: Annotation processing

Q&A