Class FieldUtils
- java.lang.Object
-
- org.apache.felix.scr.impl.inject.field.FieldUtils
-
public class FieldUtils extends java.lang.Object
Utility methods for handling field injection.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FieldUtils.FieldSearchResult
Return type forsearchField(Class, String, ComponentLogger)
-
Constructor Summary
Constructors Constructor Description FieldUtils()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static FieldUtils.FieldSearchResult
accept(java.lang.Class<?> componentClass, java.lang.reflect.Field field, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)
This method checks whether the found field is acceptable (= usable) for the component instance.private static FieldUtils.FieldSearchResult
getField(java.lang.Class<?> componentClass, java.lang.Class<?> targetClass, java.lang.String fieldName, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)
Finds the field namedfieldName
field in the giventargetClass
.static FieldUtils.FieldSearchResult
searchField(java.lang.Class<?> componentClass, java.lang.String fieldName, ComponentLogger logger)
Searches the field namedfieldName
in the giventargetClass
.private static void
setAccessible(java.lang.reflect.Field field)
Make the field accessiblestatic void
setField(java.lang.reflect.Field f, java.lang.Object component, java.lang.Object value, ComponentLogger logger)
Set the field, type etc.static java.lang.String
toString(java.lang.Class<?> componentClass, java.lang.reflect.Field field)
Return a string representation of the field
-
-
-
Method Detail
-
searchField
public static FieldUtils.FieldSearchResult searchField(java.lang.Class<?> componentClass, java.lang.String fieldName, ComponentLogger logger)
Searches the field namedfieldName
in the giventargetClass
. If the target class has no acceptable field the class hierarchy is traversed until a field is found or the root of the class hierarchy is reached without finding a field.If an unexpected error occurs while searching,
null
is returned. In all other cases aFieldSearchResult
is returned. If no field is found,FieldSearchResult#field
is set tonull
. If the field is found, but not usable (e.g. due to visibility restrictions),FieldSearchResult#usable
is set tofalse
.- Parameters:
targetClass
- The class of the componentfieldName
- The name of the fieldlogger
- A logger to log errors / problems- Returns:
- A field search result or
null
if an unexpected error occurred.
-
getField
private static FieldUtils.FieldSearchResult getField(java.lang.Class<?> componentClass, java.lang.Class<?> targetClass, java.lang.String fieldName, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger) throws java.lang.reflect.InvocationTargetException
Finds the field namedfieldName
field in the giventargetClass
. If the target class has no acceptable field the class hierarchy is traversed until a field is found or the root of the class hierarchy is reached without finding a field.- Parameters:
componentClass
- The class of the component (for logging)targetClass
- The class in which to look for the methodfieldName
- The name of the fieldacceptPrivate
-true
if private fields should be considered.acceptPackage
-true
if package private fields should be considered.logger
- For error logging- Returns:
- If the field is found a
FieldSearchResult
is returned. If the field is not found,null
is returned. - Throws:
java.lang.reflect.InvocationTargetException
- If an unexpected Throwable is caught trying to find the requested field.
-
accept
private static FieldUtils.FieldSearchResult accept(java.lang.Class<?> componentClass, java.lang.reflect.Field field, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)
This method checks whether the found field is acceptable (= usable) for the component instance. It returns aFieldSearchResult
with the usable flag set totrue
if the field is not static and- Is public or protected
- Is private and
acceptPrivate
istrue
- Is package private and
acceptPackage
istrue
If the field is usable, this method makes the field accessible.
If the field is not usable, a
FieldSearchResult
with the usable flag set tofalse
is returned and an error is logged with the provided logger.- Parameters:
componentClass
- The class of the component,.field
- The field to checkacceptPrivate
- Whether a private field is acceptableacceptPackage
- Whether a package private field is acceptablelogger
- The logger for error logging- Returns:
- A field search result, this is never
null
-
toString
public static java.lang.String toString(java.lang.Class<?> componentClass, java.lang.reflect.Field field)
Return a string representation of the field- Parameters:
componentClass
- The component classfield
- The field- Returns:
- A string representation of the field
-
setAccessible
private static void setAccessible(java.lang.reflect.Field field)
Make the field accessible- Parameters:
field
- The field
-
setField
public static void setField(java.lang.reflect.Field f, java.lang.Object component, java.lang.Object value, ComponentLogger logger)
Set the field, type etc.- Parameters:
f
- The fieldcomponent
- The component instancevalue
- The value to setlogger
- The logger
-
-