DEV Community

Query Filter
Query Filter

Posted on

bridge87

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();
    }
Enter fullscreen mode Exit fullscreen mode

Top comments (0)