修复CombinationAnnotationElement造成递归循环

This commit is contained in:
Looly
2022-07-17 18:17:32 +08:00
parent 45c5d11449
commit 5c6e7cf507
3 changed files with 8 additions and 10 deletions

View File

@@ -1,19 +1,13 @@
package cn.hutool.core.annotation;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.TableMap;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.reflect.AnnotatedElement;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.function.Predicate;
/**
@@ -126,7 +120,9 @@ public class CombinationAnnotationElement implements AnnotatedElement, Serializa
// 直接注解
for (Annotation annotation : annotations) {
annotationType = annotation.annotationType();
if (AnnotationUtil.isNotJdkMateAnnotation(annotationType)) {
// 跳过元注解和已经处理过的注解,防止递归调用
if (AnnotationUtil.isNotJdkMateAnnotation(annotationType)
&& false == declaredAnnotationMap.containsKey(annotationType)) {
if(test(annotation)){
declaredAnnotationMap.put(annotationType, annotation);
}
@@ -145,7 +141,8 @@ public class CombinationAnnotationElement implements AnnotatedElement, Serializa
Class<? extends Annotation> annotationType;
for (Annotation annotation : annotations) {
annotationType = annotation.annotationType();
if (AnnotationUtil.isNotJdkMateAnnotation(annotationType)) {
if (AnnotationUtil.isNotJdkMateAnnotation(annotationType)
&& false == declaredAnnotationMap.containsKey(annotationType)) {
if(test(annotation)){
annotationMap.put(annotationType, annotation);
}

View File

@@ -16,14 +16,14 @@ public class AnnotationUtilTest {
public void getCombinationAnnotationsTest(){
final Annotation[] annotations = AnnotationUtil.getAnnotations(ClassWithAnnotation.class, true);
Assert.assertNotNull(annotations);
Assert.assertEquals(3, annotations.length);
Assert.assertEquals(2, annotations.length);
}
@Test
public void getCombinationAnnotationsWithClassTest(){
final AnnotationForTest[] annotations = AnnotationUtil.getCombinationAnnotations(ClassWithAnnotation.class, AnnotationForTest.class);
Assert.assertNotNull(annotations);
Assert.assertEquals(2, annotations.length);
Assert.assertEquals(1, annotations.length);
Assert.assertEquals("测试", annotations[0].value());
}