Details
Description
There is a problem when you have an XPath that contains a variable reference followed by self::node() if you use XSLTC (the problem does not occure if you just use Xalan without XSLTC).
If you have for example $var1/self::node(). The following XSLTC Step is generated :
FilterParentPath(variable-ref(var1/node-set), step("self", -1))
This step is translated to the following piece of code (I decompiled to byte code):
DTMAxisIterator dtmaxisiterator1 = (new CachedNodeListIterator(new StepIterator(dom.getTypedAxisIterator(3, 14), dom.getTypedAxisIterator(3, 15)))).setStartNode;
this;
dom;
new StepIterator(dtmaxisiterator1.cloneIterator(), new SingletonIterator);
As you can see the 'self::node()' step is translated to 'new SingletonIterator'. This is not correct because new SingletonIterator will refer to the node of the _parent of the FilterParentPath step.
After applying the patch I made, the following code is generated if the _parent of the Step (self::node()) isn't a 'ParentLocationPath' :
new StepIterator(dtmaxisiterator1.cloneIterator(), dom.getAxisIterator(13));
To run the sample just run
org.apache.xalan.xslt.Process -in items.xml -xsl problem2.xsl -xsltc