neilg 2002/09/03 10:55:32 Modified: java/src/org/apache/xerces/impl/xs/identity XPathMatcher.java Log: fix for bug #12234 Revision Changes Path 1.12 +12 -2 xml-xerces/java/src/org/apache/xerces/impl/xs/identity/XPathMatcher.java Index: XPathMatcher.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/XPathMatcher.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- XPathMatcher.java 23 Aug 2002 22:52:07 -0000 1.11 +++ XPathMatcher.java 3 Sep 2002 17:55:32 -0000 1.12 @@ -118,9 +118,14 @@ // constants describing whether a match was made, // and if so how. + // matched any way protected static final int MATCHED = 1; + // matched on the attribute axis protected static final int MATCHED_ATTRIBUTE = 3; + // matched on the descendant-or-self axixs protected static final int MATCHED_DESCENDANT = 5; + // matched some previous (ancestor) node on the descendant-or-self-axis, but not this node + protected static final int MATCHED_DESCENDANT_PREVIOUS = 13; // // Data @@ -183,7 +188,9 @@ public int isMatched() { // xpath has been matched if any one of the members of the union have matched. for (int i=0; i < fLocationPaths.length; i++) - if ((fMatched[i] & MATCHED) == MATCHED) return fMatched[i]; + if (((fMatched[i] & MATCHED) == MATCHED) && + ((fMatched[i] & MATCHED_DESCENDANT_PREVIOUS) != MATCHED_DESCENDANT_PREVIOUS)) + return fMatched[i]; return 0; } // isMatched():int @@ -275,6 +282,9 @@ if ((fMatched[i] & MATCHED_DESCENDANT) == MATCHED || fNoMatchDepth[i] > 0) { fNoMatchDepth[i]++; continue; + } + if((fMatched[i] & MATCHED_DESCENDANT) == MATCHED_DESCENDANT) { + fMatched[i] = MATCHED_DESCENDANT_PREVIOUS; } if (DEBUG_STACK) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]