/** * Checks to see if an object responds to a method. * Helper facade over Reflection library. * * @param object object in question * @param method method name in question. * @return true or false */ public static boolean respondsTo(Object object, String method) { if (object instanceof Class) { return Reflection.respondsTo((Class) object, method); } else { return Reflection.respondsTo(object, method); } }
public static Map<String, FieldAccess> getPropertyFieldAccessMapPropertyFirstForSerializer( Class<?> clazz ) { Map<String, FieldAccess> combinedFields = getCombinedFieldsPropertyFirstForSerializer(clazz); if (combinedFields!=null) { return combinedFields; } else { /* Fallback map. */ Map<String, FieldAccess> fieldsFallbacks = null; /* Primary merge into this one. */ Map<String, FieldAccess> fieldsPrimary = null; /* Try to find the properties first if this is set. */ fieldsFallbacks = Reflection.getAllAccessorFields(clazz, true); fieldsFallbacks = removeNonSerializable(fieldsFallbacks); fieldsPrimary = Reflection.getPropertyFieldAccessors(clazz); fieldsPrimary = removeNonSerializable(fieldsPrimary); /* Add missing fields */ combineFieldMaps(fieldsFallbacks, fieldsPrimary); combinedFields = fieldsPrimary; putCombinedFieldsPropertyFirstForSerializer(clazz, combinedFields); return combinedFields; } }
public static Object contextToHold() { return context(); }
public static Map<String, FieldAccess> getPropertyFieldAccessMapPropertyFirst( Class<?> clazz ) { Map<String, FieldAccess> combinedFields = getCombinedFieldsPropertyFirst(clazz); if (combinedFields!=null) { return combinedFields; } else { /* Fallback map. */ Map<String, FieldAccess> fieldsFallbacks = null; /* Primary merge into this one. */ Map<String, FieldAccess> fieldsPrimary = null; /* Try to find the properties first if this is set. */ fieldsFallbacks = Reflection.getAllAccessorFields(clazz, true); fieldsPrimary = Reflection.getPropertyFieldAccessors(clazz); /* Add missing fields */ combineFieldMaps(fieldsFallbacks, fieldsPrimary); combinedFields = fieldsPrimary; putCombinedFieldsPropertyFirst(clazz, combinedFields); return combinedFields; } }
/** * Gets a list of fields merges with properties if field is not found. * * @param clazz get the properties or fields * @return map */ public static Map<String, FieldAccess> getPropertyFieldAccessMapFieldFirst( Class<?> clazz ) { Map<String, FieldAccess> combinedFieldsFieldFirst = getCombinedFieldsFieldFirst(clazz); if (combinedFieldsFieldFirst!=null) { return combinedFieldsFieldFirst; } else { /* Fallback map. */ Map<String, FieldAccess> fieldsFallbacks = null; /* Primary merge into this one. */ Map<String, FieldAccess> fieldsPrimary = null; /* Try to find the fields first if this is set. */ fieldsPrimary = Reflection.getAllAccessorFields(clazz, true); fieldsFallbacks = Reflection.getPropertyFieldAccessors(clazz); combineFieldMaps(fieldsFallbacks, fieldsPrimary); combinedFieldsFieldFirst = fieldsPrimary; putCombinedFieldsFieldFirst(clazz, combinedFieldsFieldFirst); return combinedFieldsFieldFirst; } }
/** * Gets a list of fields merges with properties if field is not found. * * @param clazz get the properties or fields * @return map */ public static Map<String, FieldAccess> getPropertyFieldAccessMapFieldFirstForSerializer( Class<?> clazz ) { Map<String, FieldAccess> combinedFieldsFieldFirst = getCombinedFieldsFieldFirstForSerializer(clazz); if (combinedFieldsFieldFirst!=null) { return combinedFieldsFieldFirst; } else { /* Fallback map. */ Map<String, FieldAccess> fieldsFallbacks = null; /* Primary merge into this one. */ Map<String, FieldAccess> fieldsPrimary = null; /* Try to find the fields first if this is set. */ fieldsPrimary = Reflection.getAllAccessorFields(clazz, true); fieldsFallbacks = Reflection.getPropertyFieldAccessors(clazz); fieldsPrimary = removeNonSerializable(fieldsPrimary); fieldsFallbacks = removeNonSerializable(fieldsFallbacks); combineFieldMaps(fieldsFallbacks, fieldsPrimary); combinedFieldsFieldFirst = fieldsPrimary; putCombinedFieldsFieldFirstForSerializer(clazz, combinedFieldsFieldFirst); return combinedFieldsFieldFirst; } }
private final Map<String, FieldAccess> doGetFields ( Class<? extends Object> aClass ) { Map<String, FieldAccess> fields = Maps.copy ( Reflection.getPropertyFieldAccessMapFieldFirstForSerializer ( aClass ) ); List<FieldAccess> removeFields = new ArrayList<>(); for (FieldAccess field : fields.values()) { if (field.isWriteOnly ()) { removeFields.add(field); } } for (FieldAccess fieldAccess : removeFields) { fields.remove(fieldAccess.name()); } return fields; }
/** Convert an object to a list. * * @param object the object we want to convert to a list * @return new list from an object */ @Override public List<?> toList(Object object) { TypeType instanceType = TypeType.getInstanceType(object); switch (instanceType) { case NULL: return Lists.list((Object)null); case ARRAY: case ARRAY_INT: case ARRAY_BYTE: case ARRAY_SHORT: case ARRAY_FLOAT: case ARRAY_DOUBLE: case ARRAY_LONG: case ARRAY_STRING: case ARRAY_OBJECT: return Conversions.toList(object); case INSTANCE: if (Reflection.respondsTo(object, "toList")) { return (List<?>) Reflection.invoke(object, "toList"); } break; } return Lists.list(object); }
public static Map<String, FieldAccess> getAllAccessorFields( Class<? extends Object> theClass, boolean useUnsafe ) { Map<String, FieldAccess> map = getAccessorFieldsFromCache(theClass, useUnsafe); if ( map == null ) { List<FieldAccess> list = Lists.mapBy( getAllFields( theClass ), new FieldConverter( useUnsafe ) ); map = new LinkedHashMap<>( list.size() ); for ( FieldAccess fieldAccess : list ) { map.put( fieldAccess.name(), fieldAccess ); } setAccessorFieldInCache( theClass, useUnsafe, map ); } return map; }
/** * This is one is forgiving of null paths. * This works with getters first, i.e., properties. * * @param object object * @param property property * @return value */ public static Object getProp( Object object, final String property ) { if ( object == null ) { return null; } if ( isDigits( property ) ) { /* We can index numbers and names. */ object = idx(object, StringScanner.parseInt(property)); } Class<?> cls = object.getClass(); /** Tries the getters first. */ Map<String, FieldAccess> fields = Reflection.getPropertyFieldAccessors( cls ); if ( !fields.containsKey( property ) ) { fields = Reflection.getAllAccessorFields( cls ); } if ( !fields.containsKey( property ) ) { return null; } else { return fields.get( property ).getValue(object); } }
public static Map<String, FieldAccess> getAllAccessorFields( Class<? extends Object> theClass ) { return getAllAccessorFields( theClass, true ); }
/** * Checks to see if a class has a field. * * @param clz class we are analyzing * @param name name * @return result */ public static boolean classHasField( Class<?> clz, String name ) { List<Field> fields = Reflection.getAllFields( clz ); for ( Field field : fields ) { if ( field.getName().equals( name ) && !Modifier.isStatic( field.getModifiers() ) && field.getDeclaringClass() == clz ) { return true; } } return false; }
public static Map<String, Pair<Method, Method>> getPropertySetterGetterMethods( Class<? extends Object> theClass ) { try { Method[] methods = theClass.getMethods(); Map<String, Pair<Method, Method>> methodMap = new LinkedHashMap<>( methods.length ); List<Method> getterMethodList = new ArrayList<>( methods.length ); for ( int index = 0; index < methods.length; index++ ) { Method method = methods[ index ]; if (extractPropertyInfoFromMethodPair(methodMap, getterMethodList, method)) continue; } for ( Method method : getterMethodList ) { extractProperty(methodMap, method); } return methodMap; } catch (Exception ex) { ex.printStackTrace(); return Exceptions.handle(Map.class, ex, theClass); } }
public static <T> T fieldByFieldCopy( T item ) { Map<String, FieldAccess> fields = Reflection.getAllAccessorFields( aClass ); T clone = Reflection.newInstance( aClass );
public static Object contextToHold () { return Lists.list ( Reflection.contextToHold (), Annotations.contextToHold()); }
/** * Gets a list of fields merges with properties if field is not found. * * @param clazz get the properties or fields * @return map */ public static Map<String, FieldAccess> getPropertyFieldAccessMapFieldFirstForSerializer( Class<?> clazz ) { Map<String, FieldAccess> combinedFieldsFieldFirst = getCombinedFieldsFieldFirstForSerializer(clazz); if (combinedFieldsFieldFirst!=null) { return combinedFieldsFieldFirst; } else { /* Fallback map. */ Map<String, FieldAccess> fieldsFallbacks = null; /* Primary merge into this one. */ Map<String, FieldAccess> fieldsPrimary = null; /* Try to find the fields first if this is set. */ fieldsPrimary = Reflection.getAllAccessorFields(clazz, true); fieldsFallbacks = Reflection.getPropertyFieldAccessors(clazz); fieldsPrimary = removeNonSerializable(fieldsPrimary); fieldsFallbacks = removeNonSerializable(fieldsFallbacks); combineFieldMaps(fieldsFallbacks, fieldsPrimary); combinedFieldsFieldFirst = fieldsPrimary; putCombinedFieldsFieldFirstForSerializer(clazz, combinedFieldsFieldFirst); return combinedFieldsFieldFirst; } }
public static Map<String, FieldAccess> getPropertyFieldAccessMapPropertyFirst( Class<?> clazz ) { Map<String, FieldAccess> combinedFields = getCombinedFieldsPropertyFirst(clazz); if (combinedFields!=null) { return combinedFields; } else { /* Fallback map. */ Map<String, FieldAccess> fieldsFallbacks = null; /* Primary merge into this one. */ Map<String, FieldAccess> fieldsPrimary = null; /* Try to find the properties first if this is set. */ fieldsFallbacks = Reflection.getAllAccessorFields(clazz, true); fieldsPrimary = Reflection.getPropertyFieldAccessors(clazz); /* Add missing fields */ combineFieldMaps(fieldsFallbacks, fieldsPrimary); combinedFields = fieldsPrimary; putCombinedFieldsPropertyFirst(clazz, combinedFields); return combinedFields; } }
/** * Gets a list of fields merges with properties if field is not found. * * @param clazz get the properties or fields * @return map */ public static Map<String, FieldAccess> getPropertyFieldAccessMapFieldFirst( Class<?> clazz ) { Map<String, FieldAccess> combinedFieldsFieldFirst = getCombinedFieldsFieldFirst(clazz); if (combinedFieldsFieldFirst!=null) { return combinedFieldsFieldFirst; } else { /* Fallback map. */ Map<String, FieldAccess> fieldsFallbacks = null; /* Primary merge into this one. */ Map<String, FieldAccess> fieldsPrimary = null; /* Try to find the fields first if this is set. */ fieldsPrimary = Reflection.getAllAccessorFields(clazz, true); fieldsFallbacks = Reflection.getPropertyFieldAccessors(clazz); combineFieldMaps(fieldsFallbacks, fieldsPrimary); combinedFieldsFieldFirst = fieldsPrimary; putCombinedFieldsFieldFirst(clazz, combinedFieldsFieldFirst); return combinedFieldsFieldFirst; } }
private final Map<String, FieldAccess> doGetFields ( Class<? extends Object> aClass ) { Map<String, FieldAccess> fields = Maps.copy ( Reflection.getPropertyFieldAccessMapFieldFirstForSerializer ( aClass ) ); List<FieldAccess> removeFields = new ArrayList<>(); for (FieldAccess field : fields.values()) { if (field.isWriteOnly ()) { removeFields.add(field); } } for (FieldAccess fieldAccess : removeFields) { fields.remove(fieldAccess.name()); } return fields; }
/** Convert an object to a list. * * @param object the object we want to convert to a list * @return new list from an object */ @Override public List<?> toList(Object object) { TypeType instanceType = TypeType.getInstanceType(object); switch (instanceType) { case NULL: return Lists.list((Object)null); case ARRAY: case ARRAY_INT: case ARRAY_BYTE: case ARRAY_SHORT: case ARRAY_FLOAT: case ARRAY_DOUBLE: case ARRAY_LONG: case ARRAY_STRING: case ARRAY_OBJECT: return Conversions.toList(object); case INSTANCE: if (Reflection.respondsTo(object, "toList")) { return (List<?>) Reflection.invoke(object, "toList"); } break; } return Lists.list(object); }