Gets all fields with a specific annotation on the field or the getter











up vote
0
down vote

favorite












I need to use some way to get all fields that are annotated with a specific annotation. The annotation may be at the field or the getter (of a super class), like



public MyClass {

@MyAnnotation
String myName;

int myAge;

@MyAnnotation
int getMyAge() { return myAge; }
}


So I need Field getAllAnnotatedFields(MyClass.class, MyAnnotation.class).



I could write that method on my own, but I wonder, if there exists some util method. (I cannot found one in Apache commons, Guava or Google reflections).










share|improve this question






















  • Why just not use reflection from java ?
    – Schidu Luca
    Nov 10 at 20:48










  • @SchiduLuca Yes, that's possible, but I think, that someone has done that before and that there must some util class for that in some library.
    – t777
    Nov 10 at 20:57










  • While searching for this utility you could make your own util method, is not that hard anyway
    – Schidu Luca
    Nov 10 at 21:04






  • 1




    Okay. I have done it on my own using some reflection util methods ;)
    – t777
    Nov 11 at 12:20










  • @t777 if you solved own question then it would be still nice to post answer ;) Someone might later find that question from google or stack search and will only see that you solved it.
    – GotoFinal
    Nov 11 at 21:02

















up vote
0
down vote

favorite












I need to use some way to get all fields that are annotated with a specific annotation. The annotation may be at the field or the getter (of a super class), like



public MyClass {

@MyAnnotation
String myName;

int myAge;

@MyAnnotation
int getMyAge() { return myAge; }
}


So I need Field getAllAnnotatedFields(MyClass.class, MyAnnotation.class).



I could write that method on my own, but I wonder, if there exists some util method. (I cannot found one in Apache commons, Guava or Google reflections).










share|improve this question






















  • Why just not use reflection from java ?
    – Schidu Luca
    Nov 10 at 20:48










  • @SchiduLuca Yes, that's possible, but I think, that someone has done that before and that there must some util class for that in some library.
    – t777
    Nov 10 at 20:57










  • While searching for this utility you could make your own util method, is not that hard anyway
    – Schidu Luca
    Nov 10 at 21:04






  • 1




    Okay. I have done it on my own using some reflection util methods ;)
    – t777
    Nov 11 at 12:20










  • @t777 if you solved own question then it would be still nice to post answer ;) Someone might later find that question from google or stack search and will only see that you solved it.
    – GotoFinal
    Nov 11 at 21:02















up vote
0
down vote

favorite









up vote
0
down vote

favorite











I need to use some way to get all fields that are annotated with a specific annotation. The annotation may be at the field or the getter (of a super class), like



public MyClass {

@MyAnnotation
String myName;

int myAge;

@MyAnnotation
int getMyAge() { return myAge; }
}


So I need Field getAllAnnotatedFields(MyClass.class, MyAnnotation.class).



I could write that method on my own, but I wonder, if there exists some util method. (I cannot found one in Apache commons, Guava or Google reflections).










share|improve this question













I need to use some way to get all fields that are annotated with a specific annotation. The annotation may be at the field or the getter (of a super class), like



public MyClass {

@MyAnnotation
String myName;

int myAge;

@MyAnnotation
int getMyAge() { return myAge; }
}


So I need Field getAllAnnotatedFields(MyClass.class, MyAnnotation.class).



I could write that method on my own, but I wonder, if there exists some util method. (I cannot found one in Apache commons, Guava or Google reflections).







java reflection annotations






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 at 20:45









t777

1,17852440




