private String extractValue(Object value, boolean resolveReferences) {
if (value == null) return "null";
if (value instanceof BeanReference && resolveReferences) {
String refName = ((BeanReference) value).getBeanName();
try {
BeanDefinition refDef = globalFactory.getBeanDefinition(refName);
// 1. Check Properties first (Setters)
if (!refDef.getPropertyValues().isEmpty()) {
return "@" + refName + " -> " + extractValue(refDef.getPropertyValues(), false);
}
// 2. Check Constructor Arguments (Like your ArrayList example)
ConstructorArgumentValues cav = refDef.getConstructorArgumentValues();
if (!cav.isEmpty()) {
// Pull the first argument (index 0), which is usually the <list>
ConstructorArgumentValues.ValueHolder vh = cav.getIndexedArgumentValue(0, null);
if (vh == null) vh = cav.getGenericArgumentValue(null);
if (vh != null) {
return "@" + refName + " -> " + extractValue(vh.getValue(), false);
}
}
return "@" + refName;
} catch (Exception e) {
return "@" + refName;
}
}
// Rest of your existing extraction logic...
if (value instanceof TypedStringValue) {
return ((TypedStringValue) value).getValue();
}
if (value instanceof List) {
List<String> cleaned = new ArrayList<>();
for (Object item : (List<?>) value) cleaned.add(extractValue(item, false));
return cleaned.toString();
}
if (value instanceof Map) {
StringBuilder mapStr = new StringBuilder("{");
for (Map.Entry<?, ?> entry : ((Map<?, ?>) value).entrySet()) {
mapStr.append(extractValue(entry.getKey(), false)).append("=").append(extractValue(entry.getValue(), false)).append(", ");
}
if (mapStr.length() > 1) mapStr.setLength(mapStr.length() - 2);
return mapStr.append("}").toString();
}
return value.toString();
}
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (0)