in core-it-support/core-it-plugins/maven-it-plugin-expression/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;
}