Index: queryparser/src/java/org/apache/lucene/queryparser/flexible/core/builders/QueryTreeBuilder.java =================================================================== --- queryparser/src/java/org/apache/lucene/queryparser/flexible/core/builders/QueryTreeBuilder.java (revision 1486282) +++ queryparser/src/java/org/apache/lucene/queryparser/flexible/core/builders/QueryTreeBuilder.java (working copy) @@ -150,7 +150,7 @@ builder = getQueryBuilder(clazz); if (builder == null) { - Class[] classes = node.getClass().getInterfaces(); + Class[] classes = clazz.getInterfaces(); for (Class actualClass : classes) { builder = getQueryBuilder(actualClass); Index: queryparser/src/test/org/apache/lucene/queryparser/flexible/core/builders/TestQueryTreeBuilder.java =================================================================== --- queryparser/src/test/org/apache/lucene/queryparser/flexible/core/builders/TestQueryTreeBuilder.java (revision 1486282) +++ queryparser/src/test/org/apache/lucene/queryparser/flexible/core/builders/TestQueryTreeBuilder.java (working copy) @@ -22,6 +22,8 @@ import org.apache.lucene.queryparser.flexible.core.QueryNodeException; import org.apache.lucene.queryparser.flexible.core.nodes.FieldQueryNode; import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode; +import org.apache.lucene.queryparser.flexible.core.nodes.QueryNodeImpl; +import org.apache.lucene.queryparser.flexible.core.parser.EscapeQuerySyntax; import org.apache.lucene.queryparser.flexible.core.util.UnescapedCharSequence; import org.apache.lucene.util.LuceneTestCase; import org.junit.Test; @@ -35,8 +37,29 @@ Object result = qtb.build(new FieldQueryNode(new UnescapedCharSequence("field"), "foo", 0, 0)); Assert.assertEquals("OK", result); + qtb = new QueryTreeBuilder(); + qtb.setBuilder(DummyQueryNodeInterface.class, new DummyBuilder()); + result = qtb.build(new DummyQueryNode()); + Assert.assertEquals("OK", result); } + private static interface DummyQueryNodeInterface extends QueryNode { + + } + + private static abstract class AbstractDummyQueryNode extends QueryNodeImpl implements DummyQueryNodeInterface { + + } + + private static class DummyQueryNode extends AbstractDummyQueryNode { + + @Override + public CharSequence toQueryString(EscapeQuerySyntax escapeSyntaxParser) { + return "DummyQueryNode"; + } + + } + private static class DummyBuilder implements QueryBuilder { @Override