change name

This commit is contained in:
Looly 2024-01-02 23:15:29 +08:00
parent 9e426dd3a5
commit 028f498a04
13 changed files with 78 additions and 41 deletions

View File

@ -12,6 +12,9 @@
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation;
import org.dromara.hutool.core.annotation.elements.HierarchicalAnnotatedElements;
import org.dromara.hutool.core.annotation.elements.MetaAnnotatedElement;
import org.dromara.hutool.core.annotation.elements.RepeatableMetaAnnotatedElement;
import org.dromara.hutool.core.map.WeakConcurrentMap; import org.dromara.hutool.core.map.WeakConcurrentMap;
import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.core.util.ObjUtil;
@ -41,11 +44,11 @@ import java.util.stream.Stream;
* eg: <br> * eg: <br>
* 若类<em>A</em>分别有父类和父接口<em>B</em><em>C</em> * 若类<em>A</em>分别有父类和父接口<em>B</em><em>C</em>
* 则通过<em>getXXX</em>方法将只能获得<em>A</em>上的注解 * 则通过<em>getXXX</em>方法将只能获得<em>A</em>上的注解
* 而通过<em>getXXX</em>方法将能获得<em>A</em><em>B</em><em>C</em>上的注解 * 而通过<em>findXXX</em>方法将能获得<em>A</em><em>B</em><em>C</em>上的注解
* *
* <p><strong>搜索元注解</strong> * <p><strong>搜索元注解</strong>
* <p>工具类支持搜索注解的元注解在所有格式为<em>getXXX</em><em>findXXX</em>的静态方法中 * <p>工具类支持搜索注解的元注解在所有格式为<em>getXXX</em><em>findXXX</em>的静态方法中
* 若不带有<em>directly</em>关键字则该方法支持搜索元注解否则支持搜索元注解<br> * 若不带有<em>directly</em>关键字则该方法支持搜索元注解否则支持搜索元注解<br>
* eg: <br> * eg: <br>
* 若类<em>A</em>分别有父类和父接口<em>B</em><em>C</em>上面分别有注解<em>X</em>与其元注解<em>Y</em> * 若类<em>A</em>分别有父类和父接口<em>B</em><em>C</em>上面分别有注解<em>X</em>与其元注解<em>Y</em>
* 则此时基于<em>A</em> * 则此时基于<em>A</em>

View File

