From e12cf645de8e40bcd9772e9b2da49fb376770c60 Mon Sep 17 00:00:00 2001 From: Nasser Grainawi Date: Thu, 27 Jun 2013 19:25:36 -0600 Subject: [PATCH] Compare instance of predicates, not exact class We want the same behavior for any instance of the boolean predicates, not just for the exact boolean classes. Change-Id: I2d1168c7a69e03db4b8dda3ddf60275a603c3e27 --- .../google/gerrit/lucene/QueryBuilder.java | 6 ++--- .../gerrit/server/query/QueryRewriter.java | 6 ++--- .../server/query/change/IndexRewriteImpl.java | 22 +++++++------------ 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/QueryBuilder.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/QueryBuilder.java index 4f57a5a9d4..e1c08d2f56 100644 --- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/QueryBuilder.java +++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/QueryBuilder.java @@ -54,11 +54,11 @@ public class QueryBuilder { public static Query toQuery(Predicate p) throws QueryParseException { - if (p.getClass() == AndPredicate.class) { + if (p instanceof AndPredicate) { return booleanQuery(p, MUST); - } else if (p.getClass() == OrPredicate.class) { + } else if (p instanceof OrPredicate) { return booleanQuery(p, SHOULD); - } else if (p.getClass() == NotPredicate.class) { + } else if (p instanceof NotPredicate) { if (p.getChild(0) instanceof TimestampRangePredicate) { return notTimestampQuery( (TimestampRangePredicate) p.getChild(0)); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/QueryRewriter.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/QueryRewriter.java index 6ccee2be0e..b6a08d32e6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/QueryRewriter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/QueryRewriter.java @@ -159,17 +159,17 @@ public abstract class QueryRewriter { } protected Predicate replaceGenericNodes(final Predicate in) { - if (in.getClass() == NotPredicate.class) { + if (in instanceof NotPredicate) { return not(replaceGenericNodes(in.getChild(0))); - } else if (in.getClass() == AndPredicate.class) { + } else if (in instanceof AndPredicate) { List> n = new ArrayList>(in.getChildCount()); for (Predicate c : in.getChildren()) { n.add(replaceGenericNodes(c)); } return and(n); - } else if (in.getClass() == OrPredicate.class) { + } else if (in instanceof OrPredicate) { List> n = new ArrayList>(in.getChildCount()); for (Predicate c : in.getChildren()) { n.add(replaceGenericNodes(c)); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IndexRewriteImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IndexRewriteImpl.java index 7a7c139039..51f620856d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IndexRewriteImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IndexRewriteImpl.java @@ -65,15 +65,15 @@ public class IndexRewriteImpl implements IndexRewrite { public static EnumSet getPossibleStatus(Predicate in) { if (in instanceof ChangeStatusPredicate) { return EnumSet.of(((ChangeStatusPredicate) in).getStatus()); - } else if (in.getClass() == NotPredicate.class) { + } else if (in instanceof NotPredicate) { return EnumSet.complementOf(getPossibleStatus(in.getChild(0))); - } else if (in.getClass() == OrPredicate.class) { + } else if (in instanceof OrPredicate) { EnumSet s = EnumSet.noneOf(Change.Status.class); for (int i = 0; i < in.getChildCount(); i++) { s.addAll(getPossibleStatus(in.getChild(i))); } return s; - } else if (in.getClass() == AndPredicate.class) { + } else if (in instanceof AndPredicate) { EnumSet s = EnumSet.allOf(Change.Status.class); for (int i = 0; i < in.getChildCount(); i++) { s.retainAll(getPossibleStatus(in.getChild(i))); @@ -120,7 +120,7 @@ public class IndexRewriteImpl implements IndexRewrite { if (in instanceof IndexPredicate) { return in; } - if (!isRewritePossible(in)) { + if (!isBoolean(in)) { return null; } int n = in.getChildCount(); @@ -194,9 +194,7 @@ public class IndexRewriteImpl implements IndexRewrite { if (p instanceof IndexPredicate) { return !((IndexPredicate) p).isIndexOnly(); } - if (p instanceof AndPredicate - || p instanceof OrPredicate - || p instanceof NotPredicate) { + if (isBoolean(p)) { for (int i = 0; i < p.getChildCount(); i++) { if (!allNonIndexOnly(p.getChild(i))) { return false; @@ -217,12 +215,8 @@ public class IndexRewriteImpl implements IndexRewrite { } } - private static boolean isRewritePossible(Predicate p) { - if (p.getClass() != AndPredicate.class - && p.getClass() != OrPredicate.class - && p.getClass() != NotPredicate.class) { - return false; - } - return p.getChildCount() > 0; + private static boolean isBoolean(Predicate p) { + return p instanceof AndPredicate || p instanceof OrPredicate + || p instanceof NotPredicate; } }