Annotation Processingにおいては、処理対象のクラスはElement及びTypeMirrorでのみ扱うことができ、Classとして扱うことができない。
なので、処理対象でないクラスと比較する場合(対象のクラスが特定のクラスを継承しているか判定するなど)、ClassからTypeElementもしくはTypeMirrorを取得する必要がある。
TypeElementを取得できればElement#asType()
でTypeMirrorを取得できるので、ClassからTypeElementを取得できれば解決する。
使うメソッドは java.lang.model.util.Elements#getTypeElement(CharSequence name)
java.lang.model.util.Elements
はインターフェースである。
ProcessingEnvironment#getElementUtils()
でインスタンスが取得できる。
よって、AbstractProcessorを継承したクラス内でprocessingEnvを参照して取得すればよい。
よって、コードは以下のようになる。
ちなみにJavaはJava8。
ExampleProcessor.java
Elements elementUtils = processingEnv.getElementUtils()
TypeElement element = elementUtils.getTypeElement("java.lang.String")
ExampleProcessor.kt
val elementUtils = processingEnv.elementUtils
val element = elementUtils.getTypeElement("java.lang.String")
これで、elementはjava.lang.String
クラスのTypeElementになる。