Eclipse 㧠Pluggable Annotation Processing API
Pluggable Annotation Processing API ã¯Java6ããå°å
¥ãããAPIã§ãããããã¤ããã¨ãã³ã³ãã¤ã«æã«ã¢ããã¼ã·ã§ã³ãèªãã§ã³ã¼ããçæããããæ¤è¨¼ãããã§ãã¾ããjavacå®è¡æã«å¦çã§ããã®ã¯ドキュメントè¦ãã¨ãããã®ã§ãããå®ã¯Eclipseã®ãã«ãæã«ããã¯ã§ãã¾ãï¼Eclipseã®ã¨ãã£ã¿ä¸ã«ã¨ã©ã¼è¡¨ç¤ºã¨ããã§ããï¼ãEclipseã§åãããã¨ãã¦æ
å ±ãããã£ããã§ããããªããªããããããããã®ãè¦ã¤ãããªãã£ãã®ã§ããã«æ¸ãã¦ããã¾ããå®ã¯ç°¡åãªãã§ããã©ããããã©ãã«ãè¦å½ãããªãã£ããã§ãããã
Pluggable Annotation Processing APIã®èª¬æãµã¤ãã¯ããã¤ããã£ã¦æå¾ã«ãªã³ã¯ã¯ã£ã¦ããã¾ããã
Eclipseã¯Java6ã§åããã
ã¾ãã¯ãEclipseãJava6ã§ãããã¦ãããã¨ã確èªããã¨ããã§ãã
Eclipseã®ãã¼ã¸ã§ã³ã¯ããã§ã¯3.4.0ã使ã£ã¦ãã¾ããæ°ãããã°æ°ããã»ã©ãããã§ãï¼ã¡ã½ããã®ãã©ã¡ã¼ã¿åãã¨ã£ããã¨ããã°ã£ã¦ããAPIãããããã§ãï¼ã
æ°è¦ããã¸ã§ã¯ãï¼Processoræä¾å´ï¼ãä½ãã
processorã¨ããååã«ãã¦ã¿ã¾ãããJava6ã使ããªãã¨ããã¾ããã
javax.annotation.processing.AbstractProcessorãç¶æ¿ããã¯ã©ã¹ãã¤ããã
Javaã¯ã©ã¹ãä½ãã¾ããããã§ã¯SuppressWarningsã§è¦åãæ¶ããã¨ãã¦ãããã«è¦åãåºãã¨ãããããããªSuppressWarningsProcessorã¨ããã¯ã©ã¹ãä½ãã¾ãããã¤ã³ãã¯ããã¤ãããã¾ããã@SupportedAnnotationTypesã§å¦çããã¢ããã¼ã·ã§ã³ãæå®ãã¦ã¾ãã
import java.util.Set; import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.Messager; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; import javax.tools.Diagnostic.Kind; @SupportedSourceVersion(SourceVersion.RELEASE_6) @SupportedAnnotationTypes("java.lang.SuppressWarnings") public class SuppressWarningsProcessor extends AbstractProcessor { @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { Messager messager = processingEnv.getMessager(); for (TypeElement annotation : annotations) { for (Element element : roundEnv .getElementsAnnotatedWith(annotation)) { messager.printMessage(Kind.WARNING, "@SuppressWarningsãã¡ãã ã", element); } } return true; } }
META-INF/services/javax.annotation.processing.Processor
META-INF/servicesã®ä¸ã®javax.annotation.processing.Processorã¨ãããã¡ã¤ã«ãä½æãä»ä½ã£ãã¯ã©ã¹ãç»é²ãã¦ããã¾ããã¯ã©ã¹åãè¨è¿°ããã ããæ¹è¡ã§åºåã£ã¦è¤æ°æ¸ããã¨ãã§ãã¾ãã
SuppressWarningsProcessor
ããã¸ã§ã¯ãã®æ§æ
ãããªãããã
processor +--src +--SuppressWarningsProcessor.java +--META-INF +--services +--javax.annotation.processing.Processor
æ°è¦ããã¸ã§ã¯ãï¼Processorå©ç¨å´ï¼ãä½ãã
ããã§ã¯clientã¨ãã¾ããJava6ã使ããªãã¨ããã¾ããã
Sample.java
é©å½ã«ã¯ã©ã¹ãä½ãã¾ãããã
以ä¸ã¯ã¸ã§ããªã¯ã¹ã使ããªãListãã¤ãã£ã¡ãã£ã¦@SuppressWarnings("unchecked")ã§è¦åãæå¶ãã¦ããã¨ããã³ã¼ãã§ãã
import java.util.ArrayList; import java.util.List; @SuppressWarnings("unchecked") public class Sample { void hoge() { List list = new ArrayList(); System.out.println(list.size()); } }
Factory Pathã®æå®
ããã¸ã§ã¯ããå³ã¯ãªãã¯ãã¦ãJava Compilerã-ãAnnotation Processingã-ãFactory Pathãã¨ãã©ãããã£ãä½æããjarãç»é²ãã¾ãã
ãAnnotation Processingãã¨ãFactory Pathãã®ç»é¢ã§ã¯ä¸¡æ¹ã¨ããEnable project specific settingsãã«ãã§ãã¯ããã¾ãã
OKã¨ãã¾ãã
ã¨ãã£ã¿ã§Sample.javaã確èª
SuppressWarningsProcessorã§å¦çãããã¯ã¼ãã³ã°ã¡ãã»ã¼ã¸ãåºã¦ãã¾ãã
ã¡ãªã¿ã«javacããã¨ãããªæã
D:\workspaces\main\client\src>javac -cp D:\processor.jar Sample.java Sample.java:5: è¦å:@SuppressWarningsãã¡ãã ã public class Sample { ^
ã¾ã¨ã
Eclipseã®ãã©ã°ã¤ã³ããã§ãããã¨ã¯å°ãªãã§ãããæ¨æºã®APIã§ã§ããã®ã¯ããã§ããããjavacã§ä½¿ããããä»ã®IDEã§ã®ãµãã¼ãç¶æ³ã¯ã©ããªãã§ããããï¼
Pluggable Annotation Processing APIã®èª¬æã¯TECHSCOREã¨Java SE 6å®å ¨æ»ç¥ãããããããã§ãã
- http://www.techscore.com/tech/J2SE/JavaSE6/8.html#mustang8-1
- http://itpro.nikkeibp.co.jp/article/COLUMN/20081219/321816/?ST=develop
ãããããããã¨ããã¨Visitorããã£ã±ãç»å ´ãã¦æ¥½ããã§ããjavax.lang.model.utilパッケージã¨ããVisitorå¨ã¯å¿ è¦ã§ãã
追è¨
ãªã³ã¯å¼µã£ãå
ã®JavaDocã¯è±èªã§ããããã¦ã³ãã¼ãã§ãããã®ã¯æ¥æ¬åããã¦ã¾ãã
ããã«è¿½è¨ - 2010/12/12
ãã®ã¨ã³ããªãæ¸ããæç¹ã§ã¯ã¾ã ããã¾ããã§ããããä»ãªãAptina Unitã¨ããã¨ã¦ã便å©ãªãã¼ã«ãããã¾ããPluggable Annotation Processing APIã使ã£ã¦ä½ããä½ããã¨æããªããAptina Unitã使ãã®ã¯ã¨ã¦ãããããã§ãããã¹ãããããã°ã«ä½¿ãããã¨ã¯ãã¡ãããå¦ç¿ç¨ã«ã¡ãã£ã¨æ¸ãã¦åããã¦ã¿ãã¨ãã£ãå ´åã«ãéå®ãã¾ããä¸ã«æ¸ãããããªjarã«ã¾ã¨ãããããæé ãä¸åä¸è¦ã§ãã
Pluggable Annotation Processing APIã®å ·ä½çãªä½¿ãæ¹ãç¥ãããã¨ããã®ã§ããã°ãAptinaãDomaã®ã³ã¼ããèªãã§ã¿ãã®ãããããã§ãã