Index: CHANGES.txt =================================================================== --- CHANGES.txt (revision 891230) +++ CHANGES.txt (working copy) @@ -18,6 +18,9 @@ Changes in runtime behavior +* LUCENE-1923: Made IndexReader.toString() produce something + meaningful (Tim Smith via Mike McCandless) + API Changes * LUCENE-2076: Rename FSDirectory.getFile -> getDirectory. (George Index: src/java/org/apache/lucene/index/SegmentInfo.java =================================================================== --- src/java/org/apache/lucene/index/SegmentInfo.java (revision 891230) +++ src/java/org/apache/lucene/index/SegmentInfo.java (working copy) @@ -91,11 +91,6 @@ private Map diagnostics; - @Override - public String toString() { - return "si: "+dir.toString()+" "+name+" docCount: "+docCount+" delCount: "+delCount+" delFileName: "+getDelFileName(); - } - public SegmentInfo(String name, int docCount, Directory dir) { this.name = name; this.docCount = docCount; @@ -683,29 +678,65 @@ sizeInBytes = -1; } - /** Used for debugging */ - public String segString(Directory dir) { - String cfs; + /** {@inheritDoc} */ + @Override + public String toString() { + return toString(dir); + } + + /** Used for debugging. Format may suddenly change. + * + *

Current format looks like + * _a:c45/4->_1, which means the segment's + * name is _a; it's using compound file + * format (would be C if not compound); it + * has 45 documents; it has 4 deletions (this part is + * left off when there are no deletions); it's using the + * shared doc stores named _1 (this part is + * left off if doc stores are private).

+ */ + public String toString(Directory dir) { + + StringBuilder s = new StringBuilder(); + s.append("name").append(':'); + + char cfs; try { - if (getUseCompoundFile()) - cfs = "c"; - else - cfs = "C"; + if (getUseCompoundFile()) { + cfs = 'c'; + } else { + cfs = 'C'; + } } catch (IOException ioe) { - cfs = "?"; + cfs = '?'; } + s.append(cfs); - String docStore; + if (this.dir != dir) { + s.append('x'); + } + s.append(docCount); - if (docStoreOffset != -1) - docStore = "->" + docStoreSegment; - else - docStore = ""; + int delCount; + try { + delCount = getDelCount(); + } catch (IOException ioe) { + delCount = -1; + } + if (delCount != 0) { + s.append('/'); + if (delCount == -1) { + s.append('?'); + } else { + s.append(delCount); + } + } + + if (docStoreOffset != -1) { + s.append("->").append(docStoreSegment); + } - return name + ":" + - cfs + - (this.dir == dir ? "" : "x") + - docCount + docStore; + return s.toString(); } /** We consider another SegmentInfo instance equal if it Index: src/java/org/apache/lucene/index/ParallelReader.java =================================================================== --- src/java/org/apache/lucene/index/ParallelReader.java (revision 891230) +++ src/java/org/apache/lucene/index/ParallelReader.java (working copy) @@ -70,6 +70,21 @@ this.incRefReaders = !closeSubReaders; } + /** {@inheritDoc} */ + @Override + public String toString() { + final StringBuilder buffer = new StringBuilder("ParallelReader("); + final Iterator iter = readers.iterator(); + if (iter.hasNext()) { + buffer.append(iter.next()); + } + while (iter.hasNext()) { + buffer.append(", ").append(iter.next()); + } + buffer.append(')'); + return buffer.toString(); + } + /** Add an IndexReader. * @throws IOException if there is a low-level IO error */ Index: src/java/org/apache/lucene/index/SegmentReader.java =================================================================== --- src/java/org/apache/lucene/index/SegmentReader.java (revision 891230) +++ src/java/org/apache/lucene/index/SegmentReader.java (working copy) @@ -1190,6 +1190,12 @@ return termVectorsReader.get(docNumber); } + /** {@inheritDoc} */ + @Override + public String toString() { + return si.toString(); + } + /** * Return the name of the segment this reader is reading. */ Index: src/java/org/apache/lucene/index/MergePolicy.java =================================================================== --- src/java/org/apache/lucene/index/MergePolicy.java (revision 891230) +++ src/java/org/apache/lucene/index/MergePolicy.java (working copy) @@ -127,7 +127,7 @@ final int numSegments = segments.size(); for(int i=0;i 0) b.append(' '); - b.append(segments.info(i).segString(dir)); + b.append(segments.info(i).toString(dir)); } if (info != null) b.append(" into ").append(info.name); Index: src/java/org/apache/lucene/index/SegmentInfos.java =================================================================== --- src/java/org/apache/lucene/index/SegmentInfos.java (revision 891230) +++ src/java/org/apache/lucene/index/SegmentInfos.java (working copy) @@ -875,7 +875,7 @@ buffer.append(' '); } final SegmentInfo info = info(i); - buffer.append(info.segString(directory)); + buffer.append(info.toString(directory)); if (info.dir != directory) buffer.append("**"); } Index: src/java/org/apache/lucene/index/DirectoryReader.java =================================================================== --- src/java/org/apache/lucene/index/DirectoryReader.java (revision 891230) +++ src/java/org/apache/lucene/index/DirectoryReader.java (working copy) @@ -299,6 +299,21 @@ } } + /** {@inheritDoc} */ + @Override + public String toString() { + final StringBuilder buffer = new StringBuilder("DirectoryReader("); + buffer.append(segmentInfos.getCurrentSegmentFileName()).append(": "); + for (int i = 0; i < subReaders.length; ++i) { + if (i > 0) { + buffer.append(", "); + } + buffer.append(subReaders[i]); + } + buffer.append(')'); + return buffer.toString(); + } + private void initialize(SegmentReader[] subReaders) { this.subReaders = subReaders; starts = new int[subReaders.length + 1]; // build starts array Index: src/java/org/apache/lucene/index/FilterIndexReader.java =================================================================== --- src/java/org/apache/lucene/index/FilterIndexReader.java (revision 891230) +++ src/java/org/apache/lucene/index/FilterIndexReader.java (working copy) @@ -288,4 +288,13 @@ public Object getFieldCacheKey() { return in.getFieldCacheKey(); } + + /** {@inheritDoc} */ + @Override + public String toString() { + final StringBuilder buffer = new StringBuilder("FilterReader("); + buffer.append(in); + buffer.append(')'); + return buffer.toString(); + } } Index: src/java/org/apache/lucene/index/IndexReader.java =================================================================== --- src/java/org/apache/lucene/index/IndexReader.java (revision 891230) +++ src/java/org/apache/lucene/index/IndexReader.java (working copy) @@ -145,6 +145,22 @@ refCount.incrementAndGet(); } + /** {@inheritDoc} */ + @Override + public String toString() { + final StringBuilder buffer = new StringBuilder(getClass().getSimpleName()); + buffer.append('('); + final IndexReader[] subReaders = getSequentialSubReaders(); + if ((subReaders != null) && (subReaders.length > 0)) { + buffer.append(subReaders[0]); + for (int i = 1; i < subReaders.length; ++i) { + buffer.append(", ").append(subReaders[i]); + } + } + buffer.append(')'); + return buffer.toString(); + } + /** * Expert: decreases the refCount of this IndexReader * instance. If the refCount drops to 0, then pending Index: src/java/org/apache/lucene/index/IndexWriter.java =================================================================== --- src/java/org/apache/lucene/index/IndexWriter.java (revision 891230) +++ src/java/org/apache/lucene/index/IndexWriter.java (working copy) @@ -4483,7 +4483,7 @@ buffer.append(' '); } final SegmentInfo info = infos.info(i); - buffer.append(info.segString(directory)); + buffer.append(info.toString(directory)); if (info.dir != directory) buffer.append("**"); }