Index: lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java (revision 1436600) +++ lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java (revision ) @@ -71,7 +71,7 @@ case None: TermsCollector termsCollector = TermsCollector.create(fromField, multipleValuesPerDocument); fromSearcher.search(fromQuery, termsCollector); - return new TermsQuery(toField, termsCollector.getCollectorTerms()); + return new TermsQuery(toField, fromQuery, termsCollector.getCollectorTerms()); case Total: case Max: case Avg: Index: lucene/join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java (revision 1436600) +++ lucene/join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java (revision ) @@ -93,6 +93,35 @@ } @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } if (!super.equals(obj)) { + return false; + } if (getClass() != obj.getClass()) { + return false; + } + + TermsIncludingScoreQuery other = (TermsIncludingScoreQuery) obj; + if (!field.equals(other.field)) { + return false; + } + if (!unwrittenOriginalQuery.equals(other.unwrittenOriginalQuery)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result += prime * field.hashCode(); + result += prime * unwrittenOriginalQuery.hashCode(); + return result; + } + + @Override public Weight createWeight(IndexSearcher searcher) throws IOException { final Weight originalWeight = originalQuery.createWeight(searcher); return new Weight() { Index: lucene/join/src/java/org/apache/lucene/search/join/TermsQuery.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/join/src/java/org/apache/lucene/search/join/TermsQuery.java (revision 1436600) +++ lucene/join/src/java/org/apache/lucene/search/join/TermsQuery.java (revision ) @@ -21,6 +21,7 @@ import org.apache.lucene.index.Terms; import org.apache.lucene.index.TermsEnum; import org.apache.lucene.search.MultiTermQuery; +import org.apache.lucene.search.Query; import org.apache.lucene.util.AttributeSource; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRefHash; @@ -37,13 +38,15 @@ class TermsQuery extends MultiTermQuery { private final BytesRefHash terms; + private final Query fromQuery; // Used for equals() only /** * @param field The field that should contain terms that are specified in the previous parameter * @param terms The terms that matching documents should have. The terms must be sorted by natural order. */ - TermsQuery(String field, BytesRefHash terms) { + TermsQuery(String field, Query fromQuery, BytesRefHash terms) { super(field); + this.fromQuery = fromQuery; this.terms = terms; } @@ -61,6 +64,31 @@ return "TermsQuery{" + "field=" + field + '}'; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } if (!super.equals(obj)) { + return false; + } if (getClass() != obj.getClass()) { + return false; + } + + TermsQuery other = (TermsQuery) obj; + if (!fromQuery.equals(other.fromQuery)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result += prime * fromQuery.hashCode(); + return result; } static class SeekingTermSetTermsEnum extends FilteredTermsEnum {