-Aptでメソッドのパラメータ名を取る。
昨日のSeasarConで、S2Daoリーダの上原さんがうろうろしていたのでファウンデーションブースに手招きして入会させた後、事務を手伝ってもらう(ように威圧)。座ってる中、Aptでメソッドのパラメータ名を取れるかどうか聞かれたので調査コード書いてみました。
public class ParamNameProcessorFactory implements AnnotationProcessorFactory { public Collection<String> supportedAnnotationTypes() { return Collections.unmodifiableList(Arrays.asList("*")); } public Collection<String> supportedOptions() { return Collections.emptySet(); } public AnnotationProcessor getProcessorFor( Set<AnnotationTypeDeclaration> atds, AnnotationProcessorEnvironment env) { Messager messager = env.getMessager(); for (TypeDeclaration td : env.getTypeDeclarations()) { messager.printNotice(td.getQualifiedName()); for(MethodDeclaration md: td.getMethods()) { messager.printNotice(md.getSimpleName()); for(ParameterDeclaration pd: md.getParameters()) { messager.printNotice(pd.getSimpleName() + ": " + pd.getType().toString()); } } } return AnnotationProcessors.NO_OP; } }
とまあ、スマン、ProcessorFactoryダケで適当に済ましましたが。。。
public interface SampleDao { String getUserName(String uid); }
こういう対象クラスをAptで処理すると、
(。。。省略)
sample.apt:
[java] 注: org.ashikunep.javapress47.sample.SampleDao
[java] 注: getUserName
[java] 注: uid: java.lang.String
BUILD SUCCESSFUL
Total time: 6 seconds
ハイ、「uid」出力されてますね。ということでAptではパラメータ名がちゃんと取れる、ということでした。