1,17852440












  • Why just not use reflection from java ?
    – Schidu Luca
    Nov 10 at 20:48










  • @SchiduLuca Yes, that's possible, but I think, that someone has done that before and that there must some util class for that in some library.
    – t777
    Nov 10 at 20:57










  • While searching for this utility you could make your own util method, is not that hard anyway
    – Schidu Luca
    Nov 10 at 21:04






  • 1




    Okay. I have done it on my own using some reflection util methods ;)
    – t777
    Nov 11 at 12:20










  • @t777 if you solved own question then it would be still nice to post answer ;) Someone might later find that question from google or stack search and will only see that you solved it.
    – GotoFinal
    Nov 11 at 21:02




















  • Why just not use reflection from java ?
    – Schidu Luca
    Nov 10 at 20:48










  • @SchiduLuca Yes, that's possible, but I think, that someone has done that before and that there must some util class for that in some library.
    – t777
    Nov 10 at 20:57










  • While searching for this utility you could make your own util method, is not that hard anyway
    – Schidu Luca
    Nov 10 at 21:04






  • 1




    Okay. I have done it on my own using some reflection util methods ;)
    – t777
    Nov 11 at 12:20










  • @t777 if you solved own question then it would be still nice to post answer ;) Someone might later find that question from google or stack search and will only see that you solved it.
    – GotoFinal
    Nov 11 at 21:02


















Why just not use reflection from java ?
– Schidu Luca
Nov 10 at 20:48




Why just not use reflection from java ?
– Schidu Luca
Nov 10 at 20:48












@SchiduLuca Yes, that's possible, but I think, that someone has done that before and that there must some util class for that in some library.
– t777
Nov 10 at 20:57




@SchiduLuca Yes, that's possible, but I think, that someone has done that before and that there must some util class for that in some library.
– t777
Nov 10 at 20:57












While searching for this utility you could make your own util method, is not that hard anyway
– Schidu Luca
Nov 10 at 21:04




While searching for this utility you could make your own util method, is not that hard anyway
– Schidu Luca
Nov 10 at 21:04




1




1




Okay. I have done it on my own using some reflection util methods ;)
– t777
Nov 11 at 12:20




Okay. I have done it on my own using some reflection util methods ;)
– t777
Nov 11 at 12:20












@t777 if you solved own question then it would be still nice to post answer ;) Someone might later find that question from google or stack search and will only see that you solved it.
– GotoFinal
Nov 11 at 21:02






@t777 if you solved own question then it would be still nice to post answer ;) Someone might later find that question from google or stack search and will only see that you solved it.
– GotoFinal
Nov 11 at 21:02














1 Answer
1






active

oldest

votes

















up vote
0
down vote



accepted










This is my solution using Apache commons:



public static Collection<String> getPropertyNamesListWithAnnotation(Class<?> targetClass, Class<? extends Annotation> annotationClass) {
Set<String> fieldNamesWithAnnotation = FieldUtils.getFieldsListWithAnnotation(targetClass, annotationClass).stream().map(Field::getName).collect(Collectors.toSet());
fieldNamesWithAnnotation.addAll(MethodUtils.getMethodsListWithAnnotation(targetClass, annotationClass, true, false).stream()
.map(Method::getName)
.filter(LangHelper::isValidGetterOrSetter)
.map(name -> StringUtils.uncapitalize(RegExUtils.replaceFirst(name, "^(get|set|is)", "")))
.collect(Collectors.toSet()));
return fieldNamesWithAnnotation;
}

