in src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/ScriptingVariabler.java [76:141]
private void setScriptingVars(Node.CustomTag n, int scope)
throws JasperException {
TagVariableInfo[] tagVarInfos = n.getTagVariableInfos();
VariableInfo[] varInfos = n.getVariableInfos();
if (tagVarInfos.length == 0 && varInfos.length == 0) {
return;
}
Vector vec = new Vector();
Integer ownRange = null;
if (scope == VariableInfo.AT_BEGIN
|| scope == VariableInfo.AT_END) {
Node.CustomTag parent = n.getCustomTagParent();
if (parent == null)
ownRange = MAX_SCOPE;
else
ownRange = parent.getNumCount();
} else {
// NESTED
ownRange = n.getNumCount();
}
if (varInfos.length > 0) {
for (int i=0; i<varInfos.length; i++) {
if (varInfos[i].getScope() != scope
|| !varInfos[i].getDeclare()) {
continue;
}
String varName = varInfos[i].getVarName();
Integer currentRange = (Integer) scriptVars.get(varName);
if (currentRange == null
|| ownRange.compareTo(currentRange) > 0) {
scriptVars.put(varName, ownRange);
vec.add(varInfos[i]);
}
}
} else {
for (int i=0; i<tagVarInfos.length; i++) {
if (tagVarInfos[i].getScope() != scope
|| !tagVarInfos[i].getDeclare()) {
continue;
}
String varName = tagVarInfos[i].getNameGiven();
if (varName == null) {
varName = n.getTagData().getAttributeString(
tagVarInfos[i].getNameFromAttribute());
if (varName == null) {
err.jspError(n, "jsp.error.scripting.variable.missing_name",
tagVarInfos[i].getNameFromAttribute());
}
}
Integer currentRange = (Integer) scriptVars.get(varName);
if (currentRange == null
|| ownRange.compareTo(currentRange) > 0) {
scriptVars.put(varName, ownRange);
vec.add(tagVarInfos[i]);
}
}
}
n.setScriptingVars(vec, scope);
}