Methods Summary |
---|
public void | callVisitors(com.sun.org.apache.xpath.internal.ExpressionOwner owner, com.sun.org.apache.xpath.internal.XPathVisitor visitor)
visitor.visitVariableRef(owner, this);
|
public boolean | deepEquals(com.sun.org.apache.xpath.internal.Expression expr)
if(!isSameClass(expr))
return false;
if(!m_qname.equals(((Variable)expr).m_qname))
return false;
// J2SE does not support Xalan interpretive
/*
// We have to make sure that the qname really references
// the same variable element.
if(getElemVariable() != ((Variable)expr).getElemVariable())
return false;
*/
return true;
|
public com.sun.org.apache.xpath.internal.objects.XObject | execute(com.sun.org.apache.xpath.internal.XPathContext xctxt)Execute an expression in the XPath runtime context, and return the
result of the expression.
return execute(xctxt, false);
|
public com.sun.org.apache.xpath.internal.objects.XObject | execute(com.sun.org.apache.xpath.internal.XPathContext xctxt, boolean destructiveOK)Dereference the variable, and return the reference value. Note that lazy
evaluation will occur. If a variable within scope is not found, a warning
will be sent to the error listener, and an empty nodeset will be returned.
com.sun.org.apache.xml.internal.utils.PrefixResolver xprefixResolver = xctxt.getNamespaceContext();
XObject result;
// Is the variable fetched always the same?
// XObject result = xctxt.getVariable(m_qname);
if(m_fixUpWasCalled)
{
if(m_isGlobal)
result = xctxt.getVarStack().getGlobalVariable(xctxt, m_index, destructiveOK);
else
result = xctxt.getVarStack().getLocalVariable(xctxt, m_index, destructiveOK);
}
else {
result = xctxt.getVarStack().getVariableOrParam(xctxt,m_qname);
}
if (null == result)
{
// This should now never happen...
warn(xctxt, XPATHErrorResources.WG_ILLEGAL_VARIABLE_REFERENCE,
new Object[]{ m_qname.getLocalPart() }); //"VariableReference given for variable out "+
// (new RuntimeException()).printStackTrace();
// error(xctxt, XPATHErrorResources.ER_COULDNOT_GET_VAR_NAMED,
// new Object[]{ m_qname.getLocalPart() }); //"Could not get variable named "+varName);
result = new XNodeSet(xctxt.getDTMManager());
}
return result;
// }
// else
// {
// // Hack city... big time. This is needed to evaluate xpaths from extensions,
// // pending some bright light going off in my head. Some sort of callback?
// synchronized(this)
// {
// com.sun.org.apache.xalan.internal.templates.ElemVariable vvar= getElemVariable();
// if(null != vvar)
// {
// m_index = vvar.getIndex();
// m_isGlobal = vvar.getIsTopLevel();
// m_fixUpWasCalled = true;
// return execute(xctxt);
// }
// }
// throw new javax.xml.transform.TransformerException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_VAR_NOT_RESOLVABLE, new Object[]{m_qname.toString()})); //"Variable not resolvable: "+m_qname);
// }
|
public void | fixupVariables(java.util.Vector vars, int globalsSize)This function is used to fixup variables from QNames to stack frame
indexes at stylesheet build time.
m_fixUpWasCalled = true;
int sz = vars.size();
for (int i = vars.size()-1; i >= 0; i--)
{
QName qn = (QName)vars.elementAt(i);
// System.out.println("qn: "+qn);
if(qn.equals(m_qname))
{
if(i < globalsSize)
{
m_isGlobal = true;
m_index = i;
}
else
{
m_index = i-globalsSize;
}
return;
}
}
java.lang.String msg = XSLMessages.createXPATHMessage(XPATHErrorResources.ER_COULD_NOT_FIND_VAR,
new Object[]{m_qname.toString()});
TransformerException te = new TransformerException(msg, this);
throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(te);
|
public int | getAnalysisBits()Get the analysis bits for this walker, as defined in the WalkerFactory.
// J2SE does not support Xalan interpretive
/*
com.sun.org.apache.xalan.internal.templates.ElemVariable vvar = getElemVariable();
if(null != vvar)
{
XPath xpath = vvar.getSelect();
if(null != xpath)
{
Expression expr = xpath.getExpression();
if(null != expr && expr instanceof PathComponent)
{
return ((PathComponent)expr).getAnalysisBits();
}
}
}
*/
return WalkerFactory.BIT_FILTER;
|
public boolean | getGlobal()Set the index for the variable into the stack. For advanced use only.
return m_isGlobal;
|
public int | getIndex()Set the index for the variable into the stack. For advanced use only.
return m_index;
|
public com.sun.org.apache.xml.internal.utils.QName | getQName()Get the qualified name of the variable.
return m_qname;
|
public boolean | isPsuedoVarRef()Tell if this is a psuedo variable reference, declared by Xalan instead
of by the user.
java.lang.String ns = m_qname.getNamespaceURI();
if((null != ns) && ns.equals(PSUEDOVARNAMESPACE))
{
if(m_qname.getLocalName().startsWith("#"))
return true;
}
return false;
|
public boolean | isStableNumber()Tell if this expression returns a stable number that will not change during
iterations within the expression. This is used to determine if a proximity
position predicate can indicate that no more searching has to occur.
return true;
|
public void | setIndex(int index)Set the index for the variable into the stack. For advanced use only. You
must know what you are doing to use this.
m_index = index;
|
public void | setIsGlobal(boolean isGlobal)Set whether or not this is a global reference. For advanced use only.
m_isGlobal = isGlobal;
|
public void | setQName(com.sun.org.apache.xml.internal.utils.QName qname)Set the qualified name of the variable.
m_qname = qname;
|