private static boolean isValidGetterOrSetter(String methodName) {
if (!StringUtils.startsWithAny(methodName, "get", "set", "is")) {
LOG.warn("Annotated method is no valid getter or setter: '{}' -> Ignoring", methodName);
return false;
}
return true;
}





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














     

    draft saved


    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243239%2fgets-all-fields-with-a-specific-annotation-on-the-field-or-the-getter%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote



    accepted










    This is my solution using Apache commons:



    public static Collection<String> getPropertyNamesListWithAnnotation(Class<?> targetClass, Class<? extends Annotation> annotationClass) {
    Set<String> fieldNamesWithAnnotation = FieldUtils.getFieldsListWithAnnotation(targetClass, annotationClass).stream().map(Field::getName).collect(Collectors.toSet());
    fieldNamesWithAnnotation.addAll(MethodUtils.getMethodsListWithAnnotation(targetClass, annotationClass, true, false).stream()
    .map(Method::getName)
    .filter(LangHelper::isValidGetterOrSetter)
    .map(name -> StringUtils.uncapitalize(RegExUtils.replaceFirst(name, "^(get|set|is)", "")))
    .collect(Collectors.toSet()));
    return fieldNamesWithAnnotation;
    }

    private static boolean isValidGetterOrSetter(String methodName) {
    if (!StringUtils.startsWithAny(methodName, "get", "set", "is")) {
    LOG.warn("Annotated method is no valid getter or setter: '{}' -> Ignoring", methodName);
    return false;
    }
    return true;
    }





    share|improve this answer

























      up vote
      0
      down vote



      accepted










      This is my solution using Apache commons:



      public static Collection<String> getPropertyNamesListWithAnnotation(Class<?> targetClass, Class<? extends Annotation> annotationClass) {
      Set<String> fieldNamesWithAnnotation = FieldUtils.getFieldsListWithAnnotation(targetClass, annotationClass).stream().map(Field::getName).collect(Collectors.toSet());
      fieldNamesWithAnnotation.addAll(MethodUtils.getMethodsListWithAnnotation(targetClass, annotationClass, true, false).stream()
      .map(Method::getName)
      .filter(LangHelper::isValidGetterOrSetter)
      .map(name -> StringUtils.uncapitalize(RegExUtils.replaceFirst(name, "^(get|set|is)", "")))
      .collect(Collectors.toSet()));
      return fieldNamesWithAnnotation;
      }

      private static boolean isValidGetterOrSetter(String methodName) {
      if (!StringUtils.startsWithAny(methodName, "get", "set", "is")) {
      LOG.warn("Annotated method is no valid getter or setter: '{}' -> Ignoring", methodName);
      return false;
      }
      return true;
      }





      share|improve this answer























        up vote
        0
        down vote



        accepted







        up vote
        0
        down vote



        accepted






        This is my solution using Apache commons:



        public static Collection<String> getPropertyNamesListWithAnnotation(Class<?> targetClass, Class<? extends Annotation> annotationClass) {
        Set<String> fieldNamesWithAnnotation = FieldUtils.getFieldsListWithAnnotation(targetClass, annotationClass).stream().map(Field::getName).collect(Collectors.toSet());
        fieldNamesWithAnnotation.addAll(MethodUtils.getMethodsListWithAnnotation(targetClass, annotationClass, true, false).stream()
        .map(Method::getName)
        .filter(LangHelper::isValidGetterOrSetter)
        .map(name -> StringUtils.uncapitalize(RegExUtils.replaceFirst(name, "^(get|set|is)", "")))
        .collect(Collectors.toSet()));
        return fieldNamesWithAnnotation;
        }

        private static boolean isValidGetterOrSetter(String methodName) {
        if (!StringUtils.startsWithAny(methodName, "get", "set", "is")) {
        LOG.warn("Annotated method is no valid getter or setter: '{}' -> Ignoring", methodName);
        return false;
        }
        return true;
        }





        share|improve this answer












        This is my solution using Apache commons:



        public static Collection<String> getPropertyNamesListWithAnnotation(Class<?> targetClass, Class<? extends Annotation> annotationClass) {
        Set<String> fieldNamesWithAnnotation = FieldUtils.getFieldsListWithAnnotation(targetClass, annotationClass).stream().map(Field::getName).collect(Collectors.toSet());
        fieldNamesWithAnnotation.addAll(MethodUtils.getMethodsListWithAnnotation(targetClass, annotationClass, true, false).stream()
        .map(Method::getName)
        .filter(LangHelper::isValidGetterOrSetter)
        .map(name -> StringUtils.uncapitalize(RegExUtils.replaceFirst(name, "^(get|set|is)", "")))
        .collect(Collectors.toSet()));
        return fieldNamesWithAnnotation;
        }

        private static boolean isValidGetterOrSetter(String methodName) {
        if (!StringUtils.startsWithAny(methodName, "get", "set", "is")) {
        LOG.warn("Annotated method is no valid getter or setter: '{}' -> Ignoring", methodName);
        return false;
        }
        return true;
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 13 at 17:03









        t777

        1,17852440




        1,17852440






























             

            draft saved


            draft discarded



















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243239%2fgets-all-fields-with-a-specific-annotation-on-the-field-or-the-getter%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Full-time equivalent

            さくらももこ

            13 indicted, 8 arrested in Calif. drug cartel investigation