僕の考えるAPT開発の常識

  • 3,294 views
Uploaded on

2011/04/08 トップゲート社内で実施した勉強会の発表資料

2011/04/08 トップゲート社内で実施した勉強会の発表資料

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,294
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
16
Comments
0
Likes
10

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. APT Annotation Processing Tool TOPGATE 2011/04/082011 4 9
  • 2. @vvakame ↓2011 4 9
  • 3. Annotation2011 4 9
  • 4. Annotation @JsonModel public class Message { • Annotation = @JsonKey String id; • @JsonKey String room; • @JsonKey String text; • @Override @JsonKey String timestamp;2011 4 9
  • 5. APT2011 4 9
  • 6. APT • Annotation Processing Tool • • • •2011 4 9
  • 7. Slim3 APT • Entity ⇔ Model • Map<String, Object> POJO • • Reflection2011 4 9
  • 8. ← → • Reflection • • • • • • • • •2011 4 9
  • 9. APT Version2011 4 9
  • 10. APT Version • • com.sun.mirror • Java5 • Slim32011 4 9
  • 11. APT Version • JSR 269 • javax.lang.model • Java6 (JSR270) • JsonPullParser • Project Coin(JSR334)2011 4 9
  • 12. JsonPullParser →2011 4 9
  • 13. Annotation • @interface • Retention ( Annotation ) • Target ( Annotation ) @Retention(RetentionPolicy.SOURCE) @Target({ ElementType.FIELD }) JsonModel public @interface JsonKey { JsonKey public String value() default ""; public boolean in() default true; public boolean out() default true; public boolean decamelize() default false; }2011 4 9
  • 14. AbstractProcessor • @SupportedSourceVersion(SourceVersion.RELEASE_6) @SupportedAnnotationTypes("net.vvakame.util.jsonpullparser.annotation.*") public class JsonAnnotationProcessor extends AbstractProcessor { • EntryPoint • process • RoundEnviroment Element JsonAnnotationProcessor2011 4 9
  • 15. RoundEnviroment • Element • • • • Retention SOURCE Annotation …2011 4 9
  • 16. Element • Element • • Annotation Element • • (ex setter, getter ) • ClassGenerateHelper#ValueExtractVisitor2011 4 9
  • 17. TypeMirror • • Element→TypeMirror→ Element • … • Element …2011 4 9
  • 18. Annotation • Annotation APT @JsonModel(treatUnknownKeyAsError = true, String getElementKeyString(Element element) { decamelize = true) JsonKey key = element.getAnnotation(JsonKey.class); public class Hoge extends RecvGeoInfoLog { JsonModel model = element.getEnclosingElement() .getAnnotation(JsonModel.class); @JsonKey("foga") String keyStr; String piyo; if (!"".equals(key.value())) { keyStr = key.value(); @JsonKey(converter = DateConverter.class) } else if ("".equals(key.value()) && key.decamelize()) { Date at; keyStr = decamelize(element.toString()); } } else if ("".equals(key.value()) && model.decamelize()) { keyStr = decamelize(element.toString()); } else { keyStr = element.toString(); } return keyStr; }2011 4 9
  • 19. Message • • Element | JsonKey key = el.getAnnotation(JsonKey.class); String setter = getElementSetter(el); if (key.in() && setter == null) { Log.e("cant find setter method", el); encountError = true; return defaultAction(t, el); } Log2011 4 9
  • 20. JavaFileObject • Java • ProcessingEnvironment Filer • ClassGenerateHelper#write2011 4 9
  • 21. • Util • Elements Element • Types • TypeMirror • Visitor • Annotation, Element, TypeMirror ClassGenerateHelper#ValueExtractVisitor2011 4 9
  • 22. • APT jar • META-INF/services/ javax.annotation.processing.Processor • Processor FQN FQN = package + /src/main/resources/2011 4 9
  • 23. 2011 4 9
  • 24. • Aptina • UnitTest • TemplateEngine (MVEL) • • Eclipse • maven • jar2011 4 9
  • 25. Aptina • Aptina • Processor JUnit • Try&Error • UnitTest … • • … JsonAnnotationProcessorTest2011 4 9
  • 26. TemplateEngine(MVEL) • • • • Javadoc • ( ) MvelTemplate, JsonModelGen.java.mvel2011 4 9
  • 27. maven • jar • • Eclipse • • ... pom.xml2011 4 9
  • 28. Formatter...? • Java • ( ) • UnitTest … • FQN import … } else if ("place".equals(key)) { net.vvakame.sample.twitter.Place tmp = net.vvakame.sample.twitter.PlaceGenerated.get(parser); obj.setPlace(tmp); if (listener != null) { listener.onAdd(tmp); }2011 4 9
  • 29. • core • jar • apt • APT jar • APT UnitTest • usage • APT UnitTest •2011 4 9
  • 30. Eclipse • 1 • MVEL2011 4 9
  • 31. 2011 4 9
  • 32. JsonPullParser • https://github.com/vvakame/JSONPullParser • APT Json→POJO Java • Android http://bit.ly/hFTbtP • Tweet →1Tweet • SengokuDroid server-side2011 4 9
  • 33. 2011 4 9
  • 34. • Android Slim3 • HamsterDB..? → GPL... • SQLite..? → KVS ... • MsgpackParser • Java Formatter2011 4 9
  • 35. Minecraft2011 4 9