僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
Upcoming SlideShare
Loading in...5
×
 

僕の考えるAPT開発の常識 ぐだ生 2011/04/09版

on

  • 2,680 views

 

Statistics

Views

Total Views
2,680
Views on SlideShare
1,872
Embed Views
808

Actions

Likes
3
Downloads
8
Comments
0

5 Embeds 808

http://d.hatena.ne.jp 761
http://hatenatunnel.appspot.com 31
http://webcache.googleusercontent.com 12
https://si0.twimg.com 2
http://dhatenane.greatbabyfood.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

僕の考えるAPT開発の常識 ぐだ生 2011/04/09版 僕の考えるAPT開発の常識 ぐだ生 2011/04/09版 Presentation Transcript

  • APT Annotation Processing Tool ( ╹ω╹ ) 2011/04/092011 4 9
  • @vvakame ↓2011 4 9
  • APT2011 4 9
  • ※52011 4 9
  • Annotation2011 4 9
  • Annotation @JsonModel public class Message { • Annotation = @JsonKey String id; • @JsonKey String room; • @JsonKey String text; • @Override @JsonKey String timestamp;2011 4 9
  • APT2011 4 9
  • APT • Annotation Processing Tool • • • •2011 4 9
  • APT • JSON ⇔ Model • Map<String, Object> POJO • • Reflection2011 4 9
  • ← → • Reflection • • • • • • • • •2011 4 9
  • APT Version2011 4 9
  • APT Version • • com.sun.mirror • Java5 • Slim32011 4 9
  • APT Version • JSR 269 • javax.lang.model • Java6 (JSR270) • JsonPullParser • Project Coin(JSR334)2011 4 9
  • JsonPullParser →2011 4 9
  • 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
  • AbstractProcessor • @SupportedSourceVersion(SourceVersion.RELEASE_6) @SupportedAnnotationTypes("net.vvakame.util.jsonpullparser.annotation.*") public class JsonAnnotationProcessor extends AbstractProcessor { • EntryPoint • process • RoundEnviroment Element JsonAnnotationProcessor2011 4 9
  • RoundEnviroment • Element • • • • Retention SOURCE Annotation …2011 4 9
  • Element • Element • • Annotation Element • • (ex setter, getter ) • ClassGenerateHelper#ValueExtractVisitor2011 4 9
  • TypeMirror • • Element→TypeMirror→ Element • … • Element …2011 4 9
  • 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
  • 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
  • JavaFileObject • Java • ProcessingEnvironment Filer • ClassGenerateHelper#write2011 4 9
  • • Util • Elements Element • Types • TypeMirror • Visitor • Annotation, Element, TypeMirror ClassGenerateHelper#ValueExtractVisitor2011 4 9
  • • APT jar • META-INF/services/ javax.annotation.processing.Processor • Processor FQN FQN = package + /src/main/resources/2011 4 9
  • 2011 4 9
  • • Aptina • UnitTest • TemplateEngine (MVEL) • • Eclipse • maven • jar2011 4 9
  • Aptina • Aptina • Processor JUnit • Try&Error • UnitTest … • • … JsonAnnotationProcessorTest2011 4 9
  • TemplateEngine(MVEL) • • • • Javadoc • ( ) MvelTemplate, JsonModelGen.java.mvel2011 4 9
  • maven • jar • • Eclipse • • ... pom.xml2011 4 9
  • 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
  • • core • jar • apt • APT jar • APT UnitTest • usage • APT UnitTest •2011 4 9
  • Eclipse • 1 • MVEL2011 4 9
  • 2011 4 9
  • JsonPullParser • https://github.com/vvakame/JSONPullParser • APT Json→POJO Java • Android http://bit.ly/hFTbtP • Tweet →1Tweet • SengokuDroid server-side2011 4 9
  • 2011 4 9
  • • Android Slim3 • HamsterDB..? → GPL... • SQLite..? → KVS ... • MsgpackParser • Java Formatter2011 4 9
  • Minecraft2011 4 9