private static Map evaluate()

in core-it-support/core-it-plugins/maven-it-plugin-class-loader/maven-it-plugin-class-loader/src/main/java/org/apache/maven/plugin/coreit/ExpressionUtil.java [82:128]


    private static Map evaluate(String prefix, List segments, Object context) {
        Map values = Collections.EMPTY_MAP;

        if (segments.isEmpty()) {
            values = Collections.singletonMap(prefix, context);
        } else if (context != null) {
            Map targets = Collections.EMPTY_MAP;
            String segment = (String) segments.get(0);
            if (context.getClass().isArray() && Character.isDigit(segment.charAt(0))) {
                try {
                    int index = Integer.parseInt(segment);
                    targets = Collections.singletonMap(segment, Array.get(context, index));
                } catch (RuntimeException e) {
                    // invalid index, just ignore
                }
            } else if ((context instanceof List) && Character.isDigit(segment.charAt(0))) {
                try {
                    int index = Integer.parseInt(segment);
                    targets = Collections.singletonMap(segment, ((List) context).get(index));
                } catch (RuntimeException e) {
                    // invalid index, just ignore
                }
            } else if ((context instanceof Collection) && "*".equals(segment)) {
                targets = new LinkedHashMap();
                int index = 0;
                for (Iterator it = ((Collection) context).iterator(); it.hasNext(); index++) {
                    targets.put(Integer.toString(index), it.next());
                }
            } else if (context.getClass().isArray() && "*".equals(segment)) {
                targets = new LinkedHashMap();
                for (int index = 0, n = Array.getLength(context); index < n; index++) {
                    targets.put(Integer.toString(index), Array.get(context, index));
                }
            } else {
                targets = Collections.singletonMap(segment, getProperty(context, segment));
            }

            values = new LinkedHashMap();
            for (Object key : targets.keySet()) {
                Object target = targets.get(key);
                values.putAll(
                        evaluate(concat(prefix, String.valueOf(key)), segments.subList(1, segments.size()), target));
            }
        }

        return values;
    }