}
public Object generate() {
if (target.isNamespaceRef()) {
// e.g: #set ($x = $y)
throw new InterpretationException(source, indexInSource, "Not possible to set namespace variable $" + target.getNamespaceName());
}
if (target.isMethodRef()) {
// e.g: #set (a() = 123)
throw new InterpretationException(source, indexInSource, "Not possible to set a method, function or macro");
}
if (!target.hasAttributes()) {
// e.g: #set (x = "1") or #set ($n.x = "1")
data.setAttribute(target.getVariableName(), target.getSpecifiedContext(context));
} else {
// e.g: #set (x.a = "1") or #set ($n.x.a = "1") or #set (a.b.c.d = 1)
AttributeRefs targetAttributeRefs = target.getAttributesRefs();
AttributeRef targetAttributeRef = targetAttributeRefs.getLastAttribute();
String targetAttributeName = targetAttributeRef.getName();
Object targetObject = target.getContext().evaluate(target.getAttributeRef());
if (targetObject == null) {
throw new InterpretationException(source, indexInSource, "Can not set value, the target was null '" + target.getAttributeRef().getName() + "'");
}
targetAttributeRefs = targetAttributeRefs.createAttributesSkipLast();
if (targetAttributeRefs.hasAttributes()) {