in impl/src/main/java/org/apache/geronimo/config/cdi/ConfigurationHandler.java [83:176]
private MethodMeta(final Method m, final String prefix) {
final ConfigProperty annotation = m.getAnnotation(ConfigProperty.class);
optional = Optional.class == m.getReturnType();
final Type type = optional ?
ParameterizedType.class.cast(m.getGenericReturnType()).getActualTypeArguments()[0] :
m.getGenericReturnType();
if (Class.class.isInstance(type)) {
lookupType = Class.class.cast(type);
collectionCollector = null;
collectionConversionType = null;
} else if (ParameterizedType.class.isInstance(type)) {
final ParameterizedType pt = ParameterizedType.class.cast(type);
final Type rawType = pt.getRawType();
if (!Class.class.isInstance(rawType)) {
throw new IllegalArgumentException("Unsupported parameterized type: " + type);
}
final Class<?> clazz = Class.class.cast(pt.getRawType());
if (Collection.class.isAssignableFrom(clazz)) {
final Type arg0 = pt.getActualTypeArguments()[0];
collectionConversionType = Class.class.cast(ParameterizedType.class.isInstance(arg0) ?
// mainly to tolerate Class<?> as an arg
ParameterizedType.class.cast(arg0).getRawType() : Class.class.cast(arg0));
lookupType = String.class;
if (Set.class.isAssignableFrom(clazz)) {
collectionCollector = toSet();
} else {
collectionCollector = toList();
}
} else {
throw new IllegalArgumentException("Unsupported parameterized type: " + type + ", did you want a Collection?");
}
} else {
throw new IllegalArgumentException("Unsupported type: " + type);
}
key = prefix + (annotation.name().isEmpty() ? m.getDeclaringClass().getName() + "." + m.getName() : annotation.name());
final String defaultValue = annotation.defaultValue();
final boolean canBeNull = ConfigProperty.UNCONFIGURED_VALUE.equals(defaultValue);
final boolean hasDefault = !ConfigProperty.UNCONFIGURED_VALUE.equals(defaultValue) && !canBeNull;
if (hasDefault) {
final Config config = ConfigProvider.getConfig();
if (lookupType == long.class || lookupType == Long.class) {
this.defaultValue = Long.parseLong(defaultValue);
} else if (lookupType == boolean.class || lookupType == Boolean.class) {
this.defaultValue = Boolean.parseBoolean(defaultValue);
} else if (lookupType == int.class || lookupType == Integer.class) {
this.defaultValue = Integer.parseInt(defaultValue);
} else if (lookupType == double.class || lookupType == Double.class) {
this.defaultValue = Double.parseDouble(defaultValue);
} else if (lookupType == float.class || lookupType == Float.class) {
this.defaultValue = Float.parseFloat(defaultValue);
} else if (lookupType == short.class || lookupType == Short.class) {
this.defaultValue = Short.parseShort(defaultValue);
} else if (lookupType == char.class || lookupType == Character.class) {
this.defaultValue = defaultValue.charAt(0);
} else if (lookupType == byte.class || lookupType == Byte.class) {
this.defaultValue = Byte.parseByte(defaultValue);
} else if (collectionCollector != null) {
this.defaultValue = convert(defaultValue, config);
} else if (lookupType == String.class) {
this.defaultValue = defaultValue;
} else {
throw new IllegalArgumentException("Unsupported default for " + m);
}
} else {
if (lookupType.isPrimitive()) {
if (lookupType == long.class) {
this.defaultValue = 0L;
} else if (lookupType == boolean.class) {
this.defaultValue = false;
} else if (lookupType == int.class ) {
this.defaultValue = 0;
} else if (lookupType == double.class) {
this.defaultValue = 0.0D;
} else if (lookupType == float.class) {
this.defaultValue = 0.0F;
} else if (lookupType == short.class) {
this.defaultValue = (short) 0;
} else if (lookupType == char.class) {
this.defaultValue = '\u0000';
} else if (lookupType == byte.class) {
this.defaultValue = (byte) 0;
} else {
this.defaultValue = null;
}
} else {
this.defaultValue = null;
}
}
}