in src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java [265:296]
static String replaceVariables(final String value, final Map<String,String> additionalVariables, final Feature feature) {
final String textWithVars = value;
final Matcher m = VARIABLE_PATTERN.matcher(textWithVars.toString());
final StringBuffer sb = new StringBuffer();
while (m.find()) {
final String var = m.group();
final int len = var.length();
final String name = var.substring(2, len - 1);
if (feature.getVariables().containsKey(name)) {
String val = null;
if (additionalVariables != null)
val = additionalVariables.get(name);
if (val == null) {
val = feature.getVariables().get(name);
}
if (val != null) {
String replaced = replaceVariables(val, additionalVariables, feature);
m.appendReplacement(sb, Matcher.quoteReplacement(replaced));
}
else {
throw new IllegalStateException("Undefined variable: " + name);
}
}
}
m.appendTail(sb);
return sb.toString();
}