package com.qianwen.core.tool.utils;
|
|
import java.lang.annotation.Annotation;
|
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Method;
|
import org.springframework.core.BridgeMethodResolver;
|
import org.springframework.core.DefaultParameterNameDiscoverer;
|
import org.springframework.core.MethodParameter;
|
import org.springframework.core.ParameterNameDiscoverer;
|
import org.springframework.core.annotation.AnnotatedElementUtils;
|
import org.springframework.core.annotation.SynthesizingMethodParameter;
|
import org.springframework.util.ClassUtils;
|
import org.springframework.web.method.HandlerMethod;
|
|
/* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/utils/ClassUtil.class */
|
public class ClassUtil extends ClassUtils {
|
private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer();
|
|
public static MethodParameter getMethodParameter(Constructor<?> constructor, int parameterIndex) {
|
SynthesizingMethodParameter synthesizingMethodParameter = new SynthesizingMethodParameter(constructor, parameterIndex);
|
synthesizingMethodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
|
return synthesizingMethodParameter;
|
}
|
|
public static MethodParameter getMethodParameter(Method method, int parameterIndex) {
|
SynthesizingMethodParameter synthesizingMethodParameter = new SynthesizingMethodParameter(method, parameterIndex);
|
synthesizingMethodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
|
return synthesizingMethodParameter;
|
}
|
|
public static <A extends Annotation> A getAnnotation(Method method, Class<A> annotationType) {
|
Class<?> targetClass = method.getDeclaringClass();
|
Method specificMethod = BridgeMethodResolver.findBridgedMethod(getMostSpecificMethod(method, targetClass));
|
A annotation = (A) AnnotatedElementUtils.findMergedAnnotation(specificMethod, annotationType);
|
if (null != annotation) {
|
return annotation;
|
}
|
return (A) AnnotatedElementUtils.findMergedAnnotation(specificMethod.getDeclaringClass(), annotationType);
|
}
|
|
public static <A extends Annotation> A getAnnotation(HandlerMethod handlerMethod, Class<A> annotationType) {
|
A annotation = (A) handlerMethod.getMethodAnnotation(annotationType);
|
if (null != annotation) {
|
return annotation;
|
}
|
Class<?> beanType = handlerMethod.getBeanType();
|
return (A) AnnotatedElementUtils.findMergedAnnotation(beanType, annotationType);
|
}
|
|
public static <A extends Annotation> boolean isAnnotated(Method method, Class<A> annotationType) {
|
boolean isMethodAnnotated = AnnotatedElementUtils.isAnnotated(method, annotationType);
|
if (isMethodAnnotated) {
|
return true;
|
}
|
Class<?> targetClass = method.getDeclaringClass();
|
return AnnotatedElementUtils.isAnnotated(targetClass, annotationType);
|
}
|
}
|