Index: contrib/queryparser/src/test/org/apache/lucene/queryParser/core/builders/TestQueryTreeBuilder.java =================================================================== --- contrib/queryparser/src/test/org/apache/lucene/queryParser/core/builders/TestQueryTreeBuilder.java (revision 0) +++ contrib/queryparser/src/test/org/apache/lucene/queryParser/core/builders/TestQueryTreeBuilder.java (revision 0) @@ -0,0 +1,31 @@ +package org.apache.lucene.queryParser.core.builders; + +import junit.framework.Assert; + +import org.apache.lucene.queryParser.core.QueryNodeException; +import org.apache.lucene.queryParser.core.nodes.FieldQueryNode; +import org.apache.lucene.queryParser.core.nodes.QueryNode; +import org.apache.lucene.queryParser.core.util.UnescapedCharSequence; +import org.apache.lucene.util.LuceneTestCase; +import org.junit.Test; + +public class TestQueryTreeBuilder extends LuceneTestCase { + + @Test + public void testSetFieldBuilder() throws QueryNodeException { + QueryTreeBuilder qtb = new QueryTreeBuilder(); + qtb.setBuilder("field", new DummyBuilder()); + Object result = qtb.build(new FieldQueryNode(new UnescapedCharSequence("field"), "foo", 0, 0)); + Assert.assertEquals("OK", result); + + } + + private static class DummyBuilder implements QueryBuilder { + + public Object build(QueryNode queryNode) throws QueryNodeException { + return "OK"; + } + + } + +} Property changes on: contrib/queryparser/src/test/org/apache/lucene/queryParser/core/builders/TestQueryTreeBuilder.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/core/builders/QueryTreeBuilder.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/core/builders/QueryTreeBuilder.java (revision 1056994) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/core/builders/QueryTreeBuilder.java (working copy) @@ -61,7 +61,7 @@ private HashMap, QueryBuilder> queryNodeBuilders; - private HashMap fieldNameBuilders; + private HashMap fieldNameBuilders; /** * {@link QueryTreeBuilder} constructor. @@ -73,28 +73,25 @@ /** * Associates a field name with a builder. * - * @param fieldName - * the field name - * @param builder - * the builder to be associated + * @param fieldName the field name + * @param builder the builder to be associated */ public void setBuilder(CharSequence fieldName, QueryBuilder builder) { if (this.fieldNameBuilders == null) { - this.fieldNameBuilders = new HashMap(); + this.fieldNameBuilders = new HashMap(); } - this.fieldNameBuilders.put(fieldName, builder); + this.fieldNameBuilders.put(fieldName.toString(), builder); + } /** * Associates a class with a builder * - * @param queryNodeClass - * the class - * @param builder - * the builder to be associated + * @param queryNodeClass the class + * @param builder the builder to be associated */ public void setBuilder(Class queryNodeClass, QueryBuilder builder) { @@ -135,9 +132,14 @@ QueryBuilder builder = null; if (this.fieldNameBuilders != null && node instanceof FieldableNode) { + CharSequence field = ((FieldableNode) node).getField(); - builder = this.fieldNameBuilders.get(((FieldableNode) node).getField()); + if (field != null) { + field = field.toString(); + } + builder = this.fieldNameBuilders.get(field); + } if (builder == null && this.queryNodeBuilders != null) { @@ -203,14 +205,13 @@ * Builds some kind of object from a query tree. Each node in the query tree * is built using an specific builder associated to it. * - * @param queryNode - * the query tree root node + * @param queryNode the query tree root node * * @return the built object * - * @throws QueryNodeException - * if some node builder throws a {@link QueryNodeException} or if - * there is a node which had no builder associated to it + * @throws QueryNodeException if some node builder throws a + * {@link QueryNodeException} or if there is a node which had no + * builder associated to it */ public Object build(QueryNode queryNode) throws QueryNodeException { process(queryNode); Index: contrib/CHANGES.txt =================================================================== --- contrib/CHANGES.txt (revision 1056994) +++ contrib/CHANGES.txt (working copy) @@ -48,6 +48,11 @@ Bug fixes + * LUCENE-2855: contrib queryparser was using CharSequence as key in some internal + Map instances, which was leading to incorrect behaviour, since some CharSequence + implementors do not override hashcode and equals methods. Now the internal Maps + are using String instead. + * LUCENE-2068: Fixed ReverseStringFilter which was not aware of supplementary characters. During reverse the filter created unpaired surrogates, which will be replaced by U+FFFD by the indexer, but not at query time. The filter