use of org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode in project sling by apache.
the class SyntheticMapRemoval method visit.
@Override
public void visit(VariableBinding.Start variableBindingStart) {
ExpressionNode node = variableBindingStart.getExpression();
String variable = variableBindingStart.getVariableName();
ExpressionNode transformed = transform(node);
if (transformed instanceof MapLiteral) {
MapLiteral newLiteral = overrideMap(variable, (MapLiteral) transformed);
tracker.pushVariable(variable, newLiteral);
transformed = newLiteral;
} else {
tracker.pushVariable(variable, null);
}
outputStream.write(new VariableBinding.Start(variable, transformed));
}
use of org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode in project sling by apache.
the class ExpressionReducer method evaluate.
@Override
public EvalResult evaluate(ArrayLiteral arrayLiteral) {
ArrayList<EvalResult> results = new ArrayList<>();
boolean isConstant = true;
for (ExpressionNode node : arrayLiteral.getItems()) {
EvalResult result = eval(node);
results.add(result);
isConstant = isConstant && result.isConstant();
}
if (isConstant) {
ArrayList<Object> list = new ArrayList<>();
for (EvalResult result : results) {
list.add(result.getValue());
}
return EvalResult.constant(list);
} else {
ArrayList<ExpressionNode> literal = new ArrayList<>();
for (EvalResult result : results) {
literal.add(result.getNode());
}
return EvalResult.nonConstant(new ArrayLiteral(literal));
}
}
use of org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode in project sling by apache.
the class ExpressionWrapperTest method testURIOptionsRemoval.
@Test
public void testURIOptionsRemoval() {
Interpolation interpolation = new Interpolation();
Map<String, ExpressionNode> options = new HashMap<>();
options.put(URIManipulationFilter.SCHEME, new StringConstant("https"));
options.put(URIManipulationFilter.DOMAIN, new StringConstant("www.example.org"));
options.put(URIManipulationFilter.PREPEND_PATH, new StringConstant("/before"));
options.put(URIManipulationFilter.PATH, new StringConstant("/path"));
options.put(URIManipulationFilter.APPEND_PATH, new StringConstant("/after"));
List<ExpressionNode> selectors = new ArrayList<>();
selectors.add(new StringConstant("a"));
selectors.add(new StringConstant("b"));
options.put(URIManipulationFilter.SELECTORS, new ArrayLiteral(selectors));
options.put(URIManipulationFilter.EXTENSION, new StringConstant("html"));
options.put(URIManipulationFilter.PREPEND_SUFFIX, new StringConstant("/pre"));
options.put(URIManipulationFilter.APPEND_SUFFIX, new StringConstant("/after"));
options.put(URIManipulationFilter.FRAGMENT, new StringConstant("rewrite"));
Map<String, ExpressionNode> query = new HashMap<>();
query.put("q", new StringConstant("sightly"));
query.put("array", new ArrayLiteral(new ArrayList<ExpressionNode>() {
{
add(new NumericConstant(1));
add(new NumericConstant(2));
add(new NumericConstant(3));
}
}));
options.put(URIManipulationFilter.QUERY, new MapLiteral(query));
options.put(URIManipulationFilter.REMOVE_QUERY, new StringConstant("array"));
interpolation.addExpression(new Expression(new StringConstant("http://www.example.com/resource.selector.extension/suffix#fragment?param=value"), options));
ExpressionWrapper wrapper = new ExpressionWrapper(filters);
Expression result = wrapper.transform(interpolation, MarkupContext.TEXT, ExpressionContext.TEXT);
List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 0);
RuntimeCall join = (RuntimeCall) xssArguments.get(0);
assertEquals(RuntimeFunction.URI_MANIPULATION, join.getFunctionName());
}
use of org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode in project sling by apache.
the class ExpressionWrapperTest method testJoinOptionsRemoval.
@Test
public void testJoinOptionsRemoval() {
Interpolation interpolation = new Interpolation();
Map<String, ExpressionNode> options = new HashMap<>();
options.put(JoinFilter.JOIN_OPTION, new StringConstant(";"));
List<ExpressionNode> array = new ArrayList<>();
array.add(new NumericConstant(0));
array.add(new NumericConstant(1));
interpolation.addExpression(new Expression(new ArrayLiteral(array), options));
ExpressionWrapper wrapper = new ExpressionWrapper(filters);
Expression result = wrapper.transform(interpolation, MarkupContext.TEXT, ExpressionContext.TEXT);
List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 0);
RuntimeCall join = (RuntimeCall) xssArguments.get(0);
assertEquals(RuntimeFunction.JOIN, join.getFunctionName());
}
use of org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode in project sling by apache.
the class ExpressionTranslator method visit.
@Override
public void visit(RuntimeCall runtimeCall) {
source.startMethodCall(SourceGenConstants.RENDER_CONTEXT_INSTANCE, SourceGenConstants.RUNTIME_CALL_METHOD).stringLiteral(runtimeCall.getFunctionName());
for (ExpressionNode arg : runtimeCall.getArguments()) {
source.separateArgument();
visit(arg);
}
source.endCall();
}
Aggregations