0

I have two annotations.

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OmegaExtra {
    String value() default "";
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OmegaExtraModel {

    String value() default "";

}

I have some class. Like example

class Map {

@OmegaExtra
String param1;

@OmegaExtra
String param2;

@OmegaExtra
String param3;

}

And this is my Activity class.

@OmegaActivity
    public class ShareFilesActivity extends AppCompatActivity {

    @OmegaExtra
    String value;

    @OmegaExtraModel
    Map map;

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_share_files);
            AppOmegaIntentBuilder.inject(this);
        }

    }

It's not problem for me to find all @OmegaExtra elements. But how could i found child element for

@OmegaExtraModel
Map map;

I mean I should find all element annoted like @OmegaExtra inside @OmegaExtraModel.

@Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(OmegaActivity.class));
for(Element element: elements) {
List<? extends Element> subList = element.getEnclosedElements();
     for (Element subElement : subList) {
     OmegaExtra annotation = subElement.getAnnotation(OmegaExtraModel.class);
     }
}
T. Roman
  • 322
  • 6
  • 14

1 Answers1

1

Try this:

List<? extends Element> enclosedElements = ((DeclaredType) subElement.asType()).asElement().getEnclosedElements();
 for (Element childElement : enclosedElements) {
 OmegaExtra annotation = element.getAnnotation(OmegaExtra.class);
 if(annotation != null) {
 ....
 }
 }