From de06d8777caead71954766f803654e9735580d32 Mon Sep 17 00:00:00 2001
From: huangchengxing <841396397@qq.com>
Date: Wed, 21 Sep 2022 18:18:55 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BD=93=E6=B3=A8=E8=A7=A3?=
=?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=BE=AA=E7=8E=AF=E5=BC=95=E7=94=A8=E6=97=B6?=
=?UTF-8?q?=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../core/annotation/MetaAnnotatedElement.java | 15 +++++++++------
.../RepeatableMetaAnnotatedElement.java | 15 +++++++++------
.../core/annotation/AnnotatedElementUtilTest.java | 1 +
.../core/annotation/MetaAnnotatedElementTest.java | 1 +
.../RepeatableMetaAnnotatedElementTest.java | 1 +
5 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/hutool-core/src/main/java/cn/hutool/core/annotation/MetaAnnotatedElement.java b/hutool-core/src/main/java/cn/hutool/core/annotation/MetaAnnotatedElement.java
index 313642514..a10ac07d9 100644
--- a/hutool-core/src/main/java/cn/hutool/core/annotation/MetaAnnotatedElement.java
+++ b/hutool-core/src/main/java/cn/hutool/core/annotation/MetaAnnotatedElement.java
@@ -10,7 +10,6 @@ import java.lang.annotation.Inherited;
import java.lang.reflect.AnnotatedElement;
import java.util.*;
import java.util.function.BiFunction;
-import java.util.stream.Stream;
/**
*
注解元素映射,用于包装一个{@link AnnotatedElement},然后将被包装的元素上,
@@ -314,11 +313,15 @@ public class MetaAnnotatedElement> imple
}
// 保存该注解,并将其需要处理的元注解也加入队列
mappings.put(mapping.annotationType(), mapping);
- Stream.of(AnnotationUtil.getDeclaredAnnotations(mapping.annotationType()))
- .map(annotation -> createMapping(mapping, annotation))
- .filter(Objects::nonNull)
- .filter(m -> isNeedMapping(mappings, m))
- .forEach(deque::addLast);
+ for (final Annotation annotation : AnnotationUtil.getDeclaredAnnotations(mapping.annotationType())) {
+ if (mappings.containsKey(annotation.annotationType())) {
+ continue;
+ }
+ final T m = createMapping(mapping, annotation);
+ if (Objects.nonNull(m) && isNeedMapping(mappings, m)) {
+ deque.addLast(m);
+ }
+ }
}
}
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/annotation/RepeatableMetaAnnotatedElement.java b/hutool-core/src/main/java/cn/hutool/core/annotation/RepeatableMetaAnnotatedElement.java
index bca63a030..bc10645c7 100644
--- a/hutool-core/src/main/java/cn/hutool/core/annotation/RepeatableMetaAnnotatedElement.java
+++ b/hutool-core/src/main/java/cn/hutool/core/annotation/RepeatableMetaAnnotatedElement.java
@@ -10,7 +10,6 @@ import java.lang.reflect.AnnotatedElement;
import java.util.*;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
/**
* 支持可重复注解的增强{@link AnnotatedElement},
@@ -347,11 +346,15 @@ public class RepeatableMetaAnnotatedElement mappingFactory.apply(source, annotation))
- .filter(Objects::nonNull)
- .filter(m -> isNeedMapping(collectedMappings, m))
- .forEach(deque::addLast);
+ for (final Annotation annotation : AnnotationUtil.getDeclaredAnnotations(source.annotationType())) {
+ if (collectedMappings.containsKey(annotation.annotationType())) {
+ continue;
+ }
+ final T mapping = mappingFactory.apply(source, annotation);
+ if (Objects.nonNull(mapping) && isNeedMapping(collectedMappings, mapping)) {
+ deque.addLast(mapping);
+ }
+ }
}
return collectedMappings;
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/annotation/AnnotatedElementUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/annotation/AnnotatedElementUtilTest.java
index 9b2fe5b85..5585b657e 100644
--- a/hutool-core/src/test/java/cn/hutool/core/annotation/AnnotatedElementUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/annotation/AnnotatedElementUtilTest.java
@@ -572,6 +572,7 @@ public class AnnotatedElementUtilTest {
// ================= interface =================
+ @Annotation6
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
private @interface Annotation5 {}
diff --git a/hutool-core/src/test/java/cn/hutool/core/annotation/MetaAnnotatedElementTest.java b/hutool-core/src/test/java/cn/hutool/core/annotation/MetaAnnotatedElementTest.java
index f3d780342..f4cdfdc1d 100644
--- a/hutool-core/src/test/java/cn/hutool/core/annotation/MetaAnnotatedElementTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/annotation/MetaAnnotatedElementTest.java
@@ -170,6 +170,7 @@ public class MetaAnnotatedElementTest {
Assert.assertSame(source, element.getElement());
}
+ @Annotation4 // 循环引用
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
private @interface None { }
diff --git a/hutool-core/src/test/java/cn/hutool/core/annotation/RepeatableMetaAnnotatedElementTest.java b/hutool-core/src/test/java/cn/hutool/core/annotation/RepeatableMetaAnnotatedElementTest.java
index 7471e9497..2fc38fe03 100644
--- a/hutool-core/src/test/java/cn/hutool/core/annotation/RepeatableMetaAnnotatedElementTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/annotation/RepeatableMetaAnnotatedElementTest.java
@@ -199,6 +199,7 @@ public class RepeatableMetaAnnotatedElementTest {
@Retention(RetentionPolicy.RUNTIME)
private @interface Annotation3 { }
+ @Annotation4 // 循环引用
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
private @interface Annotation4 { }