neilg 2002/08/14 09:02:22
Modified: java/src/org/apache/xerces/impl/xs/identity
XPathMatcher.java Selector.java
Log:
fix for bug 11152
Revision Changes Path
1.9 +11 -7
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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- XPathMatcher.java 13 Aug 2002 22:32:44 -0000 1.8
+++ XPathMatcher.java 14 Aug 2002 16:02:22 -0000 1.9
@@ -195,13 +195,16 @@
// Public methods
//
- /** Returns true if XPath has been matched. */
- public boolean isMatched() {
+ /**
+ * Returns value of first member of fMatched that
+ * is nonzero.
+ */
+ 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 true;
- return false;
- } // isMatched():boolean
+ if ((fMatched[i] & MATCHED) == MATCHED) return fMatched[i];
+ return 0;
+ } // isMatched():int
// returns whether this XPathMatcher was matching a Selector
public boolean getIsSelector() {
@@ -318,7 +321,7 @@
fStepIndexes[i].push(startStep);
// try next xpath, if not matching
- if ((fMatched[i] & MATCHED) == MATCHED || fNoMatchDepth[i] > 0) {
+ if ((fMatched[i] & MATCHED_DESCENDANT) == MATCHED || fNoMatchDepth[i] >
0) {
fNoMatchDepth[i]++;
continue;
}
@@ -397,6 +400,7 @@
}
if (fCurrentStep[i] == steps.length) {
if(sawDescendant) {
+ fCurrentStep[i] = descendantStep;
fMatched[i] = MATCHED_DESCENDANT;
} else {
fMatched[i] = MATCHED;
1.7 +5 -3
xml-xerces/java/src/org/apache/xerces/impl/xs/identity/Selector.java
Index: Selector.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/Selector.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Selector.java 13 Aug 2002 22:32:44 -0000 1.6
+++ Selector.java 14 Aug 2002 16:02:22 -0000 1.7
@@ -230,7 +230,9 @@
fElementDepth++;
// activate the fields, if selector is matched
- if (fMatchedDepth == -1 && isMatched()) {
+ int matched = isMatched();
+ if ((fMatchedDepth == -1 && ((matched & MATCHED) == MATCHED)) ||
+ ((matched & MATCHED_DESCENDANT) == MATCHED_DESCENDANT)) {
fMatchedDepth = fElementDepth;
fFieldActivator.startValueScopeFor(fIdentityConstraint);
int count = fIdentityConstraint.getFieldCount();
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]