Class JavaClassHelper
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic boolean
Determines if a number can be coerced upwards to another number class without loss.static Number
coerceBoxed
(Number numToCoerce, Class<?> resultBoxedType) Coerce the given number to the given type, assuming the type is a Boxed type.static CodegenExpression
coerceNumberBoxedToBoxedCodegen
(CodegenExpression exprReturningBoxed, EPTypeClass fromTypeBoxed, EPTypeClass targetTypeBoxed) static CodegenExpression
coerceNumberToBoxedCodegen
(CodegenExpression expr, EPTypeClass fromType, EPTypeClass targetTypeBoxed) findAnnotatedFields
(Class<?> targetClass, Class<? extends Annotation> annotation) findAnnotatedMethods
(Class<?> targetClass, Class<? extends Annotation> annotation) static Method
findRequiredMethod
(Class<?> clazz, String methodName) static List<Annotation>
getAnnotations
(Class<? extends Annotation> annotationClass, Annotation[] annotations) static EPTypeClass
getArithmaticCoercionType
(EPTypeClass typeOne, EPTypeClass typeTwo) Returns the coercion type for the 2 numeric types for use in arithmatic.static Class<?>
getArithmaticCoercionType
(Class<?> typeOne, Class<?> typeTwo) Returns the coercion type for the 2 numeric types for use in arithmatic.static EPTypeClass
static EPTypeClass
static Class<?>
getArrayComponentTypeInnermost
(Class<?> clazz) static int
getArrayDimensions
(Class<?> clazz) static EPTypeClass
getArrayType
(EPTypeClass type) static EPTypeClass
getArrayType
(EPTypeClass type, int numDimensions) static Class<?>
getArrayType
(Class<?> resultType) static Class<?>
getArrayType
(Class<?> resultType, int numberOfDimensions) static String
getBoxedClassName
(String className) Returns for the class name given the class name of the boxed (wrapped) type if the class name is one of the Java primitive types.static EPType
getBoxedType
(EPType type) static EPTypeClass
getBoxedType
(EPTypeClass clazz) static Class<?>
getBoxedType
(Class<?> clazz) Returns the boxed class for the given class, or the class itself if already boxed or not a primitive type.static Class<?>
getClassForName
(String className, ClassForNameProvider classForNameProvider) Returns the class given a fully-qualified class name.static Class<?>
getClassForSimpleName
(String className, ClassForNameProvider classForNameProvider) Returns the boxed class for the given classname, recognizing all primitive and abbreviations, uppercase and lowercase.static Class<?>
getClassInClasspath
(String classname, ClassForNameProvider classForNameProvider) static String
getClassObjectFromPropertyTypeNames
(Properties properties, ClassForNameProvider classForNameProvider) static EPType
getCommonCoercionType
(EPType[] types) Determines a common denominator type to which one or more types can be casted or coerced.static EPTypeClass
getCompareToCoercionType
(EPType typeOne, EPType typeTwo) Returns for 2 classes to be compared via relational operator the Class type of common comparison.static Class<?>
getGenericFieldType
(Field field, boolean isAllowNull) Returns the generic type parameter of a return value by a field.static Class<?>
getGenericFieldTypeMap
(Field field, boolean isAllowNull) Returns the generic type parameter of a return value by a field or method.static Class<?>
getGenericType
(Type t, int index) static String
getMessageInvocationTarget
(String optionalStatementName, String methodName, Class[] methodParameters, String classOrPropertyName, Object[] args, Throwable targetException) static Method
getMethodByName
(Class<?> clazz, String methodName) static void
getObjectValuePretty
(Object value, StringWriter writer) static Class<?>
getPrimitiveClassForName
(String typeName) Returns the class for a Java primitive type name, ignoring case, and considering String as a primitive.static EPTypeClass
getPrimitiveType
(EPTypeClass clazz) Returns the un-boxed class for the given class, or the class itself if already un-boxed or not a primitive type.static EPTypeClass
getPrimitiveType
(Class<?> clazz) Returns the un-boxed class for the given class, or the class itself if already un-boxed or not a primitive type.static EPTypeClass
getSecondParameterTypeOrObject
(EPTypeClass returnType) static String
getSimpleNameForClass
(EPTypeClass clazz) static String
getSimpleNameForClass
(Class<?> clazz) static EPTypeClass
getSingleParameterTypeOrObject
(EPTypeClass returnType) static void
Populates all interface and superclasses for the given class, recursivly.static Class[]
getSuperInterfaces
(Class<?> clazz) static void
getSuperInterfaces
(Class<?> clazz, Set<Class> result) static EPTypeClass
getTypeClassOrObjectType
(EPType evaluationType) static Object
instantiate
(Class<?> implementedOrExtendedClass, Class<?> clazz) Checks that the given class implements or extends the required interface (first parameter), and instantiates an object.static <T> T
instantiate
(Class<T> implementedOrExtendedClass, String className, ClassForNameProvider classForNameProvider) Looks up the given class and checks that it implements or extends the required interface, and instantiates an object.static boolean
isAnnotationListed
(Class<? extends Annotation> annotationClass, Annotation[] annotations) static boolean
isArrayTypeCompatible
(Class<?> target, Class<?> provided) static boolean
isAssignmentCompatible
(EPType invocationType, Class<?> declarationType) static boolean
isAssignmentCompatible
(Class<?> invocationType, Class<?> declarationType) Returns true if 2 classes are assignment compatible.static boolean
isCollectionMapOrArray
(EPType returnType) static boolean
isDatetimeClass
(EPType inputType) static boolean
isDatetimeClass
(Class<?> inputType) static boolean
isFloatingPointClass
(EPType type) Returns true if the supplied type is a floating point number.static boolean
isFloatingPointClass
(Class<?> clazz) Returns true if the supplied type is a floating point number.static boolean
isFloatingPointNumber
(Number number) Returns true if the Number instance is a floating point number.static boolean
isFragmentableType
(EPType type) Returns true if the Class is a fragmentable type, i.e.static boolean
isFragmentableType
(Class<?> propertyType) Returns true if the Class is a fragmentable type, i.e.static boolean
static boolean
isImplementsInterface
(EPType type, Class<?> interfaceClass) Method to check if a given class, and its superclasses and interfaces (deep), implement a given interface.static boolean
isImplementsInterface
(Class<?> clazz, Class<?> interfaceClass) Method to check if a given class, and its superclasses and interfaces (deep), implement a given interface.static boolean
isJavaBuiltinDataType
(EPType type) Returns true if the class passed in is a Java built-in data type (primitive or wrapper) including String and 'null'.static boolean
isJavaBuiltinDataType
(Class<?> clazz) Returns true if the class passed in is a Java built-in data type (primitive or wrapper) including String and 'null'.static boolean
static boolean
Determines if the class passed in is one of the numeric classes.static boolean
isNumericNonFP
(EPType type) Determines if the type passed in is one of the numeric classes and not a floating point.static boolean
isNumericNonFP
(Class<?> clazz) Determines if the class passed in is one of the numeric classes and not a floating point.static boolean
isSignatureCompatible
(Class<?>[] one, Class<?>[] two) static boolean
isSimpleNameFullyQualfied
(String simpleClassName, String fullyQualifiedClassname) Returns true if the simple class name is the class name of the fully qualified classname.static boolean
isSubclassOrImplementsInterface
(EPType extendorOrImplementor, EPTypeClass extendedOrImplemented) static boolean
isSubclassOrImplementsInterface
(EPType extendorOrImplementor, Class<?> extendedOrImplemented) static boolean
isSubclassOrImplementsInterface
(Class<?> extendorOrImplementor, Class<?> extendedOrImplemented) Method to check if a given class, and its superclasses and interfaces (deep), implement a given interface or extend a given class.static boolean
static boolean
isTypeBoolean
(EPType type) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeBoolean
(Class<?> clazz) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeDouble
(EPType type) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeDouble
(Class<?> clazz) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeInteger
(EPType type) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeInteger
(Class<?> clazz) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeLong
(EPType type) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeLong
(Class<?> clazz) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeOrNull
(EPType type, Class<?> expected) static boolean
isTypePrimitive
(EPType type) static boolean
isTypeString
(EPType type) Determines if the class passed in is a boolean boxed or unboxed type.static boolean
isTypeVoid
(EPType type) static boolean
isTypeVoid
(Class<?> clazz) static Object
Parse the String using the given Java built-in class for parsing.static String
printInstance
(Object instance, boolean fullyQualified) static void
setFieldForAnnotation
(Object target, Class<? extends Annotation> annotation, Object value) static Type[]
takeFirstN
(Type[] types, int numToTake) static <T> void
traverseAnnotations
(List<Class> classes, Class<T> annotationClass, BiConsumer<Class, T> consumer) static void
writeInstance
(StringWriter writer, Object instance, boolean fullyQualified) static void
writeInstance
(StringWriter writer, String title, Object instance)
-
Field Details
-
APACHE_AVRO_GENERIC_RECORD_CLASSNAME
- See Also:
-
-
Constructor Details
-
JavaClassHelper
public JavaClassHelper()
-
-
Method Details
-
isImplementsCharSequence
-
isArrayTypeCompatible
-
isCollectionMapOrArray
-
getBoxedType
-
getBoxedType
-
getBoxedType
Returns the boxed class for the given class, or the class itself if already boxed or not a primitive type. For primitive unboxed types returns the boxed types, e.g. returns java.lang.Integer for passing int.class. For any other class, returns the class passed.- Parameters:
clazz
- is the class to return the boxed class for- Returns:
- boxed variant of the same class
-
getPrimitiveType
Returns the un-boxed class for the given class, or the class itself if already un-boxed or not a primitive type. For primitive boxed types returns the unboxed primitive type, e.g. returns int.class for passing Integer.class. For any other class, returns the class passed.- Parameters:
clazz
- is the class to return the unboxed (or primitive) class for- Returns:
- primitive variant of the same class
-
getPrimitiveType
Returns the un-boxed class for the given class, or the class itself if already un-boxed or not a primitive type. For primitive boxed types returns the unboxed primitive type, e.g. returns int.class for passing Integer.class. For any other class, returns the class passed.- Parameters:
clazz
- is the class to return the unboxed (or primitive) class for- Returns:
- primitive variant of the same class
-
isNumeric
-
isNumeric
Determines if the class passed in is one of the numeric classes.- Parameters:
clazz
- to check- Returns:
- true if numeric, false if not
-
isNumericNonFP
Determines if the type passed in is one of the numeric classes and not a floating point.- Parameters:
type
- to check- Returns:
- true if numeric and not a floating point, false if not
-
isNumericNonFP
Determines if the class passed in is one of the numeric classes and not a floating point.- Parameters:
clazz
- to check- Returns:
- true if numeric and not a floating point, false if not
-
isAssignmentCompatible
-
isAssignmentCompatible
Returns true if 2 classes are assignment compatible.- Parameters:
invocationType
- type to assign fromdeclarationType
- type to assign to- Returns:
- true if assignment compatible, false if not
-
isTypeBoolean
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
type
- to check- Returns:
- true if boolean, false if not
-
isTypeInteger
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
type
- to check- Returns:
- true if boolean, false if not
-
isTypeLong
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
type
- to check- Returns:
- true if boolean, false if not
-
isTypeDouble
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
type
- to check- Returns:
- true if boolean, false if not
-
isTypeString
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
type
- to check- Returns:
- true if boolean, false if not
-
isTypePrimitive
-
isType
-
isTypeBoolean
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
clazz
- to check- Returns:
- true if boolean, false if not
-
isTypeInteger
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
clazz
- to check- Returns:
- true if boolean, false if not
-
isTypeLong
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
clazz
- to check- Returns:
- true if boolean, false if not
-
isTypeDouble
Determines if the class passed in is a boolean boxed or unboxed type.- Parameters:
clazz
- to check- Returns:
- true if boolean, false if not
-
getArithmaticCoercionType
public static EPTypeClass getArithmaticCoercionType(EPTypeClass typeOne, EPTypeClass typeTwo) throws CoercionException Returns the coercion type for the 2 numeric types for use in arithmatic. Note: byte and short types always result in integer.- Parameters:
typeOne
- is the first typetypeTwo
- is the second type- Returns:
- coerced type
- Throws:
CoercionException
- if types don't allow coercion
-
getArithmaticCoercionType
public static Class<?> getArithmaticCoercionType(Class<?> typeOne, Class<?> typeTwo) throws CoercionException Returns the coercion type for the 2 numeric types for use in arithmatic. Note: byte and short types always result in integer.- Parameters:
typeOne
- is the first typetypeTwo
- is the second type- Returns:
- coerced type
- Throws:
CoercionException
- if types don't allow coercion
-
coerceBoxed
Coerce the given number to the given type, assuming the type is a Boxed type. Allows coerce to lower resultion number. Does't coerce to primitive types.Meant for statement compile-time use, not for runtime use.
- Parameters:
numToCoerce
- is the number to coerce to the given typeresultBoxedType
- is the boxed result type to return- Returns:
- the numToCoerce as a value in the given result type
-
coerceNumberBoxedToBoxedCodegen
public static CodegenExpression coerceNumberBoxedToBoxedCodegen(CodegenExpression exprReturningBoxed, EPTypeClass fromTypeBoxed, EPTypeClass targetTypeBoxed) -
coerceNumberToBoxedCodegen
public static CodegenExpression coerceNumberToBoxedCodegen(CodegenExpression expr, EPTypeClass fromType, EPTypeClass targetTypeBoxed) -
isFloatingPointNumber
Returns true if the Number instance is a floating point number.- Parameters:
number
- to check- Returns:
- true if number is Float or Double type
-
isFloatingPointClass
Returns true if the supplied type is a floating point number.- Parameters:
type
- to check- Returns:
- true if primitive or boxed float or double
-
isFloatingPointClass
Returns true if the supplied type is a floating point number.- Parameters:
clazz
- to check- Returns:
- true if primitive or boxed float or double
-
getCompareToCoercionType
public static EPTypeClass getCompareToCoercionType(EPType typeOne, EPType typeTwo) throws CoercionException Returns for 2 classes to be compared via relational operator the Class type of common comparison. The output is always Long.class, Double.class, String.class or Boolean.class depending on whether the passed types are numeric and floating-point. Accepts primitive as well as boxed types.- Parameters:
typeOne
- is the first typetypeTwo
- is the second type- Returns:
- One of Long.class, Double.class or String.class
- Throws:
CoercionException
- if the types cannot be compared
-
canCoerce
Determines if a number can be coerced upwards to another number class without loss.Clients must pass in two classes that are numeric types.
Any number class can be coerced to double, while only double cannot be coerced to float. Any non-floating point number can be coerced to long. Integer can be coerced to Byte and Short even though loss is possible, for convenience.
- Parameters:
numberClassToBeCoerced
- the number class to be coercednumberClassToCoerceTo
- the number class to coerce to- Returns:
- true if numbers can be coerced without loss, false if not
-
getBoxedClassName
Returns for the class name given the class name of the boxed (wrapped) type if the class name is one of the Java primitive types.- Parameters:
className
- is a class name, a Java primitive type or other class- Returns:
- boxed class name if Java primitive type, or just same class name passed in if not a primitive type
-
isJavaBuiltinDataType
Returns true if the class passed in is a Java built-in data type (primitive or wrapper) including String and 'null'.- Parameters:
type
- to check- Returns:
- true if built-in data type, or false if not
-
isJavaBuiltinDataType
Returns true if the class passed in is a Java built-in data type (primitive or wrapper) including String and 'null'.- Parameters:
clazz
- to check- Returns:
- true if built-in data type, or false if not
-
getCommonCoercionType
Determines a common denominator type to which one or more types can be casted or coerced. For use in determining the result type in certain expressions (coalesce, case).Null values are allowed as part of the input and indicate a 'null' constant value in an expression tree. Such as value doesn't have any type and can be ignored in determining a result type.
For numeric types, determines a coercion type that all types can be converted to via the method getArithmaticCoercionType.
Indicates that there is no common denominator type by throwing
CoercionException
.- Parameters:
types
- is an array of one or more types, which can be Java built-in (primitive or wrapper) or user types- Returns:
- common denominator type if any can be found, for use in comparison
- Throws:
CoercionException
- when no coercion type could be determined
-
getClassForName
public static Class<?> getClassForName(String className, ClassForNameProvider classForNameProvider) throws ClassNotFoundException Returns the class given a fully-qualified class name.- Parameters:
className
- is the fully-qualified class name, java primitive types included.classForNameProvider
- lookup of class for class name- Returns:
- class for name
- Throws:
ClassNotFoundException
- if the class cannot be found
-
getClassForSimpleName
public static Class<?> getClassForSimpleName(String className, ClassForNameProvider classForNameProvider) Returns the boxed class for the given classname, recognizing all primitive and abbreviations, uppercase and lowercase.Recognizes "int" as Integer.class and "strIng" as String.class, and "Integer" as Integer.class, and so on.
- Parameters:
className
- is the name to recognizeclassForNameProvider
- lookup of class for class name- Returns:
- class
-
getSimpleNameForClass
-
getSimpleNameForClass
-
getPrimitiveClassForName
Returns the class for a Java primitive type name, ignoring case, and considering String as a primitive.- Parameters:
typeName
- is a potential primitive Java type, or some other type name- Returns:
- class for primitive type name, or null if not a primitive type.
-
parse
Parse the String using the given Java built-in class for parsing.- Parameters:
clazz
- is the class to parse the value totext
- is the text to parse- Returns:
- value matching the type passed in
-
isImplementsInterface
Method to check if a given class, and its superclasses and interfaces (deep), implement a given interface.- Parameters:
type
- to check, including all its superclasses and their interfaces and extendsinterfaceClass
- is the interface class to look for- Returns:
- true if such interface is implemented by any of the clazz or its superclasses or extends by any interface and superclasses (deep check)
-
isImplementsInterface
Method to check if a given class, and its superclasses and interfaces (deep), implement a given interface.- Parameters:
clazz
- to check, including all its superclasses and their interfaces and extendsinterfaceClass
- is the interface class to look for- Returns:
- true if such interface is implemented by any of the clazz or its superclasses or extends by any interface and superclasses (deep check)
-
isSubclassOrImplementsInterface
public static boolean isSubclassOrImplementsInterface(EPType extendorOrImplementor, EPTypeClass extendedOrImplemented) -
isSubclassOrImplementsInterface
-
isSubclassOrImplementsInterface
public static boolean isSubclassOrImplementsInterface(Class<?> extendorOrImplementor, Class<?> extendedOrImplemented) Method to check if a given class, and its superclasses and interfaces (deep), implement a given interface or extend a given class.- Parameters:
extendorOrImplementor
- is the class to inspect its extends and implements clausesextendedOrImplemented
- is the potential interface, or superclass, to check- Returns:
- true if such interface is implemented by any of the clazz or its superclasses or extends by any interface and superclasses (deep check)
-
instantiate
public static <T> T instantiate(Class<T> implementedOrExtendedClass, String className, ClassForNameProvider classForNameProvider) throws ClassInstantiationException Looks up the given class and checks that it implements or extends the required interface, and instantiates an object.- Type Parameters:
T
- type- Parameters:
implementedOrExtendedClass
- is the class that the looked-up class should extend or implementclassName
- of the class to load, check type and instantiateclassForNameProvider
- lookup of class for class name- Returns:
- instance of given class, via newInstance
- Throws:
ClassInstantiationException
- if the type does not match or the class cannot be loaded or an object instantiated
-
instantiate
public static Object instantiate(Class<?> implementedOrExtendedClass, Class<?> clazz) throws ClassInstantiationException Checks that the given class implements or extends the required interface (first parameter), and instantiates an object.- Parameters:
implementedOrExtendedClass
- is the class that the looked-up class should extend or implementclazz
- to check type and instantiate- Returns:
- instance of given class, via newInstance
- Throws:
ClassInstantiationException
- if the type does not match or the class cannot be loaded or an object instantiated
-
getSuper
Populates all interface and superclasses for the given class, recursivly.- Parameters:
clazz
- to reflect uponresult
- set of classes to populate
-
isSimpleNameFullyQualfied
public static boolean isSimpleNameFullyQualfied(String simpleClassName, String fullyQualifiedClassname) Returns true if the simple class name is the class name of the fully qualified classname.This method does not verify validity of class and package names, it uses simple string compare inspecting the trailing part of the fully qualified class name.
- Parameters:
simpleClassName
- simple class namefullyQualifiedClassname
- fully qualified class name contains package name and simple class name- Returns:
- true if simple class name of the fully qualified class name, false if not
-
isFragmentableType
Returns true if the Class is a fragmentable type, i.e. not a primitive or boxed type or any of the common built-in types or does not implement Map.- Parameters:
type
- type to check- Returns:
- true if fragmentable
-
isFragmentableType
Returns true if the Class is a fragmentable type, i.e. not a primitive or boxed type or any of the common built-in types or does not implement Map.- Parameters:
propertyType
- type to check- Returns:
- true if fragmentable
-
getSuperInterfaces
-
getSuperInterfaces
-
getGenericFieldType
Returns the generic type parameter of a return value by a field.- Parameters:
field
- field or null if methodisAllowNull
- whether null is allowed as a return value or expected Object.class- Returns:
- generic type parameter
-
getGenericFieldTypeMap
Returns the generic type parameter of a return value by a field or method.- Parameters:
field
- field or null if methodisAllowNull
- whether null is allowed as a return value or expected Object.class- Returns:
- generic type parameter
-
getGenericType
-
getArrayType
-
getArrayDimensions
-
getArrayComponentTypeInnermost
-
getArrayType
-
getMethodByName
-
printInstance
-
writeInstance
-
writeInstance
-
getMessageInvocationTarget
-
isDatetimeClass
-
isDatetimeClass
-
getClassObjectFromPropertyTypeNames
public static Map<String,Object> getClassObjectFromPropertyTypeNames(Properties properties, ClassForNameProvider classForNameProvider) throws ClassNotFoundException - Throws:
ClassNotFoundException
-
getClassInClasspath
public static Class<?> getClassInClasspath(String classname, ClassForNameProvider classForNameProvider) -
isSignatureCompatible
-
findRequiredMethod
-
getAnnotations
public static List<Annotation> getAnnotations(Class<? extends Annotation> annotationClass, Annotation[] annotations) -
isAnnotationListed
public static boolean isAnnotationListed(Class<? extends Annotation> annotationClass, Annotation[] annotations) -
findAnnotatedFields
public static Set<Field> findAnnotatedFields(Class<?> targetClass, Class<? extends Annotation> annotation) -
findAnnotatedMethods
public static Set<Method> findAnnotatedMethods(Class<?> targetClass, Class<? extends Annotation> annotation) -
setFieldForAnnotation
public static void setFieldForAnnotation(Object target, Class<? extends Annotation> annotation, Object value) -
takeFirstN
-
getObjectValuePretty
-
isTypeVoid
-
isTypeVoid
-
isTypeOrNull
-
traverseAnnotations
public static <T> void traverseAnnotations(List<Class> classes, Class<T> annotationClass, BiConsumer<Class, T> consumer) -
getArrayComponentType
-
getArrayComponentTypeInnermost
-
getSingleParameterTypeOrObject
-
getSecondParameterTypeOrObject
-
getTypeClassOrObjectType
-
getArrayType
-
getArrayType
-
getClassNameNormalized
-