Index: src/java/org/apache/lucene/search/AutomatonQuery.java =================================================================== --- src/java/org/apache/lucene/search/AutomatonQuery.java (revision 908372) +++ src/java/org/apache/lucene/search/AutomatonQuery.java (working copy) @@ -72,13 +72,13 @@ protected TermsEnum getTermsEnum(IndexReader reader) throws IOException { // matches nothing if (BasicOperations.isEmpty(automaton)) { - return new EmptyTermsEnum(); + return EmptyTermsEnum.INSTANCE; } // matches all possible strings if (BasicOperations.isTotal(automaton)) { final Terms terms = reader.fields().terms(getField()); - return (terms != null) ? terms.iterator() : new EmptyTermsEnum(); + return (terms != null) ? terms.iterator() : EmptyTermsEnum.INSTANCE; } // matches a fixed string in singleton representation Index: src/java/org/apache/lucene/search/EmptyTermsEnum.java =================================================================== --- src/java/org/apache/lucene/search/EmptyTermsEnum.java (revision 908372) +++ src/java/org/apache/lucene/search/EmptyTermsEnum.java (working copy) @@ -28,11 +28,14 @@ * {@link MultiTermQuery#rewriteMethod}. */ public final class EmptyTermsEnum extends FilteredTermsEnum { + + /** Use this singleton instance */ + public static final EmptyTermsEnum INSTANCE = new EmptyTermsEnum(); /** * Creates a new EmptyTermsEnum. */ - public EmptyTermsEnum() { + private EmptyTermsEnum() { super((TermsEnum) null); } Index: src/java/org/apache/lucene/search/NumericRangeQuery.java =================================================================== --- src/java/org/apache/lucene/search/NumericRangeQuery.java (revision 908372) +++ src/java/org/apache/lucene/search/NumericRangeQuery.java (working copy) @@ -304,7 +304,7 @@ protected TermsEnum getTermsEnum(final IndexReader reader) throws IOException { // very strange: java.lang.Number itsself is not Comparable, but all subclasses used here are return (min != null && max != null && ((Comparable) min).compareTo(max) > 0) ? - new EmptyTermsEnum() : + EmptyTermsEnum.INSTANCE : new NumericRangeTermsEnum(reader); } Index: src/java/org/apache/lucene/search/PrefixQuery.java =================================================================== --- src/java/org/apache/lucene/search/PrefixQuery.java (revision 908372) +++ src/java/org/apache/lucene/search/PrefixQuery.java (working copy) @@ -52,7 +52,7 @@ protected TermsEnum getTermsEnum(IndexReader reader) throws IOException { if (prefix.text().length() == 0) { final Terms terms = reader.fields().terms(getField()); - return (terms != null) ? terms.iterator() : new EmptyTermsEnum(); + return (terms != null) ? terms.iterator() : EmptyTermsEnum.INSTANCE; } return new PrefixTermsEnum(reader, prefix); } Index: src/java/org/apache/lucene/search/TermRangeQuery.java =================================================================== --- src/java/org/apache/lucene/search/TermRangeQuery.java (revision 908372) +++ src/java/org/apache/lucene/search/TermRangeQuery.java (working copy) @@ -137,11 +137,11 @@ @Override protected TermsEnum getTermsEnum(IndexReader reader) throws IOException { if (collator == null && lowerTerm != null && upperTerm != null && lowerTerm.compareTo(upperTerm) > 0) { - return new EmptyTermsEnum(); + return EmptyTermsEnum.INSTANCE; } if ((lowerTerm == null || (collator == null && includeLower && "".equals(lowerTerm))) && upperTerm == null) { final Terms terms = reader.fields().terms(field); - return (terms != null) ? terms.iterator() : new EmptyTermsEnum(); + return (terms != null) ? terms.iterator() : EmptyTermsEnum.INSTANCE; } return new TermRangeTermsEnum(reader, field, lowerTerm, upperTerm, includeLower, includeUpper, collator); Index: src/test/org/apache/lucene/search/TestAutomatonQuery.java =================================================================== --- src/test/org/apache/lucene/search/TestAutomatonQuery.java (revision 908372) +++ src/test/org/apache/lucene/search/TestAutomatonQuery.java (working copy) @@ -218,7 +218,7 @@ .makeEmpty()); // not yet available: assertTrue(aq.getEnum(searcher.getIndexReader()) // instanceof EmptyTermEnum); - assertTrue(aq.getTermsEnum(searcher.getIndexReader()) instanceof EmptyTermsEnum); + assertSame(EmptyTermsEnum.INSTANCE, aq.getTermsEnum(searcher.getIndexReader())); assertEquals(0, automatonQueryNrHits(aq)); } }