public static void main(String... args) { try { Class<?> c = Class.forName(args[0]); int searchMods = 0x0; for (int i = 1; i < args.length; i++) { searchMods |= modifierFromString(args[i]); } Field[] flds = c.getDeclaredFields(); out.format( "Fields in Class '%s' containing modifiers: %s%n", c.getName(), Modifier.toString(searchMods)); boolean found = false; for (Field f : flds) { int foundMods = f.getModifiers(); // Require all of the requested modifiers to be present if ((foundMods & searchMods) == searchMods) { out.format( "%-8s [ synthetic=%-5b enum_constant=%-5b ]%n", f.getName(), f.isSynthetic(), f.isEnumConstant()); found = true; } } if (!found) { out.format("No matching fields%n"); } // production code should handle this exception more gracefully } catch (ClassNotFoundException x) { x.printStackTrace(); } }
public static void play(Class<?> clazz) { if (!clazz.isEnum()) { out.format("%s is not an enum type%n", clazz); Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { if (f.isEnumConstant()) System.out.println("enum field: " + f); else System.out.println("non-enum field: " + f); } return; } }
@Override public List<Suggestion> getSuggestions() { List<Suggestion> result = new ArrayList<Suggestion>(); Field[] declaredFields = enumClass.getDeclaredFields(); for (Field declaredField : declaredFields) { if (declaredField.isEnumConstant()) { result.add(new KeySuggestion(declaredField.getName().toLowerCase())); } } return result; }
/** Scans the class and generates metadata. */ public void generate(Class<?> clazz) throws IllegalAccessException { if (clazz == null) { return; } for (Field field : clazz.getDeclaredFields()) { if (field.getType().getName().startsWith(PACKAGE_TO_SCAN) && !field.isEnumConstant()) { generate(field.getType()); } else { for (Annotation annotation : field.getAnnotations()) { if (annotation.annotationType().equals(ProviderMappings.class)) { ProviderMappings providerAnnotations = (ProviderMappings) annotation; for (Provider provider : providerAnnotations.value()) { Map<String, ProviderMappingInfo> mappings = providerMappings.get(provider.name()); if (mappings == null) { mappings = new HashMap<String, ProviderMappingInfo>(); providerMappings.put(provider.name(), mappings); } Converter<?> converter = (Converter<?>) getConverter(field, provider.converter()); String target = clazz.getSimpleName().toLowerCase() + "." + field.getName(); ProviderMappingInfo pm = new ProviderMappingInfo(provider.property(), target, converter); mappings.put(pm.getSource(), pm); logger.trace("Added provider mapping {}: {}", provider.name(), pm); } } else if (annotation.annotationType().equals(ForecastMappings.class)) { ForecastMappings forecastsAnnotations = (ForecastMappings) annotation; for (Forecast forecast : forecastsAnnotations.value()) { List<String> forecastProperties = forecastMappings.get(forecast.provider()); if (forecastProperties == null) { forecastProperties = new ArrayList<String>(); forecastMappings.put(forecast.provider(), forecastProperties); } forecastProperties.add(forecast.property()); logger.trace( "Added forecast mapping {}: {}", forecast.provider(), forecast.property()); } } } } } }
private static void convertBeanToJson(Object obj, StringBuilder sb) { if ((obj instanceof Date)) { sb.append(((Date) obj).getTime()); } else { sb.append('{'); Class<?> c = obj.getClass(); Set<String> fieldNameSet = new HashSet(); Field[] fields = c.getDeclaredFields(); for (Field f : fields) { int modifiers = f.getModifiers(); String fieldName = f.getName(); if ((!f.isEnumConstant()) && (!Modifier.isFinal(modifiers)) && (!Modifier.isTransient(modifiers))) { f.setAccessible(true); try { convertObjectToJson(fieldName, f.get(obj), sb); sb.append(','); fieldNameSet.add(fieldName); } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } } } Method[] methods = c.getDeclaredMethods(); for (Method m : methods) { String methodName = m.getName(); int modifiers = m.getModifiers(); if ((Modifier.isPublic(modifiers)) && (!Modifier.isStatic(modifiers))) { String fieldName; if ((methodName.startsWith("is")) && ((m.getReturnType() == Boolean.class) || (m.getReturnType() == Boolean.TYPE))) { fieldName = Character.toLowerCase(methodName.charAt(IS_PREFIX_LEN)) + methodName.substring(IS_PREFIX_LEN_1); } else { if (!methodName.startsWith("is")) { continue; } fieldName = Character.toLowerCase(methodName.charAt(GET_PREFIX_LEN)) + methodName.substring(GET_PREFIX_LEN_1); } if ((!fieldNameSet.contains(fieldName)) && (fieldName.length() != 0)) { m.setAccessible(true); try { convertObjectToJson(fieldName, m.invoke(obj, EMTPY_OBJ_ARR), sb); sb.append(','); } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } } } } fieldNameSet.clear(); fieldNameSet = null; if (sb.charAt(sb.length() - 1) == ',') { sb.deleteCharAt(sb.length() - 1); } sb.append('}'); } }