Package org.hibernate.internal.util
Class ReflectHelper
- java.lang.Object
-
- org.hibernate.internal.util.ReflectHelper
-
public final class ReflectHelper extends Object
Utility class for various reflection operations.
-
-
Field Summary
Fields Modifier and Type Field Description static Class<?>[]NO_PARAM_SIGNATUREstatic Class<?>[]SINGLE_OBJECT_PARAM_SIGNATURE
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static voidcheckGetAndIsVariants(Class<?> containerClass, String propertyName, Method getMethod, Method isMethod)static Class<?>classForName(String name)Deprecated.Depending on context, eitherClassLoaderServiceorClassLoaderAccessshould be preferredstatic Class<?>classForName(String name, Class<?> caller)Perform resolution of a class name.static voidensureAccessibility(AccessibleObject accessibleObject)static MethodextractEqualsMethod(Class<?> clazz)Encapsulation of getting hold of a class'sequalsmethod.static MethodextractHashCodeMethod(Class<?> clazz)Encapsulation of getting hold of a class'shashCodemethod.static FieldfindField(Class<?> containerClass, String propertyName)static MethodfindGetterMethod(Class<?> containerClass, String propertyName)static MethodfindGetterMethodForFieldAccess(Field field, String propertyName)Similar togetterMethodOrNull(java.lang.Class<?>, java.lang.String), except that here we are just looking for the corresponding getter for a field (defined as field access) if one exists.static MethodfindSetterMethod(Class<?> containerClass, String propertyName, Class<?> propertyType)static <T> Class<T>getClass(Type type)static Constructor<?>getConstructor(Class<?> clazz, Type[] types)Deprecated, for removal: This API element is subject to removal in a future version.no longer used, since we moved away from theTypeinterfacestatic <T> Constructor<T>getConstructorOrNull(Class<T> clazz, Class<?>... constructorArgs)Retrieve a constructor for the given class, with arguments matching the specified Java types, or returnnullif no such constructor exists.static <T> Constructor<T>getDefaultConstructor(Class<T> clazz)Retrieve the default (no arg) constructor from the given class.static <T> Supplier<T>getDefaultSupplier(Class<T> clazz)static MethodgetGetterOrNull(Class<?> containerClass, String propertyName)Find the method that can be used as the getter for this property.static MethodgetMethod(Class<?> clazz, Method method)static MethodgetMethod(Class<?> clazz, String methodName, Class<?>... paramTypes)static Class<?>getPropertyType(Member member)static String[]getRecordComponentNames(Class<?> javaType)static Class<?>[]getRecordComponentTypes(Class<?> javaType)static MethodgetterMethodOrNull(Class<?> containerJavaType, String propertyName)static booleanimplementsInterface(Class<?> clazz, Class<?> intf)Determine if the given class implements the given interface.static booleanisAbstractClass(Class<?> clazz)Determine if the given class is declared abstract.static booleanisClass(Class<?> resultClass)static booleanisFinalClass(Class<?> clazz)Determine is the given class is declared final.static booleanisPublic(Class<?> clazz, Member member)Is this member publicly accessible.static booleanisRecord(Class<?> declaringClass)static booleanisStaticField(Field field)static booleanoverridesEquals(Class<?> clazz)Determine if the given class defines anObject.equals(java.lang.Object)override.static booleanoverridesHashCode(Class<?> clazz)Determine if the given class defines aObject.hashCode()override.static Class<?>reflectedPropertyClass(Class<?> clazz, String name)Attempt to resolve the specified property type through reflection.static Class<?>reflectedPropertyClass(String className, String name, ClassLoaderService classLoaderService)Attempt to resolve the specified property type through reflection.static TypereflectedPropertyType(String className, String name, ClassLoaderService classLoaderService)static MethodsetterMethodOrNull(Class<?> containerClass, String propertyName, Class<?> propertyType)static MethodsetterMethodOrNullBySetterName(Class<?> containerClass, String setterName, Class<?> propertyType)static voidverifyNoGetVariantExists(Class<?> containerClass, String propertyName, Method isMethod, String stemName)static voidverifyNoIsVariantExists(Class<?> containerClass, String propertyName, Method getMethod, String stemName)
-
-
-
Method Detail
-
extractEqualsMethod
public static Method extractEqualsMethod(Class<?> clazz) throws NoSuchMethodException
Encapsulation of getting hold of a class'sequalsmethod.- Parameters:
clazz- The class from which to extract the equals method.- Returns:
- The equals method reference
- Throws:
NoSuchMethodException- Should indicate an attempt to extract equals method from interface.
-
extractHashCodeMethod
public static Method extractHashCodeMethod(Class<?> clazz) throws NoSuchMethodException
Encapsulation of getting hold of a class'shashCodemethod.- Parameters:
clazz- The class from which to extract the hashCode method.- Returns:
- The hashCode method reference
- Throws:
NoSuchMethodException- Should indicate an attempt to extract hashCode method from interface.
-
overridesEquals
public static boolean overridesEquals(Class<?> clazz)
Determine if the given class defines anObject.equals(java.lang.Object)override.- Parameters:
clazz- The class to check- Returns:
- True if clazz defines an equals override.
-
overridesHashCode
public static boolean overridesHashCode(Class<?> clazz)
Determine if the given class defines aObject.hashCode()override.- Parameters:
clazz- The class to check- Returns:
- True if clazz defines an hashCode override.
-
implementsInterface
public static boolean implementsInterface(Class<?> clazz, Class<?> intf)
Determine if the given class implements the given interface.- Parameters:
clazz- The class to checkintf- The interface to check it against.- Returns:
- True if the class does implement the interface, false otherwise.
-
classForName
public static Class<?> classForName(String name, Class<?> caller) throws ClassNotFoundException
Perform resolution of a class name.Here we first check the context classloader, if one, before delegating to
Class.forName(String, boolean, ClassLoader)using the caller's classloader- Parameters:
name- The class namecaller- The class from which this call originated (in order to access that class's loader).- Returns:
- The class reference.
- Throws:
ClassNotFoundException- FromClass.forName(String, boolean, ClassLoader).
-
classForName
@Deprecated public static Class<?> classForName(String name) throws ClassNotFoundException
Deprecated.Depending on context, eitherClassLoaderServiceorClassLoaderAccessshould be preferredPerform resolution of a class name.Same as
classForName(String, Class)except that here we delegate toClass.forName(String)if the context classloader lookup is unsuccessful.- Parameters:
name- The class name- Returns:
- The class reference.
- Throws:
ClassNotFoundException- FromClass.forName(String).
-
isPublic
public static boolean isPublic(Class<?> clazz, Member member)
Is this member publicly accessible.- Parameters:
clazz- The class which defines the membermember- The member.- Returns:
- True if the member is publicly accessible, false otherwise.
-
reflectedPropertyClass
public static Class<?> reflectedPropertyClass(String className, String name, ClassLoaderService classLoaderService) throws MappingException
Attempt to resolve the specified property type through reflection.- Parameters:
className- The name of the class owning the property.name- The name of the property.classLoaderService- ClassLoader services- Returns:
- The type of the property.
- Throws:
MappingException- Indicates we were unable to locate the property.
-
reflectedPropertyType
public static Type reflectedPropertyType(String className, String name, ClassLoaderService classLoaderService) throws MappingException
- Throws:
MappingException
-
reflectedPropertyClass
public static Class<?> reflectedPropertyClass(Class<?> clazz, String name) throws MappingException
Attempt to resolve the specified property type through reflection.- Parameters:
clazz- The class owning the property.name- The name of the property.- Returns:
- The type of the property.
- Throws:
MappingException- Indicates we were unable to locate the property.
-
getDefaultConstructor
public static <T> Constructor<T> getDefaultConstructor(Class<T> clazz) throws PropertyNotFoundException
Retrieve the default (no arg) constructor from the given class.- Parameters:
clazz- The class for which to retrieve the default ctor.- Returns:
- The default constructor.
- Throws:
PropertyNotFoundException- Indicates there was not publicly accessible, no-arg constructor (todo : why PropertyNotFoundException???)
-
isAbstractClass
public static boolean isAbstractClass(Class<?> clazz)
Determine if the given class is declared abstract.- Parameters:
clazz- The class to check.- Returns:
- True if the class is abstract, false otherwise.
-
isFinalClass
public static boolean isFinalClass(Class<?> clazz)
Determine is the given class is declared final.- Parameters:
clazz- The class to check.- Returns:
- True if the class is final, false otherwise.
-
getConstructor
@Deprecated(since="6", forRemoval=true) public static Constructor<?> getConstructor(Class<?> clazz, Type[] types) throws PropertyNotFoundException
Deprecated, for removal: This API element is subject to removal in a future version.no longer used, since we moved away from theTypeinterfaceRetrieve a constructor for the given class, with arguments matching the specified Hibernate mapping types.- Parameters:
clazz- The class needing instantiationtypes- The types representing the required ctor param signature- Returns:
- The matching constructor
- Throws:
PropertyNotFoundException- Indicates we could not locate an appropriate constructor
-
getConstructorOrNull
public static <T> Constructor<T> getConstructorOrNull(Class<T> clazz, Class<?>... constructorArgs)
Retrieve a constructor for the given class, with arguments matching the specified Java types, or returnnullif no such constructor exists.- Parameters:
clazz- The class needing instantiationconstructorArgs- The types representing the required ctor param signature- Returns:
- The matching constructor, or
null
-
getMethod
public static Method getMethod(Class<?> clazz, String methodName, Class<?>... paramTypes)
-
ensureAccessibility
public static void ensureAccessibility(AccessibleObject accessibleObject)
-
isStaticField
public static boolean isStaticField(Field field)
-
findGetterMethod
public static Method findGetterMethod(Class<?> containerClass, String propertyName)
-
getGetterOrNull
public static Method getGetterOrNull(Class<?> containerClass, String propertyName)
Find the method that can be used as the getter for this property.- Parameters:
containerClass- The Class> which contains the propertypropertyName- The name of the property- Returns:
- The getter method, or
nullif there is none. - Throws:
MappingException- If thecontainerClasshas both a get- and an is- form.
-
verifyNoIsVariantExists
public static void verifyNoIsVariantExists(Class<?> containerClass, String propertyName, Method getMethod, String stemName)
-
checkGetAndIsVariants
public static void checkGetAndIsVariants(Class<?> containerClass, String propertyName, Method getMethod, Method isMethod)
-
verifyNoGetVariantExists
public static void verifyNoGetVariantExists(Class<?> containerClass, String propertyName, Method isMethod, String stemName)
-
getterMethodOrNull
public static Method getterMethodOrNull(Class<?> containerJavaType, String propertyName)
-
setterMethodOrNull
public static Method setterMethodOrNull(Class<?> containerClass, String propertyName, Class<?> propertyType)
-
setterMethodOrNullBySetterName
public static Method setterMethodOrNullBySetterName(Class<?> containerClass, String setterName, Class<?> propertyType)
-
findSetterMethod
public static Method findSetterMethod(Class<?> containerClass, String propertyName, Class<?> propertyType)
-
findGetterMethodForFieldAccess
public static Method findGetterMethodForFieldAccess(Field field, String propertyName)
Similar togetterMethodOrNull(java.lang.Class<?>, java.lang.String), except that here we are just looking for the corresponding getter for a field (defined as field access) if one exists.We do not look at supers, although conceivably the super could declare the method as an abstract - but again, that is such an edge case...
-
isRecord
public static boolean isRecord(Class<?> declaringClass)
-
isClass
public static boolean isClass(Class<?> resultClass)
-
-