/** * Builds a replacement abstract syntax tree for the string expression {@code * expr}. Appends any string literal values that are encountered to * {@code keyBuilder}, to build the expression's replacement key. * * @param expr A JS expression that evaluates to a string value * @param prefix The JS expression to which {@code expr}'s replacement is * logically being concatenated. It is a partial solution to the * problem at hand and will either be this method's return value or a * descendant of it. * @param keyBuilder A builder of the string expression's replacement key * @return The abstract syntax tree that should replace {@code expr} */ private Node buildReplacement( Node expr, Node prefix, StringBuilder keyBuilder) { switch (expr.getType()) { case Token.ADD: Node left = expr.getFirstChild(); Node right = left.getNext(); prefix = buildReplacement(left, prefix, keyBuilder); return buildReplacement(right, prefix, keyBuilder); case Token.STRING: keyBuilder.append(expr.getString()); return prefix; default: keyBuilder.append(placeholderToken); prefix = IR.add(prefix, IR.string(placeholderToken)); return IR.add(prefix, expr.cloneTree()); } }
return IR.add(partNode, constructAddOrStringNode(partsIterator, argListNode)); } else {
return IR.add(partNode, constructStringExprNode(parts, objLitNode, refNode)); } else {
return IR.add(partNode, constructAddOrStringNode(partsIterator, argListNode)); } else {
return IR.add(partNode, constructStringExprNode(parts, objLitNode, refNode)); } else {
Node replacement = IR.add( IR.string("").srcref(n), foldedStringNode);
if (value != null && value.getNext() == null && NodeUtil.isImmutableValue(value)) { Node addition = IR.add( IR.string("").srcref(callTarget), value.detachFromParent());
Node addition = IR.add(IR.string("").srcref(callTarget), value.detach()); n.replaceWith(addition); reportChangeToEnclosingScope(addition);
processStringNode(t, second); n.removeChild(first); Node replacement = IR.add(first, IR.string("-" + second.getString()) .useSourceInfoIfMissingFrom(second))
processStringNode(t, second); n.removeChild(first); Node replacement = IR.add(first, IR.string("-" + second.getString()) .useSourceInfoIfMissingFrom(second))