| diff -ur lucene-2.4.0/src/java/org/apache/lucene/search/CachingWrapperFilter.java lucene-2.4.0-patch/src/java/org/apache/lucene/search/CachingWrapperFilter.java |
| --- lucene-2.4.0/src/java/org/apache/lucene/search/CachingWrapperFilter.java 2008-10-01 04:58:30.000000000 -0700 |
| +++ lucene-2.4.0-patch/src/java/org/apache/lucene/search/CachingWrapperFilter.java 2008-11-17 13:52:07.827185468 -0800 |
| @@ -18,6 +18,7 @@ |
| */ |
| |
| import org.apache.lucene.index.IndexReader; |
| +import org.apache.lucene.util.DocIdBitSet; |
| import java.util.BitSet; |
| import java.util.WeakHashMap; |
| import java.util.Map; |
| @@ -51,12 +52,19 @@ |
| cache = new WeakHashMap(); |
| } |
| |
| + Object cached = null; |
| synchronized (cache) { // check cache |
| - BitSet cached = (BitSet) cache.get(reader); |
| - if (cached != null) { |
| - return cached; |
| - } |
| - } |
| + cached = cache.get(reader); |
| + } |
| + |
| + if (cached == null) { |
| + // fallthrough |
| + } else if (cached instanceof BitSet) { |
| + return (BitSet)cached; |
| + } else if (cached instanceof DocIdBitSet) { |
| + return ((DocIdBitSet)cached).getBitSet(); |
| + } |
| + // It would be nice to handle the DocIdSet case, but that's not really possible |
| |
| final BitSet bits = filter.bits(reader); |
| |
| @@ -72,11 +80,15 @@ |
| cache = new WeakHashMap(); |
| } |
| |
| + Object cached = null; |
| synchronized (cache) { // check cache |
| - DocIdSet cached = (DocIdSet) cache.get(reader); |
| - if (cached != null) { |
| - return cached; |
| - } |
| + cached = cache.get(reader); |
| + } |
| + if (cached != null) { |
| + if (cached instanceof DocIdSet) |
| + return (DocIdSet)cached; |
| + else |
| + return new DocIdBitSet((BitSet)cached); |
| } |
| |
| final DocIdSet docIdSet = filter.getDocIdSet(reader); |
| |