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 Object[]NO_PARAMSstatic 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 ClassclassForName(String name)Deprecated.Depending on context, eitherClassLoaderServiceorClassLoaderAccessshould be preferredstatic ClassclassForName(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 <T> Constructor<T>getConstructor(Class<T> clazz, Class... constructorArgs)static ConstructorgetConstructor(Class clazz, Type[] types)Retrieve a constructor for the given class, with arguments matching the specified Hibernate mapping types.static <T> Constructor<T>getDefaultConstructor(Class<T> clazz)Retrieve the default (no arg) constructor from the given class.static MethodgetGetterOrNull(Class containerClass, String propertyName)Find the method that can be used as the setter 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 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 ClassreflectedPropertyClass(Class clazz, String name)Attempt to resolve the specified property type through reflection.static ClassreflectedPropertyClass(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
public static Constructor getConstructor(Class clazz, Type[] types) throws PropertyNotFoundException
Retrieve 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 (todo : again with PropertyNotFoundException???)
-
getConstructor
public static <T> Constructor<T> getConstructor(Class<T> clazz, Class... constructorArgs)
-
ensureAccessibility
public static void ensureAccessibility(AccessibleObject accessibleObject)
-
isStaticField
public static boolean isStaticField(Field field)
-
getGetterOrNull
public static Method getGetterOrNull(Class containerClass, String propertyName)
Find the method that can be used as the setter 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)
-
-