package com.qianwen.core.tool.utils;
|
|
import java.beans.PropertyDescriptor;
|
import java.lang.annotation.Annotation;
|
import java.lang.reflect.Field;
|
import java.lang.reflect.Method;
|
import java.util.ArrayList;
|
import java.util.List;
|
import org.springframework.beans.BeansException;
|
import org.springframework.cglib.core.CodeGenerationException;
|
import org.springframework.core.convert.Property;
|
import org.springframework.core.convert.TypeDescriptor;
|
import org.springframework.lang.Nullable;
|
import org.springframework.util.ReflectionUtils;
|
|
/* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/utils/ReflectUtil.class */
|
public class ReflectUtil extends ReflectionUtils {
|
public static PropertyDescriptor[] getBeanGetters(Class type) {
|
return getPropertiesHelper(type, true, false);
|
}
|
|
public static PropertyDescriptor[] getBeanSetters(Class type) {
|
return getPropertiesHelper(type, false, true);
|
}
|
|
public static PropertyDescriptor[] getPropertiesHelper(Class type, boolean read, boolean write) {
|
try {
|
PropertyDescriptor[] all = BeanUtil.getPropertyDescriptors(type);
|
if (read && write) {
|
return all;
|
}
|
List<PropertyDescriptor> properties = new ArrayList<>(all.length);
|
for (PropertyDescriptor pd : all) {
|
if (read && pd.getReadMethod() != null) {
|
properties.add(pd);
|
} else if (write && pd.getWriteMethod() != null) {
|
properties.add(pd);
|
}
|
}
|
return (PropertyDescriptor[]) properties.toArray(new PropertyDescriptor[0]);
|
} catch (BeansException ex) {
|
throw new CodeGenerationException(ex);
|
}
|
}
|
|
@Nullable
|
public static Property getProperty(Class<?> propertyType, String propertyName) {
|
PropertyDescriptor propertyDescriptor = BeanUtil.getPropertyDescriptor(propertyType, propertyName);
|
if (propertyDescriptor == null) {
|
return null;
|
}
|
return getProperty(propertyType, propertyDescriptor, propertyName);
|
}
|
|
public static Property getProperty(Class<?> propertyType, PropertyDescriptor propertyDescriptor, String propertyName) {
|
Method readMethod = propertyDescriptor.getReadMethod();
|
Method writeMethod = propertyDescriptor.getWriteMethod();
|
return new Property(propertyType, readMethod, writeMethod, propertyName);
|
}
|
|
@Nullable
|
public static TypeDescriptor getTypeDescriptor(Class<?> propertyType, String propertyName) {
|
Property property = getProperty(propertyType, propertyName);
|
if (property == null) {
|
return null;
|
}
|
return new TypeDescriptor(property);
|
}
|
|
public static TypeDescriptor getTypeDescriptor(Class<?> propertyType, PropertyDescriptor propertyDescriptor, String propertyName) {
|
Method readMethod = propertyDescriptor.getReadMethod();
|
Method writeMethod = propertyDescriptor.getWriteMethod();
|
Property property = new Property(propertyType, readMethod, writeMethod, propertyName);
|
return new TypeDescriptor(property);
|
}
|
|
@Nullable
|
public static Field getField(Class<?> clazz, String fieldName) {
|
while (clazz != Object.class) {
|
try {
|
return clazz.getDeclaredField(fieldName);
|
} catch (NoSuchFieldException e) {
|
clazz = clazz.getSuperclass();
|
}
|
}
|
return null;
|
}
|
|
@Nullable
|
public static <T extends Annotation> T getAnnotation(Class<?> clazz, String fieldName, Class<T> annotationClass) {
|
Field field = getField(clazz, fieldName);
|
if (field == null) {
|
return null;
|
}
|
return (T) field.getAnnotation(annotationClass);
|
}
|
}
|