@ -12,6 +12,7 @@
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation;
import org.dromara.hutool.core.annotation.elements.CombinationAnnotatedElement;
import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.classloader.ClassLoaderUtil; import org.dromara.hutool.core.classloader.ClassLoaderUtil;
import org.dromara.hutool.core.exception.HutoolException; import org.dromara.hutool.core.exception.HutoolException;
@ -68,11 +69,11 @@ public class AnnotationUtil {
* @param annotationEle 注解元素 * @param annotationEle 注解元素
* @return 组合注解元素 * @return 组合注解元素
*/ */
public static CombinationAnnotationElement toCombination(final AnnotatedElement annotationEle) { public static CombinationAnnotatedElement toCombination(final AnnotatedElement annotationEle) {
if (annotationEle instanceof CombinationAnnotationElement) { if (annotationEle instanceof CombinationAnnotatedElement) {
return (CombinationAnnotationElement) annotationEle; return (CombinationAnnotatedElement) annotationEle;
} }
return new CombinationAnnotationElement(annotationEle); return new CombinationAnnotatedElement(annotationEle);
} }
/** /**
@ -139,7 +140,7 @@ public class AnnotationUtil {
if (null == predicate) { if (null == predicate) {
return toCombination(annotationEle).getAnnotations(); return toCombination(annotationEle).getAnnotations();
} }
return CombinationAnnotationElement.of(annotationEle, predicate).getAnnotations(); return CombinationAnnotatedElement.of(annotationEle, predicate).getAnnotations();
} }
final Annotation[] result = annotationEle.getAnnotations(); final Annotation[] result = annotationEle.getAnnotations();

View File

@ -12,6 +12,7 @@
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation;
import org.dromara.hutool.core.annotation.elements.MetaAnnotatedElement;
import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.map.multi.Graph; import org.dromara.hutool.core.map.multi.Graph;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2023 looly(loolly@aliyun.com) * Copyright (c) 2023-2024. looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2. * Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at: * You may obtain a copy of Mulan PSL v2 at:
@ -10,8 +10,9 @@
* See the Mulan PSL v2 for more details. * See the Mulan PSL v2 for more details.
*/ */
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation.elements;
import org.dromara.hutool.core.annotation.AnnotationUtil;
import org.dromara.hutool.core.collection.set.SetUtil; import org.dromara.hutool.core.collection.set.SetUtil;
import org.dromara.hutool.core.map.TableMap; import org.dromara.hutool.core.map.TableMap;
@ -32,7 +33,7 @@ import java.util.function.Predicate;
* @since 4.0.9 * @since 4.0.9
**/ **/
public class CombinationAnnotationElement implements AnnotatedElement, Serializable { public class CombinationAnnotatedElement implements AnnotatedElement, Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
@ -43,14 +44,15 @@ public class CombinationAnnotationElement implements AnnotatedElement, Serializa
* @return CombinationAnnotationElement * @return CombinationAnnotationElement
* @since 5.8.0 * @since 5.8.0
*/ */
public static CombinationAnnotationElement of(final AnnotatedElement element, final Predicate<Annotation> predicate) { public static CombinationAnnotatedElement of(final AnnotatedElement element, final Predicate<Annotation> predicate) {
return new CombinationAnnotationElement(element, predicate); return new CombinationAnnotatedElement(element, predicate);
} }
/** /**
* 元注解 * 元注解
*/ */
private static final Set<Class<? extends Annotation>> META_ANNOTATIONS = SetUtil.of(Target.class, // private static final Set<Class<? extends Annotation>> META_ANNOTATIONS = SetUtil.of(
Target.class, //
Retention.class, // Retention.class, //
Inherited.class, // Inherited.class, //
Documented.class, // Documented.class, //
@ -77,7 +79,7 @@ public class CombinationAnnotationElement implements AnnotatedElement, Serializa
* *
* @param element 需要解析注解的元素可以是ClassMethodFieldConstructorReflectPermission * @param element 需要解析注解的元素可以是ClassMethodFieldConstructorReflectPermission
*/ */
public CombinationAnnotationElement(final AnnotatedElement element) { public CombinationAnnotatedElement(final AnnotatedElement element) {
this(element, null); this(element, null);
} }
@ -88,7 +90,7 @@ public class CombinationAnnotationElement implements AnnotatedElement, Serializa
* @param predicate 过滤器{@link Predicate#test(Object)}返回{@code true}保留否则不保留 * @param predicate 过滤器{@link Predicate#test(Object)}返回{@code true}保留否则不保留
* @since 5.8.0 * @since 5.8.0
*/ */
public CombinationAnnotationElement(final AnnotatedElement element, final Predicate<Annotation> predicate) { public CombinationAnnotatedElement(final AnnotatedElement element, final Predicate<Annotation> predicate) {
this.predicate = predicate; this.predicate = predicate;
init(element); init(element);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2023 looly(loolly@aliyun.com) * Copyright (c) 2023-2024. looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2. * Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at: * You may obtain a copy of Mulan PSL v2 at:
@ -10,8 +10,9 @@
* See the Mulan PSL v2 for more details. * See the Mulan PSL v2 for more details.
*/ */
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation.elements;
import org.dromara.hutool.core.annotation.AnnotationUtil;
import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.reflect.ClassUtil; import org.dromara.hutool.core.reflect.ClassUtil;
import org.dromara.hutool.core.reflect.method.MethodUtil; import org.dromara.hutool.core.reflect.method.MethodUtil;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2023 looly(loolly@aliyun.com) * Copyright (c) 2023-2024. looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2. * Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at: * You may obtain a copy of Mulan PSL v2 at:
@ -10,8 +10,11 @@
* See the Mulan PSL v2 for more details. * See the Mulan PSL v2 for more details.
*/ */
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation.elements;
import org.dromara.hutool.core.annotation.AnnotationMapping;
import org.dromara.hutool.core.annotation.AnnotationUtil;
import org.dromara.hutool.core.annotation.ResolvedAnnotationMapping;
import org.dromara.hutool.core.stream.EasyStream; import org.dromara.hutool.core.stream.EasyStream;
import org.dromara.hutool.core.text.CharSequenceUtil; import org.dromara.hutool.core.text.CharSequenceUtil;
import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.array.ArrayUtil;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2023 looly(loolly@aliyun.com) * Copyright (c) 2023-2024. looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2. * Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at: * You may obtain a copy of Mulan PSL v2 at:
@ -10,8 +10,11 @@
* See the Mulan PSL v2 for more details. * See the Mulan PSL v2 for more details.
*/ */
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation.elements;
import org.dromara.hutool.core.annotation.AnnotationMapping;
import org.dromara.hutool.core.annotation.AnnotationUtil;
import org.dromara.hutool.core.annotation.RepeatableAnnotationCollector;
import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.text.CharSequenceUtil; import org.dromara.hutool.core.text.CharSequenceUtil;
import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.array.ArrayUtil;

View File

@ -0,0 +1,18 @@
/*
* Copyright (c) 2024. looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* https://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* AnnotatedElement对象实现
*
* @author Looly, huangchengxing
*/
package org.dromara.hutool.core.annotation.elements;

View File

@ -12,6 +12,7 @@
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation;
import org.dromara.hutool.core.annotation.elements.CombinationAnnotatedElement;
import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.core.util.ObjUtil;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@ -41,7 +42,7 @@ public class AnnotationUtilTest {
@Test @Test
public void testToCombination() { public void testToCombination() {
final CombinationAnnotationElement element = AnnotationUtil.toCombination(ClassForTest.class); final CombinationAnnotatedElement element = AnnotationUtil.toCombination(ClassForTest.class);
Assertions.assertEquals(2, element.getAnnotations().length); Assertions.assertEquals(2, element.getAnnotations().length);
} }

View File

@ -12,25 +12,26 @@
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation;
import org.dromara.hutool.core.annotation.elements.CombinationAnnotatedElement;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.lang.annotation.*; import java.lang.annotation.*;
/** /**
* test for {@link CombinationAnnotationElement} * test for {@link CombinationAnnotatedElement}
*/ */
public class CombinationAnnotationElementTest { public class CombinationAnnotatedElementTest {
@Test @Test
public void testOf() { public void testOf() {
final CombinationAnnotationElement element = CombinationAnnotationElement.of(ClassForTest.class, a -> true); final CombinationAnnotatedElement element = CombinationAnnotatedElement.of(ClassForTest.class, a -> true);
Assertions.assertNotNull(element); Assertions.assertNotNull(element);
} }
@Test @Test
public void testIsAnnotationPresent() { public void testIsAnnotationPresent() {
final CombinationAnnotationElement element = CombinationAnnotationElement.of(ClassForTest.class, a -> true); final CombinationAnnotatedElement element = CombinationAnnotatedElement.of(ClassForTest.class, a -> true);
Assertions.assertTrue(element.isAnnotationPresent(MetaAnnotationForTest.class)); Assertions.assertTrue(element.isAnnotationPresent(MetaAnnotationForTest.class));
} }
@ -38,21 +39,21 @@ public class CombinationAnnotationElementTest {
public void testGetAnnotation() { public void testGetAnnotation() {
final AnnotationForTest annotation1 = ClassForTest.class.getAnnotation(AnnotationForTest.class); final AnnotationForTest annotation1 = ClassForTest.class.getAnnotation(AnnotationForTest.class);
final MetaAnnotationForTest annotation2 = AnnotationForTest.class.getAnnotation(MetaAnnotationForTest.class); final MetaAnnotationForTest annotation2 = AnnotationForTest.class.getAnnotation(MetaAnnotationForTest.class);
final CombinationAnnotationElement element = CombinationAnnotationElement.of(ClassForTest.class, a -> true); final CombinationAnnotatedElement element = CombinationAnnotatedElement.of(ClassForTest.class, a -> true);
Assertions.assertEquals(annotation1, element.getAnnotation(AnnotationForTest.class)); Assertions.assertEquals(annotation1, element.getAnnotation(AnnotationForTest.class));
Assertions.assertEquals(annotation2, element.getAnnotation(MetaAnnotationForTest.class)); Assertions.assertEquals(annotation2, element.getAnnotation(MetaAnnotationForTest.class));
} }
@Test @Test
public void testGetAnnotations() { public void testGetAnnotations() {
final CombinationAnnotationElement element = CombinationAnnotationElement.of(ClassForTest.class, a -> true); final CombinationAnnotatedElement element = CombinationAnnotatedElement.of(ClassForTest.class, a -> true);
final Annotation[] annotations = element.getAnnotations(); final Annotation[] annotations = element.getAnnotations();
Assertions.assertEquals(2, annotations.length); Assertions.assertEquals(2, annotations.length);
} }
@Test @Test
public void testGetDeclaredAnnotations() { public void testGetDeclaredAnnotations() {
final CombinationAnnotationElement element = CombinationAnnotationElement.of(ClassForTest.class, a -> true); final CombinationAnnotatedElement element = CombinationAnnotatedElement.of(ClassForTest.class, a -> true);
final Annotation[] annotations = element.getDeclaredAnnotations(); final Annotation[] annotations = element.getDeclaredAnnotations();
Assertions.assertEquals(2, annotations.length); Assertions.assertEquals(2, annotations.length);
} }

View File

@ -13,6 +13,7 @@
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.dromara.hutool.core.annotation.elements.HierarchicalAnnotatedElements;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -12,6 +12,7 @@
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation;
import org.dromara.hutool.core.annotation.elements.MetaAnnotatedElement;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -12,6 +12,7 @@
package org.dromara.hutool.core.annotation; package org.dromara.hutool.core.annotation;
import org.dromara.hutool.core.annotation.elements.RepeatableMetaAnnotatedElement;
import org.dromara.hutool.core.collection.iter.IterUtil; import org.dromara.hutool.core.collection.iter.IterUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;