From 2d26740286b4d91df12a4a736d811e386af3eee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler?= Date: Fri, 12 Nov 2021 17:29:10 +0100 Subject: [PATCH] FIX: typeGetAll did not work with repeated annotations on one class --- .../java/io/ebean/util/AnnotationUtil.java | 7 ++--- .../io/ebean/util/TestAnnotationUtil.java | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 ebean-api/src/test/java/io/ebean/util/TestAnnotationUtil.java diff --git a/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java b/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java index 238a3217d..583c99009 100644 --- a/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java +++ b/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java @@ -2,6 +2,7 @@ package io.ebean.util; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; +import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; @@ -57,10 +58,8 @@ public class AnnotationUtil { private static void typeGetAllCollect(Class clazz, Class annotationType, Set result) { while (clazz != null && clazz != Object.class) { - final A val = clazz.getAnnotation(annotationType); - if (val != null) { - result.add(val); - } + final A[] annotations = clazz.getAnnotationsByType(annotationType); + Collections.addAll(result, annotations); clazz = clazz.getSuperclass(); } } diff --git a/ebean-api/src/test/java/io/ebean/util/TestAnnotationUtil.java b/ebean-api/src/test/java/io/ebean/util/TestAnnotationUtil.java new file mode 100644 index 000000000..7d7519c03 --- /dev/null +++ b/ebean-api/src/test/java/io/ebean/util/TestAnnotationUtil.java @@ -0,0 +1,28 @@ +package io.ebean.util; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import java.util.Set; + +import org.junit.jupiter.api.Test; + +import io.ebean.annotation.Formula; + +public class TestAnnotationUtil { + + @Formula(select = "x") + @Formula(select = "y") + private static class TestObject { + + } + + @Test + public void testRepeatableAnnotation() { + + Set list = AnnotationUtil.typeGetAll(TestObject.class, Formula.class); + assertThat(list).hasSize(2); + + } + +}