public boolean isInstance(Object obj) { if (obj instanceof Values) { Values vals = (Values) obj; int pos = vals.startPos(); int n = 0; if (base instanceof ItemPredicate) { ItemPredicate pred = (ItemPredicate) base; for (; ; ) { boolean matches; matches = pred.isInstancePos(vals, pos); pos = vals.nextPos(pos); if (pos == 0) { return n >= minOccurs && (maxOccurs < 0 || n <= maxOccurs); } if (!matches) return false; n++; } } else { for (; ; ) { pos = vals.nextPos(pos); if (pos == 0) { return n >= minOccurs && (maxOccurs < 0 || n <= maxOccurs); } Object value = vals.getPosPrevious(pos); if (!base.isInstance(value)) return false; n++; } } } else { if (minOccurs > 1 || maxOccurs == 0) return false; return base.isInstance(obj); } }