in foundations/foundation-config/src/main/java/org/apache/servicecomb/config/inject/PlaceholderResolver.java [150:201]
private void resolve(Row row, List<String> resolvedRows) {
List<StringBuilder> stringBuilders = new ArrayList<>();
for (int idx = 0; idx < row.cartesianProductCount; idx++) {
stringBuilders.add(new StringBuilder());
}
int collectionRepeatCount = 1;
for (SplitPart part : row.parts) {
if (!part.var) {
for (int idx = 0; idx < row.cartesianProductCount; idx++) {
StringBuilder sb = stringBuilders.get(idx);
if (part.fullName.startsWith("$")) {
sb.append("\\" + part.fullName);
continue;
}
sb.append(part.fullName);
}
continue;
}
if (part.value instanceof Collection) {
int size = ((Collection<String>) part.value).size();
int rowRepeatCount = row.cartesianProductCount / size / collectionRepeatCount;
int valueIdx = 0;
for (int collectionRepeatIdx = 0; collectionRepeatIdx < collectionRepeatCount; collectionRepeatIdx++) {
for (String value : (Collection<String>) part.value) {
for (int repeatIdx = 0; repeatIdx < rowRepeatCount; repeatIdx++) {
StringBuilder sb = stringBuilders.get(valueIdx);
valueIdx++;
sb.append(value);
}
}
}
collectionRepeatCount *= size;
continue;
}
// normal var
for (int idx = 0; idx < row.cartesianProductCount; idx++) {
StringBuilder sb = stringBuilders.get(idx);
sb.append(part.value);
}
}
for (StringBuilder sb : stringBuilders) {
resolvedRows.add(sb.toString());
}
}